In meinem Dokument habe ich sehr oft gleiche Strukturen, die ich immer und immer wieder eingeben muss.
Kann ich mir das automatisieren?

gefragt 10 Dez '13, 08:21

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%


LaTeX selbst ist eine Makrosprache, das bedeutet sie bietet von Haus aus die Möglichkeiten für Automatismen. Diese Makros werden im Deutschen oft als Befehle bezeichnet, im Englischen als commands. Die ursprüngliche Bezeichnung ist übrigens control sequence.

LaTeX als solches stellt den Befehl \newcommand zur Verfügung. Betrachten wir als Beispiel die Definition eins Befehls \fragen:

\newcommand{\fragen}{Wieso? Weshalb? Warum?}
%Neuer Befehl, der heißt fragen und ersetzt sich selbst
%mit dem, was in Klammern steht

Im Text können wir nun den Befehl \fragen benutzen. Es ist übrigens hilfreich die Beispiele mit dem eigenen System zu reproduzieren.

\documentclass{article}
\newcommand{\fragen}{Wieso? Weshalb? Warum?}
\begin{document}
Es blieben einige Fragen: \fragen
\end{document}

LaTeX ersetzt \fragen mit all dem, was wir in Klammern geschrieben haben.
Solche einfachen Befehle kennen wir aus unseren Dokumenten (\TeX, \tableofcontents oder \listoffigures).

Er selbst bezeichnete sich als \emph{\TeX niker aus
Leidenschaft}, den er liebte \TeX sehr.

Was passiert an dieser Stelle? TeXniker wird zusammen geschrieben, leider aber auch TeXsehr. Warum aber verhält sich das Computerprogramm so? Wir haben uns das Wort TeXniker aus \TeX und niker gebildet. Würden wir beide Teile direkt hier zusammenfügen, würde LaTeX bemerken, dass der Befehl \TeXniker niemals definiert wurde (undefined control sequence). Das Leerzeichen dient uns also dazu beide Teile voneinander zu trennen, geschweifte Klammern sind dazu aber auch möglich.

Er selbst bezeichnete sich als \emph{\TeX niker aus
Leidenschaft}, denn er liebte \TeX{} sehr.

Jeder kennt aber auch Befehle, welche ein Argument benötigen, also irgendetwas, was LaTeX verarbeiten muss. Denken wir beispielsweise an Überschriften in unseren Dokumenten.

\section{Ich bin ein neuer Abschnitt}

Alles, was hier in Klammern steht, wird von LaTeX zu einer Überschrift verarbeitet, was im Allgemeinen bedeutet den Text größer und fetter zu darzustellen.

Auch solche Befehle können wir uns selbst definieren. Beispielsweise wollen wir in unserem Dokument alle Namen von Programmiersprachen in einer Schreibmaschienschrift setzen.

\newcommand{\programmiersprache}[1]{\texttt{#1}}

Im Text können wir das nun Nutzen:

Er programmierte in programmiersprache{python}, obwohl er Angst vor Schlangen hatte.

Genau wie bei einer Überschrift verarbeitet LaTeX unser Argument (der Teil in geschweiften Klammern). LaTeX muss allerdings vorher wissen, wie viele Argumente (Klammerpaare) vorhanden sein werden ([1]). In diesem falle haben wir nur ein Klammerpaar, auf das wir uns mit #1 beziehen. Das selbst wiederum ist das Argument für \texttt, unsere Schreibmaschinenschrift. @saputello liefert ein paar hilfreiche Tipps zu semantischem Markup in Wie kann ich bestimmte Begriffe hervorheben?.

Natürlich können wir uns auch Befehle definieren, welche mehr als nur ein Argument haben:

\newcommand{\deadpoet}[3]{#1 (#2 -- #3)}
%\deadpoet{<name>}{<born>}{<died>}

Im Dokument können wir uns nun auf den toten Dichter beziehen:

\deadpoet{Goethe}{1759}{1832} trug wesentlich zur Entwicklung
der deutschen Sprache bei.

Ziel eines Dokumentes ist, vom Inhalt abgesehen, ein sauberes und einheitliches Erscheinungsbild. Semantisches Markup bietet uns die besten Chancen dieses Erscheinungsbild zu erreichen.

\renewcommand{\deadpoet}[3]{#1 (geboren #2, gestorben #3)}
\deadpoet{Goethe}{1759}{1832} trug wesentlich zur Entwicklung
der deutschen Sprache bei.

Hier haben wir unseren Befehl \deadpoet nochmal definiert. Das Ergebnis in der pdf sieht für alle nachfolgenden Ereignisse eines toten Dichters gleich aus.

Was bedeutet das jetzt für unser Dokument?
Ich muss mir nur einmal festlegen, wie etwas aussehen soll, LaTeX kümmert sich dann darum, dass es nachfolgend einheitlich aussieht.

Wo sollte ich meine Befehle definieren, wenn ich möchte, dass alle Ereignisse im Dokument einheitlich sind?
Im Allgemeinen kann man sagen, dass die Definition eigener Befehle oder Makros immer in den Vorspann, also die Präambel, gehört.

Es gibt natürlich noch mehr zu entdecken, man denke nur an das optionale Argument von \section, welches seinen Inhalt in das Inhaltsverzeichnis schreibt.
Einen ausführlicheren Überblick gibt Wie definiere ich eigene Kommandos? von Marco Daniel. Darin werden auch Vorteile und Möglichkeiten des Paketes xparse vorgestellt.

Unser Minimalbeispiel ist mittlerweile Angewachsen auf:

\documentclass{article}
\newcommand{\fragen}{Wieso? Weshalb? Warum?}
\newcommand{\programmiersprache}[1]{\texttt{#1}}
\newcommand{\deadpoet}[3]{#1 (#2 -- #3)}
\newcommand{\fragenB}[1]{Wieso #1\par Weshalb #1?\par Warum #1?}
\begin{document}
Es blieben einige Fragen: \fragen

Er selbst bezeichnete sich als \emph{\TeX niker aus
Leidenschaft}, den er liebte \TeX sehr.

Er selbst bezeichnete sich als \emph{\TeX niker aus
Leidenschaft}, den er liebte \TeX{} sehr.

Er programmierte in \programmiersprache{python}, obwohl er
Angst vor Schlangen hatte.

\deadpoet{Goethe}{1759}{1832} trug wesentlich zur Entwicklung
der deutschen Sprache bei.

\renewcommand{\deadpoet}[3]{#1 (geborenn #2, gestorben #3)}
\deadpoet{Goethe}{1759}{1832} trug wesentlich zur Entwicklung
der deutschen Sprache bei.

\fragenB{sah er traurig auf die verregnete Gasse}
\end{document}
Permanenter link

beantwortet 10 Dez '13, 08:37

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%

Zu Hause offline geschrieben, es hat doch mehr Gemeinsamkeiten mit dem Blogeintrag von @Marco. Änderungsvorschläge?

(10 Dez '13, 08:38) Johannes
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×37
×9

gestellte Frage: 10 Dez '13, 08:21

Frage wurde gesehen: 43,830 Mal

zuletzt geändert: 10 Dez '13, 08:38