Wie kann ich mir mit Makros das Schreiben erleichtern?

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}

Von Johannes auf TeXwelt.de geschrieben: Wie kann ich oft wiederkehrende Strukturen automatisieren?

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Creative Commons Lizenzvertrag Diese Seite bearbeiten Ältere Versionen Übersicht Links hierher RSS feed Impressum