Esiste un modo per definire una variabile in LaTeX?


350

In LaTeX, come posso definire una variabile stringa il cui contenuto viene utilizzato al posto della variabile nel PDF compilato?

Diciamo che sto scrivendo un documento tecnico su un software e voglio definire il nome del pacchetto nel preambolo o da qualche parte in modo che se il suo nome cambia, non devo sostituirlo in molti posti ma solo in un posto .


2
Per contenuti enormi, vale la pena menzionare \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten,

Risposte:


371

aggiungere quanto segue al preambolo:

\newcommand{\newCommandName}{text to insert}

Quindi puoi semplicemente usare \newCommandName{}nel testo

Per maggiori informazioni su \newcommand, vedi ad esempio wikibooks

Esempio:

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

Produzione:

30

31
@DiAlex fai attenzione quando ometti le parentesi graffe, poiché interferirà con lo spazio bianco dopo il testo inserito. Vedere questa domanda .
jtpereyda,

Non riesco a farlo funzionare correttamente con caratteri non ASCII. Qualche idea?
Lindhe,

164

Usa il \defcomando:

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

Essere consapevoli del fatto che \defsostituisce le macro preesistenti senza alcun avviso e pertanto può causare vari errori impercettibili. Per superare questo sia usare le variabili namespace come my_varo ricadere \newcommand, \renewcommandcomandi invece.


10
L'uso \defpuò essere problematico in quanto non verifica la presenza di macro preesistenti. Guarda il secondo cerchio dell'inferno di LaTeX - come tale, è preferibile usare\newcommand
Ryan Atallah

2
Grazie @RyanAtallah aggiunto nota a riguardo. Tuttavia, il significato di variablesignifica che potrebbe cambiare? :)
plaes

4
@plaes Hai ragione, ma ciò non significa che tu voglia usarlo \def. Invece, penso che sia meglio "inizializzare" prima tutte le variabili con cui si desidera utilizzare \newcommand(anche se è solo con \@empty), quindi creare il comando per modificare la variabile utilizzando \renewcommand. Questo ti farà sapere se la tua variabile esiste già, perché \newcommandgenererà un errore (o almeno un avviso).
Nick2253,

4
Nota che \deffunziona per le cose in modalità matematica, mentre \newCommandNamenon lo è. (Es. \def\mathExpression{\pi^2 + \sin x})
Jollywatt,

35

Per le variabili che descrivono le distanze, si usa \newlength(e manipolare i valori con \setlength, \addlength, \settoheight, \settolengthe\settodepth ).

Allo stesso modo hai accesso a \newcountercose come numeri di sezione e di figure che dovrebbero aumentare in tutto il documento. Ho usato questo in passato per fornire esempi di codice che erano numerati separatamente da altre figure ...

Da notare anche \makeboxche consente di archiviare un po 'di documento predisposto per un successivo riutilizzo (e per l'uso con \settolength...).


25
Esempio di utilizzo semplice come \newlength{\hcolw}e \setlength{\hcolw}{0.47\textwidth}sarebbe utile.
Trybik,


1

Penso che probabilmente si desidera utilizzare un elenco di token per questo scopo: per impostare l'elenco di token \newtoks\packagename per assegnare il nome: \packagename={New Name for the package} per mettere il nome nella vostra uscita: \the\packagename.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.