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?](http://www.texwelt.de/wissen/1985). Natürlich können wir uns auch Befehle definieren, welche mehr als nur ein Argument haben: \newcommand{\deadpoet}[3]{#1 (#2 -- #3)} %\deadpoet{}{}{} 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?](http://texwelt.de/blog/wie-definiere-ich-eigene-kommandos/) von Marco Daniel. Darin werden auch Vorteile und Möglichkeiten des Paketes [xparse](http://www.ctan.org/pkg/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|TeXwelt.de]] geschrieben: [Wie kann ich oft wiederkehrende Strukturen automatisieren?](http://texwelt.de/wissen/fragen/2627/wie-kann-ich-oft-wiederkehrende-strukturen-automatisieren)