Existe-t-il un moyen de définir une variable dans LaTeX?

350

Dans LaTeX, comment puis-je définir une variable de chaîne dont le contenu est utilisé à la place de la variable dans le PDF compilé?

Disons que j'écris un doc technique sur un logiciel et que je veux définir le nom du package dans le préambule ou quelque part afin que si son nom change, je n'ai pas à le remplacer dans beaucoup d'endroits mais seulement dans un seul endroit .

Andrea Giovacchini
la source
2
Pour un contenu énorme, il convient de mentionner \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten

Réponses:

371

ajoutez ce qui suit à votre préambule:

\newcommand{\newCommandName}{text to insert}

Ensuite, vous pouvez simplement utiliser \newCommandName{}dans le texte

Pour plus d'informations sur \newcommand, voir par exemple les wikibooks

Exemple:

\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}

Production:

30
seconde
la source
31
@DiAlex soyez prudent lorsque vous omettez les accolades, car cela interfère avec les espaces blancs après le texte inséré. Voir cette question .
jtpereyda
Je n'arrive pas à faire fonctionner cela correctement avec des caractères non ascii. Des idées?
lindhe
164

Utilisez la \defcommande:

\def \variable {Something that's better to use as a variable}

Sachez que \defremplace les macros préexistantes sans aucun avertissement et peut donc provoquer diverses erreurs subtiles. Pour remédier à cette utilisation soit des variables comme namespaced my_varou revenir à \newcommand, les \renewcommandcommandes à la place.

plaes
la source
10
L'utilisation \defpeut être problématique car elle ne vérifie pas les macros préexistantes. Voir le deuxième cercle de l'enfer LaTeX - en tant que tel, il est préférable d'utiliser\newcommand
Ryan Atallah
2
Merci @RyanAtallah a ajouté une note à ce sujet. Cependant, le sens de variablesignifie-t-il qu'il est susceptible de changer? :)
plaes
4
@plaes Vous avez raison, mais cela ne signifie pas pour autant que vous souhaitez l'utiliser \def. Au lieu de cela, je pense qu'il est préférable de "initialiser" toutes les variables que vous souhaitez utiliser avec \newcommand(même si c'est juste avec \@empty), puis de créer votre commande pour modifier la variable à l'aide \renewcommand. Cela vous permettra de savoir si votre variable se termine déjà, car \newcommandgénérera une erreur (ou au moins un avertissement).
Nick2253
4
Notez que cela \deffonctionne pour les choses en mode mathématique, alors \newCommandNameque non. (Par exemple, \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Pour les variables décrivant les distances, vous devez utiliser \newlength(et manipuler les valeurs avec \setlength, \addlength, \settoheight, \settolengthet \settodepth).

De même, vous avez accès à \newcounterdes éléments tels que les numéros de section et de figure qui devraient augmenter tout au long du document. J'ai utilisé celui-ci dans le passé pour fournir des exemples de code qui étaient numérotés séparément des autres chiffres ...

Il convient également de noter \makeboxque vous pouvez stocker un peu de document mis en page pour une réutilisation ultérieure (et pour une utilisation avec \settolength...).

dmckee --- chaton ex-modérateur
la source
25
Un exemple d'utilisation simple comme \newlength{\hcolw}et \setlength{\hcolw}{0.47\textwidth}serait utile.
trybik
1

Je pense que vous voulez probablement utiliser une liste de tokens à cet effet: mettre en place la liste de jetons \newtoks\packagename pour attribuer le nom: \packagename={New Name for the package} mettre le nom dans votre sortie: \the\packagename.

John Burt
la source