Bonjour à tous,
existe-t-il un environnement ou autres qui permet d'exécuter du code sans pour autant afficher quoi que ce soit sur le document final ?
merci d'avance pour l'info.
Bonjour à tous,
existe-t-il un environnement ou autres qui permet d'exécuter du code sans pour autant afficher quoi que ce soit sur le document final ?
merci d'avance pour l'info.
Re,
Si ça existe ? Posé comme ça... aucune idée.
En revanche, ça doit pouvoir se coder sans trop de difficulté, mais tu devrais être plus explicite sur ce que tu veux.
Un petit exemple serait le bienvenue
Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)
Une solution vous convient ? N'oubliez pas le tag
)><))))°>
pas de problème.
Voici mon problème en entier : je suis en train d'écrire ma propre class et sur la page de titre j'aimerais quelque chose ressemblant à cela :
Auteurs : Isaac NEWTON
Albert EINSTEIN
...
Le problème étant que je ne sais pas toujours si j'ai un seul ou plusieurs auteur, donc j'ai créé un \newif pour savoir s'il doit ou pas mettre de 's' à auteur. Pour ceci je pensais modifier la variable \newifvar en modifier la macro \and (ajouter vartrue), mais pour le moment, je n'ai pas trouvé le moyen de faire ça puisque le \and viendra après dans le code. Il me faudrait donc effectuer le \@author à blanc avant histoire de voir s'il y a un \and ou pas dans \author.
Je prends peut-être pas mon problème dans le bon sens alors si quelqu'un a une solution avec une autre démarche, je suis pas contre. Cependant j'ai pas très envie que se soit l'auteur qui détermine s'il y a plusieurs ou un seul auteur du dossier, j'ai vraiment envie que cela se fasse totalement automatiquement.
bon bon, je suis toujours sur mon problème ... je le tourne dans tous les sens mais toujours aucune solution à l'horizon. J'ai regardé le package verbatim pour voir s'il y avait quelque chose à en tirer mais il fait tout l'inverse de ce que je souhaite faire
Bonjour,
À mon avis, tu devrais plutôt chercher à directement tester la présence de \and dans la commande qui stocke les noms d'auteurs, sans chercher à "l'écrire" quelque part.
Pour cela, la commande \isin du package xifthen me semblait prometteuse, mais je n'arrive pas à l'utiliser.
En revanche, la commande \IfSubStr du package xstring semble faire l'affaire.
Il faudra peut-être faire gaffe à ce que le(s) \and ne soi(en)t pas interprété(s). Il me semble que la documentation du package en parle...
Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)
Une solution vous convient ? N'oubliez pas le tag
)><))))°>
Bonjour,
J'ai réussi à faire ce que je souhaitais en magouillant un peu avec \IfSubStr, par contre je pense qu'il y aurait moyen de faire beaucoup plus simple avec \isin. Mon seul et unique problème avec cette macro est qu'elle n'interprète pas les macros qui se trouve des la chaine où l'on cherche un occurence d'une sous-chaine mais les voit comme des caractères uniques. J'ai essayé de trouver un moyen afin de forcer l'interprétation mais pour l'instant je n'ai rien.
Quelqu'un aurait-il une solution à me proposer ? (... avec l'utilisation de \isin)
Bonjour,
Peux-tu déjà nous montrer ce que tu as réussi à faire avec \IfSubStr ?
Non seulement ça peut intéresser du monde (j'en suis) mais ça pourrait également donner de l'inspiration pour des pistes avec \isin, sait-on jamais...
Y a-t-il une raison particulière à ce que tu préfère \isin à \IfSubStr ?
Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)
Une solution vous convient ? N'oubliez pas le tag
)><))))°>
Bonsoir,
Mon problème avec \IfSubStr est qu'elle a un peu de mal avec les caractères spéciaux (&, \\, ...), je dois donc modifier \and dans un premier temps afin d'éviter une erreur de compilation. (Il faut noter que \IfSubStr interprète les macros !) Et finalement, je dois remodifier \and avec \gdef car un \renewcommand n'est pas global. J'ai essayé de mettre un \global devant mais ça n'a rien changé au résultat final. (D'ailleur si quelqu'un sait comment faire un "\globalrenewcommand" .... )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 [...] \renewcommand*{\and}{\&} \begin{tabular}[t]{rl} Author\IfSubStr{\@author}{\&}{s}{} : \gdef\and{\\ &} & \@author \\ \end{tabular} [...]
Mon problème avec \isin est qu'elle n'interpète pas les macros et donc je ne peux pas vérifier si un \and est présent dans \@author. Je me demandais donc s'il était possible de forcer l'interprétation, mais je me suis rendu compte ensuite que pour forcer une marco à être interpréter il fallait mettre une macro X magique devant, mais celle ci ne serait pas interprété non plus.
Au final, je vais me contenter de \IfSubStr en attendant de trouver une macro peut-être un peu plus appropriée à mon problème.
a+
Bonjour,
Il s'agit d'un problème d'expansion des commandes : dans ton cas, le \and est développé et les \ et & que xstring redoute tant font partie des chaînes comparées. D'où l'erreur.
La difficulté dans ton cas, c'est que si tu demandes à ce que les commandes ne soit pas développées, tu vas comparer "\@author" et "\and" comme chaînes de caractères
Cependant, le package xstring offre des moyens de contrôler plus finement l'expansion des commandes, i.e. définir une profondeur de développement.
L'exemple suivant fonctionne :
Tu cherches donc bien la présence de "\and" et non "\\ &" dans \@author (en fait, je crois qu'avec le \detokenize, \and devient quelque chose comme "and).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ... \renewcommand{\and}{\\ &} \newcommand{\testa}{bla \and blabla} \begin{document} \StrExpand[0]{\and}{\andtmp} % => \and \StrExpand[1]{\testa}{\testatmp} % => author \and author \begin{tabular}[t]{rl} Author\IfSubStr{\detokenize\expandafter{\testatmp}}% {\detokenize\expandafter{\andtmp}}{s}{} : & \testa \\ \end{tabular} ...
Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)
Une solution vous convient ? N'oubliez pas le tag
)><))))°>
parfait, c'est exactement ce à quoi je voulais arriver ... merci encore pour ton aide.
Je me permets de déterrer ce post , tant pis si on me gueule dessus par la suite
Je voulais apporter quelques précisions sur xstring, étant l'auteur de cette extension. Tout d'abord, les macros de xstring développent par défaut les arguments contenant des chaînes (puisque \fullexpandarg est appelé par le package). C'est juste pour éviter des \expandafter partout. On peut très bien si on veut :
- appeler \noexpandarg qui fait que les macros ne développent rien du tout
- appeler \expandarg qui oblige les macros à développer le 1er token seulement des arguments contenant des chaînes, les autres tokens étant laissés tels quels.
Et puis normalement, tous les tokens sont permis dans les chaînes, à part ceux de catcode 6 et 14 (c'est-à-dire # et %). Cela inclus tous les autres, notamment "&", "\\", "^", etc... Si quelqu'un trouve un dysfonctionnement avec les tokens autorisés, il s'agit d'un bug du package, et j'aimerais bien que l'on me le signale
Bref, pour en revenir à la question posée, on peut très bien se passer de la macro \StrExpand ainsi que du bricolage avec \detokenize et \expandafter (bricolage que la macro étoilée fait toute seule d'ailleurs).
Donc dans le code ci-dessous, j'invoque \epxandarg dans le tableau, comme ça, c'est local, et je neutralise le 1-développement de \and en mettant comme premier token \empty qui se développera en rien (c'est l'astuce qui tue , voir la doc et les exemples à la fin, je crois) :
Voilà, désolé pour ce long post.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 \documentclass[12pt,a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{xstring} \usepackage[francais]{babel} \renewcommand{\and}{\\ &} \newcommand{\testa}{bla \and blabla} \begin{document} \begin{tabular}[t]{rl} \expandarg Author\IfSubStr{\testa}% {\empty\and}{s}{} : & \testa \\ \end{tabular} \end{document}
A+
Christian
Bonjour Christian et binvenue sur DVP,
Ah bin non, quand même, c'est un honneur d'avoir des explications par le développeur du package.
La recherche d'empty dans la doc m'a effectivement amené à une série d'exemples fort intéressants sur contrôle du développement des macros. Si je pouvais suggéré que ce soit davantage mis en valeur...
Une petite question sur \empty : est ce une macro qui renvoie exactement son argument (rajoute un niveau de développement) ou bien est ce qu'elle bloque le développement des arguments quel que soit le nombre de niveaux choisis (e.g. avec \StrExpand) ?
Encore merci pour les précisions et pour ce chouette package.
Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)
Une solution vous convient ? N'oubliez pas le tag
)><))))°>
Ben non, \empty est une macro LaTeX définie par le code suivant d'une simplicité biblique :
cette macro a bien un développement puisque ce n'est pas une primitive TeX. Son développement est rien du tout, le vide absolu quoi : que dalle c'est-à-dire l'intérieur de {}.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 \def\empty{}
Maintenant, si je définis une macro \truc comme ça :
alors le 1-développement de \truc est naturellement \empty\bidule que l'on peut vérifier avec \meaning\truc dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 \def\truc{\empty\bidule}
Mais si je développe \empty avant de définir \truc avec des \expandafter comme ça, c'est-à-dire comme le font les macro de xstring avec \expandarg :
alors \empty a été 1-développée en rien et ce code est rigoureusement le même que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 \expandafter\def\expandafter\truc\expandafter{\empty\bidule}
C'est pour ça que lorsqu'on choisit \expandarg avec xstring, on peut empêcher le 1-développement du 1er token d'un argument en mettant \empty comme 1er token et les autres ensuite : de cette façon, \empty est développée en rien, et tout se passe comme si l'argument n'avait pas été développé du tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 \def\truc{\bidule}
J'espère que j'ai été clair , en fait, je crois pas
Pour la mise en valeur de trucs dans la doc, comme tu as pu t'en apercevoir, chui pas un type doué pour écrire une doc . Comme ce genre d'astuce est quand même pour les utilisateurs avancés qui savent exactement ce qu'est un développement et quelle utilité cela a de les contrôler ce qui suppose une bonne connaissance des mécanismes de TeX, je préfère ne pas l'encadrer en rose et le laisser tel quel !
Christian
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager