2009-07-31 22 views
255

Wie kann ich in LaTeX eine String-Variable definieren, deren Inhalt anstelle der Variablen in der kompilierten PDF verwendet wird?Gibt es eine Möglichkeit, eine Variable in LaTeX zu definieren?

Lassen Sie uns sagen, ich schreibe ein Tech-Dokument auf einer Software und ich möchte den Paketnamen in der Präambel oder irgendwo definieren, so dass, wenn sein Name ändert, ich es an vielen Orten aber nicht ersetzen muss nur an einem Ort.

+2

Für große Inhalte ist es wichtig, \ savebox (https://en.wikibooks.org/wiki/LaTeX/Boxes#savebox) zu erwähnen. –

Antwort

263

folgendes hinzufügen Sie Präambel:

\newcommand{\newCommandName}{text to insert} 

Dann einfach \newCommandName{} im Text

Für weitere Informationen über \newcommand verwenden Sie können, siehe z.B. wikibooks

+10

Sie können auch nur '' \ newCommandName'' verwenden. – dialex

+16

@DiAlex Seien Sie vorsichtig, wenn Sie die geschweiften Klammern weglassen, da dies den Leerraum nach dem eingefügten Text stört. Siehe [diese Frage] (http://tex.stackexchange.com/q/31091). – jtpereyda

+0

Ich kann nicht mit nicht-ASCII-Zeichen richtig funktionieren. Irgendwelche Ideen? – lindhe

24

Für Variablen beschreiben, Entfernungen, würden Sie \newlength verwenden (und manipulieren, um die Werte mit \setlength, \addlength, \settoheight, \settolength und \settodepth).

Ähnlich haben Sie Zugriff auf \newcounter für Dinge wie Abschnitt und Abbildung Zahlen, die im gesamten Dokument erhöht werden sollte. Ich habe dieses in der Vergangenheit benutzt, um Codebeispiele zur Verfügung zu stellen, die separat von anderen Zahlen numeriert wurden ...

Auch notieren Sie \makebox, die Ihnen erlaubt, ein Stück von ausgelegtes Dokument für die spätere Wiederverwendung zu speichern (und zur Verwendung mit \settolength ...).

+12

Einfache Verwendungsbeispiele wie '\ newlength {\ hcolw}' und '\ setlength {\ hcolw} {0.47 \ textwidth}' wären nützlich. – trybik

136

Verwenden \def Befehl:

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

Beachten Sie, dass \def Überschreibungen Makros ohne Warnungen bereits existierenden und daher verschiedene subtile Fehler verursachen können. Um dies zu umgehen, verwenden Sie entweder Namespaced-Variablen wie my_var oder greifen Sie stattdessen auf \newcommand, \renewcommand Befehle zurück.

+5

Die Verwendung von '\ def 'kann problematisch sein, da nicht nach bereits vorhandenen Makros gesucht wird. Siehe den [zweiten Kreis der LaTeX-Hölle] (http://dabacon.org/pontiff/?p = 6101) - als solche ist es vorzuziehen, '\ newcommand' zu verwenden –

+2

Dank @RyanAtallah hinzugefügt Hinweis darüber. Bedeutet die Bedeutung von "variabel" jedoch nicht, dass sie sich ändern kann? :) – plaes

+4

@plaes Du hast Recht, aber das bedeutet immer noch nicht, dass du '\ def' verwenden willst. Stattdessen denke ich, dass es am besten ist, zuerst alle Variablen zu initialisieren, die mit '\ newcommand' verwendet werden sollen (auch wenn' 'nur @' leer ist), und dann den Befehl zum Ändern der Variablen mit '\ renewcommand zu erstellen '. Dadurch wissen Sie, ob Ihre Variable bereits beendet wurde, weil '\ newcommand' einen Fehler (oder zumindest eine Warnung) auslöst. – Nick2253

1

Ich denke, Sie wahrscheinlich eine Token-Liste für diesen Zweck verwendet werden sollen: die Token-Liste einzurichten \newtoks\packagename den Namen zuweisen: \packagename={New Name for the package} den Namen einfügen Ihre Ausgabe: \the\packagename.

Verwandte Themen