PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : So Art "Konstanten" in LaTeX definieren und verwenden



ricci007
19-07-2007, 13:20
Hallo,

ich suche eine Mglk., um in LaTeX Informationen zentral zu definieren und dann im Text als Konstante zu verwenden. Also z. B. ein festes Datum in eine Konstante \meinDatum abspeichern und im Text (Document-Bereich) mehrfach verwenden.

Geht das und wenn "ja" wie?

Danke!

ricci007

hamilton
19-07-2007, 13:34
\newcommand{\meindatum}{15.03.2005}

Gnihilo
19-07-2007, 13:36
So was hier?


\documentclass{scrreprt}

\newcommand{\meinDatum}{\emph{19.07.2007}}

\begin{document}

\meinDatum

\end{document}


Gruß Jonas.

edit: mal wieder zu langsam :(

ricci007
20-07-2007, 10:49
Jup, danke Jungs.

Zoomy
21-07-2007, 10:56
Hallo!
Da muss ich doch nochmal eine Verständnisfrage nachschieben.
Man könnte es ja reintheoretisch auch mit \def\meindatum{19.07.2007}
realisieren.
Nun hab ich irgendwo gelesen das man das aber nicht machen sollte, sondern genau so wie ihr oben.

Kann mir den einer sagen wo genau der Unterschied ist? Ist das ein Problem bei doppelten wie z.B. \def\tableofcontents{Inhaltsverzeichnis}...

Schöne Grüße

Gnihilo
21-07-2007, 11:04
Ist das ein Problem bei doppelten wie z.B. \def\tableofcontents{Inhaltsverzeichnis}...

Genau so ist es, Zitat aus l2tabu, Kapitel 1.7:


Makros sollte man immer mittels \newcommand{\<name>}{...} definieren und nicht mit \def\<name>{...}.
Das Hauptproblem von \def ist, dass keine Überprüfung auf die Existenz eines Makros durchgeführt wird. Es wird deshalb ggf. ohne Fehlermeldung/Warnung überschrieben.
Bereits existierende Makros können mit \renewcommand{\<name>}{...} umdefiniert werden.
Wer genau weiß, warum er \def benötigt, weiß auch um dessen Nach- bzw. Vorteile und kann diesen Unterpunkt getrost ignorieren.


Denke aber mal, dass Du bei der Definition von \meinDatum mit \def keine Probleme bekommen solltest...

Gruß Jonas.

Zoomy
21-07-2007, 11:37
Ja genau das wars, was ich auch gelesen hatte ;)
Und dann lag ich ja auch richtig.
Danke für die Antwort, aber kannst mir jetzt auch die beschriebenen Vor- und Nachteile von \def beschreiben, den diese Fallen mir nicht ein.

Gnihilo
23-07-2007, 17:25
Danke für die Antwort, aber kannst mir jetzt auch die beschriebenen Vor- und Nachteile von \def beschreiben, den diese Fallen mir nicht ein.

Muss gestehen, dass ich bisher immer der Meinung war, dass \def neben den oben genannten Eigenschaften einfach nur ein TeX-Befehl oder ein veraltetes Überbleibsel aus LaTeX 2.09-Zeiten ist und deshalb nicht mehr verwendet werden sollte.

Hab jetzt mal ein wenig die verschiedenen Foren durchsucht und auch nur diesen Thread (http://www.mrunix.de/forums/showthread.php?t=50606&highlight=%5Cdef+%5Cnewcommand) gefunden, der genau Deine Frage beantwortet. Da immerhin H. Voss die Antwort gepostet hat, scheint tatsächlich der einzige Unterschied in der Überprüfung auf bereits vorhandene Befehle zu liegen.

Gruß Jonas.

sommerfee
23-07-2007, 18:00
Muss gestehen, dass ich bisher immer der Meinung war, dass \def neben den oben genannten Eigenschaften einfach nur ein TeX-Befehl oder ein veraltetes Überbleibsel aus LaTeX 2.09-Zeiten ist und deshalb nicht mehr verwendet werden sollte.

Stimmt ja auch. \def ist eine TeX-Primitive und TeX-Befehle in Dokumenten zu verwenden, wenn es auch ein passendes LaTeX-Pendant gibt, ist immer risikoreich, weil es TeX-Befehle gibt, die LaTeX ganz schön ins Schleudern bringen können bzw. unerwünschte Nebeneffekte haben können.

Mit \def kann es z.B. passieren, daß man einen internen Befehl von LaTeX oder eines Paketes versehentlich umdefiniert. (Auch wenn diese Gefahr dadurch stark verringert ist, daß die meisten internen Befehle ein @ im Makronamen haben.) Mit \newcommand ist man auf der sicheren Seite und deswegen empfiehlt ja das LaTeX-Team sogar für LaTeX-Pakete (also nicht nur für Dokumente) nach Möglichkeit immer \newcommand bzw. \renewcommand statt \def zu benutzen.



scheint tatsächlich der einzige Unterschied in der Überprüfung auf bereits vorhandene Befehle zu liegen.

Das ist im wesentlichen so, wovon man sich leicht vergewissern kann, wenn man in die Quellen des LateX-Kernel schaut. (\newcommand macht allerdings intern ein \long\def, \newcommand* macht intern ein \def.)

Liebe Grüße,
Axel

Gnihilo
23-07-2007, 18:10
Das ist im wesentlichen so, wovon man sich leicht vergewissern kann, wenn man in die Quellen des LateX-Kernel schaut.

Hmm... hab ich noch nie gemacht, da ich auch erst seit einem halben Jahr mit LaTeX arbeite, würde mich aber sehr interessieren, mal ein wenig hinter die Kulissen zu schauen! Wie oder wo kann ich denn den Kernel einsehen? Ist wahrscheinlich ne dumme Frage, aber habe mich bisher immer erfolgreich um alles, was auch nur im weitesten Sinne mit Programmieren zu tun hatte, gedrückt und deshalb keine Ahnung... :rolleyes:

Gruß, Jonas.