465 Stimmen

Gibt es eine Möglichkeit, in LaTeX eine Variable zu definieren?

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

Angenommen, ich schreibe eine technische Dokumentation über eine Software und möchte den Paketnamen in der Präambel oder an anderer Stelle definieren, so dass ich ihn bei einer Änderung des Namens nicht an vielen Stellen, sondern nur an einer Stelle ersetzen muss.

2 Stimmen

Zu den umfangreichen Inhalten ist zu sagen, dass \savebox ( de.wikibooks.org/wiki/LaTeX/Boxes#savebox ).

519voto

second Punkte 26650

Die Präambel wie folgt ergänzen:

\newcommand{\newCommandName}{text to insert}

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

Für weitere Informationen über \newcommand siehe z.B. wikibooks

Exemple :

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

Ausgabe:

30

53 Stimmen

@DiAlex seien Sie vorsichtig, wenn Sie die geschweiften Klammern weglassen, da dies den Leerraum nach dem eingefügten Text beeinträchtigt. Siehe diese Frage .

0 Stimmen

Ich bekomme es nicht hin, dass es mit Nicht-ASCI-Zeichen richtig funktioniert. Irgendwelche Ideen?

13 Stimmen

Das ist keine gute Antwort. Der Befehl wird ausgewertet, wenn er aufgerufen wird, nicht wenn er definiert wird. Es handelt sich also nicht um eine Variable im Sinne einer traditionellen Sprache. Wenn der Befehl nie aufgerufen wird, wird der "Körper" des Befehls nie ausgewertet, und wenn der Befehl zweimal aufgerufen wird, wird der "Körper" zweimal ausgewertet.

202voto

plaes Punkte 30086

Utilisez \def Befehl:

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

Beachten Sie, dass \def überschreibt bereits vorhandene Makros ohne Warnungen und kann daher verschiedene subtile Fehler verursachen. Um dies zu vermeiden, verwenden Sie entweder Variablen mit Namensraum wie my_var oder zurückgehen auf \newcommand , \renewcommand Befehle stattdessen.

19 Stimmen

Verwendung von \def kann problematisch sein, da es nicht auf bereits vorhandene Makros prüft. Siehe die zweiter Kreis der LaTeX-Hölle - als solche ist es vorzuziehen, die \newcommand

2 Stimmen

Danke, @RyanAtallah, dass Sie das erwähnt haben. Bedeutet aber nicht die Bedeutung von variable bedeutet, dass es sich ändern kann? :)

7 Stimmen

@plaes Sie haben recht, aber das bedeutet noch lange nicht, dass Sie die \def . Stattdessen halte ich es für die beste Praxis, alle Variablen, die Sie verwenden wollen, zunächst mit \newcommand (auch wenn es nur mit \@empty ), und erstellen Sie dann Ihren Befehl zur Änderung der Variablen mit \renewcommand . So können Sie feststellen, ob Ihre Variable bereits beendet ist, denn \newcommand führt zu einem Fehler (oder zumindest zu einer Warnung).

45voto

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

In ähnlicher Weise haben Sie Zugang zu \newcounter für Dinge wie Abschnitts- und Abbildungsnummern, die im gesamten Dokument erhöht werden sollten. Ich habe dies in der Vergangenheit verwendet, um Codebeispiele bereitzustellen, die getrennt von anderen Abbildungen nummeriert wurden...

Ebenfalls erwähnenswert ist \makebox die es Ihnen ermöglicht, einen Teil eines gestalteten Dokuments zur späteren Wiederverwendung zu speichern (und zur Verwendung mit \settolength ...).

39 Stimmen

Einfaches Anwendungsbeispiel wie \newlength{\hcolw} y \setlength{\hcolw}{0.47\textwidth} nützlich sein würde.

1 Stimmen

Ich schließe mich dem vorherigen Kommentar an; es ist wirklich schwer, diese Antwort ohne zusätzliche Suche zu verwenden. Beachten Sie auch, dass dieser Befehl nach \begin {Dokument}.

28voto

user1125069 Punkte 389

Wenn Sie Folgendes verwenden möchten \newcommand können Sie auch Folgendes einschließen \usepackage{xspace} und definieren den Befehl durch \newcommand{\newCommandName}{text to insert\xspace} . Dies kann Ihnen erlauben, einfach die \newCommandName statt \newCommandName{} .

Für weitere Einzelheiten, http://www.math.tamu.edu/~harold.boas/kurse/math696/warum-makros.html

0 Stimmen

1voto

John Burt Punkte 136

Ich denke, dass Sie zu diesem Zweck wahrscheinlich eine Token-Liste verwenden sollten: zum Einrichten der Token-Liste \newtoks\packagename um den Namen zu vergeben: \packagename={New Name for the package} um den Namen in Ihre Ausgabe zu übernehmen: \the\packagename .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X