Czy jest jakiś sposób na zdefiniowanie zmiennej w LaTeX?

349

W LaTeX, jak mogę zdefiniować zmienną łańcuchową, której treść jest używana zamiast zmiennej w skompilowanym pliku PDF?

Powiedzmy, że piszę dokumentację techniczną na temat oprogramowania i chcę zdefiniować nazwę pakietu w preambule lub w innym miejscu, aby w przypadku zmiany nazwy nie musiałem go zastępować w wielu miejscach, ale tylko w jednym miejscu .

Andrea Giovacchini
źródło
2
W przypadku ogromnej zawartości warto wspomnieć o \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ).
Immanuel Weihnachten

Odpowiedzi:

370

dodaj następujące preambuły:

\newcommand{\newCommandName}{text to insert}

Następnie możesz po prostu użyć \newCommandName{}w tekście

Aby uzyskać więcej informacji \newcommand, zobacz np. Wikibooks

Przykład:

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

Wynik:

30
druga
źródło
31
@DiAlex należy zachować ostrożność, pomijając nawiasy klamrowe, ponieważ będą one zakłócać białe znaki po wstawionym tekście. Zobacz to pytanie .
jtpereyda
Nie mogę sprawić, żeby działała poprawnie z postaciami nie-ascii. Jakieś pomysły?
lip
164

Użyj \defpolecenia:

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

Należy pamiętać, że \defzastępuje istniejące makra bez ostrzeżeń i dlatego może powodować różne subtelne błędy. Aby temu zaradzić użyć przestrzeni nazw zmiennych, jak my_vari spaść z powrotem \newcommand, \renewcommandpoleceń zamiast.

plaes
źródło
10
Korzystanie \defmoże być problematyczne, ponieważ nie sprawdza wcześniej istniejących makr. Zobacz drugi krąg piekła LaTeX - jako taki lepiej jest go używać\newcommand
Ryan Atallah
2
Dzięki @RyanAtallah dodał notatkę na ten temat. Czy jednak nie oznacza variableto, że może ulec zmianie? :)
gra
4
@plaes Masz rację, ale to wciąż nie oznacza, że ​​chcesz użyć \def. Zamiast tego uważam, że najlepszą praktyką jest najpierw „zainicjować” wszystkie zmienne, których chcesz używać \newcommand(nawet jeśli jest to po prostu \@empty), a następnie utworzyć polecenie, aby zmodyfikować zmienną za pomocą \renewcommand. Dzięki temu dowiesz się, czy zmienna już istnieje, ponieważ \newcommandzgłosi błąd (lub przynajmniej ostrzeżenie).
Nick2253,
4
Pamiętaj, że \defdziała na rzeczy w trybie matematycznym, a \newCommandNamenie działa. (Np. \def\mathExpression{\pi^2 + \sin x})
Jollywatt,
35

Dla zmiennych opisujących odległości, należy użyć \newlength(i manipulować wartości z \setlength, \addlength, \settoheight, \settolengthi \settodepth).

Podobnie masz dostęp do \newcountertakich elementów, jak numery sekcji i cyfr, które powinny zwiększać się w całym dokumencie. Użyłem tego w przeszłości, aby dostarczyć próbki kodu, które były ponumerowane oddzielnie od innych cyfr ...

Warto również wspomnieć o \makeboxtym, że można przechowywać trochę ułożonego dokumentu do późniejszego ponownego wykorzystania (i do użytku z \settolength...).

dmckee --- były kot moderator
źródło
25
Prosty przykład użycia jak \newlength{\hcolw}i \setlength{\hcolw}{0.47\textwidth}byłby przydatny.
trybik
1

Myślę, że prawdopodobnie chcesz skorzystać z listy tokena do tego celu: aby utworzyć listę tokenów \newtoks\packagename , aby przypisać nazwę: \packagename={New Name for the package} umieścić nazwę na swoim wyjściu: \the\packagename.

John Burt
źródło