Existe alguma maneira de definir uma variável no LaTeX?

349

No LaTeX, como posso definir uma variável de string cujo conteúdo é usado em vez da variável no PDF compilado?

Digamos que estou escrevendo um documento técnico em um software e quero definir o nome do pacote no preâmbulo ou em algum lugar para que, se o nome for alterado, não seja necessário substituí-lo em muitos lugares, mas apenas em um lugar .

Andrea Giovacchini
fonte
2
Para um conteúdo enorme, vale a pena mencionar \ savebox ( pt.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten

Respostas:

370

adicione o seguinte ao seu preâmbulo:

\newcommand{\newCommandName}{text to insert}

Então você pode apenas usar \newCommandName{}no texto

Para mais informações \newcommand, consulte, por exemplo, wikibooks

Exemplo:

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

Resultado:

30
segundo
fonte
31
O @DiAlex tenha cuidado ao omitir as chaves, pois isso interferirá no espaço em branco após o texto inserido. Veja esta pergunta .
Jtpereyda
Não consigo fazer isso funcionar corretamente com caracteres não-ascii. Alguma ideia?
Lindhe
164

Use o \defcomando:

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

Esteja ciente de que \defsubstitui macros preexistentes sem avisos e, portanto, pode causar vários erros sutis. Para superar isso, use variáveis ​​espaçadas por nome como my_varou retorne aos comandos \newcommand, em \renewcommandvez disso.

placas
fonte
10
O uso \defpode ser problemático, pois não verifica macros preexistentes. Veja o segundo círculo do inferno do LaTeX - como tal, é preferível usar\newcommand
Ryan Atallah
2
Obrigado @RyanAtallah acrescentou nota sobre isso. Porém, o significado de não variablesignifica que ele pode mudar? :)
plaes 15/03
4
@plaes Você está certo, mas isso ainda não significa que você deseja usar \def. Em vez disso, acho que é uma boa prática primeiro "inicializar" todas as variáveis ​​com as quais você deseja usar \newcommand(mesmo que seja apenas com \@empty) e, em seguida, criar seu comando para modificar a variável usando \renewcommand. Isso permitirá que você saiba se sua variável já sai, porque \newcommandgerará um erro (ou pelo menos um aviso).
Nick2253
4
Observe que \deffunciona para coisas no modo matemático, enquanto \newCommandNamenão funciona. (Por exemplo, \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Para variáveis descrevendo distâncias, você usaria \newlength(e manipular os valores com \setlength, \addlength, \settoheight, \settolengthe \settodepth).

Da mesma forma, você tem acesso a \newcounteritens como números de seção e figura que devem ser incrementados ao longo do documento. Eu usei este no passado para fornecer exemplos de código que foram numerados separadamente de outras figuras ...

Também é importante notar \makeboxque permite armazenar um pouco de documento para posterior reutilização (e para uso com \settolength...).

dmckee --- gatinho ex-moderador
fonte
25
Exemplo de uso simples como \newlength{\hcolw}e \setlength{\hcolw}{0.47\textwidth}seria útil.
trybik
1

Eu acho que você provavelmente vai querer usar uma lista de tokens para esta finalidade: para configurar a lista de tokens \newtoks\packagename para atribuir o nome: \packagename={New Name for the package} para colocar o nome em sua saída: \the\packagename.

John Burt
fonte