¿Hay alguna forma de definir una variable en LaTeX?

350

En LaTeX, ¿cómo puedo definir una variable de cadena cuyo contenido se usa en lugar de la variable en el PDF compilado?

Digamos que estoy escribiendo un documento técnico en un software y quiero definir el nombre del paquete en el preámbulo o en algún lugar para que si su nombre cambia, no tenga que reemplazarlo en muchos lugares, sino solo en un lugar .

Andrea Giovacchini
fuente
2
Para contenido enorme, vale la pena mencionar \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten

Respuestas:

371

agregue lo siguiente a su preámbulo:

\newcommand{\newCommandName}{text to insert}

Entonces puedes usarlo \newCommandName{}en el texto

Para obtener más información sobre \newcommand, consulte, por ejemplo, wikilibros

Ejemplo:

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

Salida:

30
segundo
fuente
31
@DiAlex tenga cuidado al omitir las llaves, ya que interferirá con el espacio en blanco después del texto insertado. Ver esta pregunta .
jtpereyda
No puedo hacer que esto funcione correctamente con caracteres no ascii. ¿Algunas ideas?
Lindhe
164

Use el \defcomando:

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

Tenga en cuenta que \defanula las macros preexistentes sin ninguna advertencia y, por lo tanto, puede causar varios errores sutiles. Para superar esto, ya sea utilizar variables de espacios de nombres como my_varo caer de nuevo a \newcommand, \renewcommandlos comandos en su lugar.

Plaes
fuente
10
El uso \defpuede ser problemático ya que no busca macros preexistentes. Vea el segundo círculo del infierno de LaTeX : como tal, es preferible usarlo\newcommand
Ryan Atallah
2
Gracias @RyanAtallah agregó una nota al respecto. Sin embargo, ¿no significa el significado de variableque es probable que cambie? :)
Plaes
44
@plaes Tienes razón, pero eso todavía no significa que quieras usar \def. En cambio, creo que es una buena práctica primero "inicializar" todas las variables que desea usar \newcommand(incluso si es solo con \@empty), y luego crear su comando para modificar la variable usando \renewcommand. Esto le permitirá saber si su variable ya existe, ya \newcommandque arrojará un error (o al menos una advertencia).
Nick2253
44
Tenga en cuenta que \deffunciona para cosas en modo matemático, mientras \newCommandNameque no. (Por ejemplo, \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Para las variables que describen las distancias, se utiliza \newlength(y manipular los valores con \setlength, \addlength, \settoheight, \settolengthy\settodepth ).

Del mismo modo, tiene acceso a \newcounterelementos como números de sección y figura que deberían incrementarse a lo largo del documento. He usado este en el pasado para proporcionar ejemplos de código numerados por separado de otras figuras ...

También es de destacar \makeboxque le permite almacenar un poco de documento diseñado para su posterior reutilización (y para su uso con \settolength...).

dmckee --- gatito ex moderador
fuente
25
Ejemplo de uso simple como \newlength{\hcolw}y \setlength{\hcolw}{0.47\textwidth}sería útil.
trybik
1

Creo que es probable que desee utilizar una lista de tokens para este propósito: para configurar la lista de símbolos \newtoks\packagename para asignar el nombre de: \packagename={New Name for the package} poner el nombre en su salida: \the\packagename.

John Burt
fuente