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}