2009-07-31 8 views
255

Dans LaTeX, comment puis-je définir une variable chaîne dont le contenu est utilisé à la place de la variable dans le fichier PDF compilé? Disons que j'écris un document technique sur un logiciel et que je veux définir le nom du paquet 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 endroit.Y a-t-il un moyen de définir une variable dans LaTeX?

+2

Pour un contenu énorme, il est utile de mentionner \ savebox (https://en.wikibooks.org/wiki/LaTeX/Boxes#savebox). –

Répondre

263

ajouter suivante vous le 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 wikibooks

+10

Vous pouvez également utiliser juste '' \ newCommandName'' – dialex

+16

@DiAlex soyez prudent lorsque vous omettez les accolades, car cela interférera avec l'espace blanc après le texte inséré. Voir [cette question] (http://tex.stackexchange.com/q/31091). – jtpereyda

+0

Je n'arrive pas à faire fonctionner ceci correctement avec des caractères non-ascii. Des idées? – lindhe

24

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

De même, vous avez accès à \newcounter pour des choses comme les numéros de section et de chiffre qui devraient être incrémentés dans tout le 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 ...

\makebox Vous pouvez également stocker un peu de document mis en page pour une réutilisation ultérieure (et à utiliser avec \settolength ...).

+12

Un exemple d'utilisation simple comme '\ newlength {\ hcolw}' et '\ setlength {\ hcolw} {0.47 \ textwidth}' serait utile. – trybik

136

Utilisez la commande \def:

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

Sachez que \def macros overrides préexistantes sans avertissement et peut donc provoquer diverses erreurs subtiles. Pour surmonter cela, utilisez des variables de type namespace comme my_var ou revenez à \newcommand, \renewcommand à la place.

+5

L'utilisation de '\ def' peut être problématique car elle ne vérifie pas les macros préexistantes. Voir le [deuxième cercle de LaTeX Hell] (http://dabacon.org/pontiff/?p = 6101) - en tant que tel, il est préférable d'utiliser '\ newcommand' –

+2

Merci @RyanAtallah ajouté note à ce sujet. Cependant, le sens de 'variable' ne signifie-t-il pas qu'il est susceptible de changer? :) – plaes

+4

@plaes Vous avez raison, mais cela ne veut pas dire que vous voulez utiliser '\ def'. Au lieu de cela, je pense qu'il est préférable d'initialiser toutes les variables que vous voulez utiliser avec '\ newcommand' (même si c'est juste avec' \ @ empty'), puis créez votre commande pour modifier la variable en utilisant '\ renewcommand '. Cela vous permettra de savoir si votre variable existe déjà, car '\ newcommand' va lancer une erreur (ou au moins un avertissement). – Nick2253

1

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

Questions connexes