Kann ich eine Variable in LaTeX definieren?

349

Wie kann ich in LaTeX eine Zeichenfolgenvariable definieren, deren Inhalt anstelle der Variablen in der kompilierten PDF-Datei verwendet wird?

Angenommen, ich schreibe ein technisches Dokument über eine Software und möchte den Paketnamen in der Präambel oder irgendwo anders definieren, damit ich ihn nicht ändern muss, wenn sich sein Name ändert, sondern nur an einer Stelle .

Andrea Giovacchini
quelle
2
Für große Inhalte ist \ savebox ( en.wikibooks.org/wiki/LaTeX/Boxes#savebox ) zu erwähnen .
Immanuel Weihnachten

Antworten:

370

Fügen Sie Ihrer Präambel Folgendes hinzu:

\newcommand{\newCommandName}{text to insert}

Dann können Sie einfach \newCommandName{}im Text verwenden

Weitere Informationen \newcommandfinden Sie beispielsweise unter Wikibooks

Beispiel:

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

Ausgabe:

30
zweite
quelle
31
@DiAlex Seien Sie vorsichtig, wenn Sie die geschweiften Klammern weglassen, da dies den Leerraum nach dem eingefügten Text beeinträchtigt. Siehe diese Frage .
jtpereyda
Ich kann nicht erreichen, dass dies mit Nicht-ASCII-Zeichen richtig funktioniert. Irgendwelche Ideen?
Lindhe
164

Verwenden \defBefehl ein :

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

Beachten Sie, dass \defbereits vorhandene Makros ohne Warnungen überschrieben werden und daher verschiedene subtile Fehler verursachen können. Um dies zu überwinden , verwenden Sie stattdessen namenbezogene Variablen wie my_varoder greifen Sie auf Befehle zurück.\newcommand\renewcommand

plaes
quelle
10
Die Verwendung \defkann problematisch sein, da nicht nach bereits vorhandenen Makros gesucht wird. Sehen Sie den zweiten Kreis der LaTeX-Hölle - als solcher ist es vorzuziehen, ihn zu verwenden\newcommand
Ryan Atallah
2
Danke @RyanAtallah hat einen Hinweis dazu hinzugefügt. Bedeutet die Bedeutung von nicht variable, dass es sich ändern kann? :)
Plaes
4
@plaes Du hast Recht, aber das bedeutet immer noch nicht, dass du es verwenden willst \def. Stattdessen ist es meiner Meinung nach empfehlenswert, zuerst alle Variablen zu "initialisieren", mit denen Sie arbeiten möchten \newcommand(auch wenn es nur mit ist \@empty), und dann Ihren Befehl zum Ändern der Variablen mit zu erstellen \renewcommand. Dadurch erfahren Sie, ob Ihre Variable bereits beendet ist, da \newcommandein Fehler (oder zumindest eine Warnung) ausgegeben wird.
Nick2253
4
Beachten Sie, dass dies \deffür Dinge im Mathematikmodus \newCommandNamefunktioniert , während dies nicht der Fall ist. (ZB \def\mathExpression{\pi^2 + \sin x})
Jollywatt
35

Für Variablen Abstände beschreiben, würden Sie verwenden \newlength(und die Werte manipulieren mit \setlength, \addlength, \settoheight, \settolengthund \settodepth).

Ebenso haben Sie Zugriff auf \newcounterDinge wie Abschnitts- und Abbildungsnummern, die im gesamten Dokument erhöht werden sollten. Ich habe dieses in der Vergangenheit verwendet, um Codebeispiele bereitzustellen, die getrennt von anderen Zahlen nummeriert wurden ...

Bemerkenswert ist auch \makebox, dass Sie ein wenig angelegtes Dokument zur späteren Wiederverwendung (und zur Verwendung mit \settolength...) speichern können .

dmckee --- Ex-Moderator Kätzchen
quelle
25
Einfaches Verwendungsbeispiel wie \newlength{\hcolw}und \setlength{\hcolw}{0.47\textwidth}wäre nützlich.
Trybik
20

Wenn Sie verwenden möchten \newcommand, können Sie \usepackage{xspace}den Befehl auch einschließen und definieren \newcommand{\newCommandName}{text to insert\xspace}. Dies kann es Ihnen ermöglichen, nur \newCommandNameanstatt zu verwenden \newCommandName{}.

Weitere Informationen finden Sie unter http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html

user1125069
quelle
1

Ich denke, Sie möchten wahrscheinlich eine Token-Liste für diesen Zweck verwenden: um die Token-Liste einzurichten \newtoks\packagename , um den Namen zuzuweisen: \packagename={New Name for the package} um den Namen in Ihre Ausgabe einzufügen : \the\packagename.

John Burt
quelle