<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Makroprozessor</id>
	<title>Makroprozessor - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Makroprozessor"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Makroprozessor&amp;action=history"/>
	<updated>2026-06-12T00:44:55Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Makroprozessor&amp;diff=61397&amp;oldid=prev</id>
		<title>imported&gt;APPERbot: Bot: Syntaxhighlight: Sprache html4strict nach html korrigiert, siehe H:SYH</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Makroprozessor&amp;diff=61397&amp;oldid=prev"/>
		<updated>2023-06-19T15:56:03Z</updated>

		<summary type="html">&lt;p&gt;Bot: Syntaxhighlight: Sprache html4strict nach html korrigiert, siehe &lt;a href=&quot;/index.php?title=H:SYH&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;H:SYH (Seite nicht vorhanden)&quot;&gt;H:SYH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Als &amp;#039;&amp;#039;&amp;#039;Makroprozessoren&amp;#039;&amp;#039;&amp;#039; werden [[Computerprogramm]]e bezeichnet, die Zeichenfolgen innerhalb eines Textes durch andere Zeichenfolgen ersetzen. Eine Zeichenfolge mit ihrem Ersatztext nennt man [[Makro]]. Makros sind normalerweise [[Parameter (Informatik)|parametrisierbar]].&lt;br /&gt;
Die meisten Makroprozessoren kennen einige Befehle: In der Regel dient zum Beispiel &amp;#039;&amp;#039;&amp;#039;define&amp;#039;&amp;#039;&amp;#039; zum Festlegen von Makros. Andere Befehle erlauben oft Zeichenkettenverarbeitung, bedingten Textersatz, Schreiben und Lesen von Hilfsdateien usw.&lt;br /&gt;
Mitunter können Befehle und Makros sehr ähnlich verarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Ein bekannter Makroprozessor ist z.&amp;amp;nbsp;B. Teil des Textsatzprogramms [[TeX]]. Auch der C-[[Präprozessor]] der Sprache [[C (Programmiersprache)|C]] ist ein Makroprozessor.&lt;br /&gt;
&lt;br /&gt;
== Der m4-Makroprozessor als Beispiel ==&lt;br /&gt;
&lt;br /&gt;
Das Betriebssystem [[Unix]] enthält standardmäßig den Makroprozessor &amp;#039;&amp;#039;[[m4 (Programmiersprache)|m4]]&amp;#039;&amp;#039;. Dieser erlaubt über den Makro &amp;#039;&amp;#039;&amp;#039;define&amp;#039;&amp;#039;&amp;#039; die Definition eigener Makros.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    define(`H&amp;#039;,`Hans&amp;#039;)define(`U&amp;#039;,`und&amp;#039;)define(`I&amp;#039;,`Inge&amp;#039;)dnl&lt;br /&gt;
    H U I, I U H. H liebt I.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ergibt&lt;br /&gt;
* &amp;lt;code&amp;gt;Hans und Inge, Inge und Hans. Hans liebt Inge.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Zeichen ` (auf einer deutschen Tastatur rechts neben dem Fragezeichen) und &amp;#039; (rechts neben dem Ä) sorgen dafür, dass Makros nicht ersetzt werden, wenn sie innerhalb eines Teils sind, der mit ` beginnt und mit &amp;#039; endet.&lt;br /&gt;
&lt;br /&gt;
Über viele weitere eingebaute Makros wie &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;eval&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;ifelse&amp;lt;/span&amp;gt; lassen sich Ausdrücke und Bedingungen implementieren. Wiederholungen und [[Schleife (Programmierung)|Schleifen]] können durch [[Rekursion]] erreicht werden.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|+  Vordefinierte Makros im Makroprozessor m4 (Auswahl)&lt;br /&gt;
|-&lt;br /&gt;
! Makro&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;define&amp;lt;/span&amp;gt;(`name&amp;#039;,def)&lt;br /&gt;
| Definition des neuen Makros &amp;#039;&amp;#039;name&amp;#039;&amp;#039;, Ersatz mit &amp;#039;&amp;#039;def&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;eval&amp;lt;/span&amp;gt;&lt;br /&gt;
| Auswertung eines arithmetischen Ausdrucks&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;incr&amp;lt;/span&amp;gt;&lt;br /&gt;
| Erhöhen des Arguments um eins&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;ifdef&amp;lt;/span&amp;gt;&lt;br /&gt;
| Bedingte Ausführung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;divert(-1)&amp;lt;/span&amp;gt;&lt;br /&gt;
| Unterdrückung der Ausgabe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;dnl&amp;lt;/span&amp;gt;&lt;br /&gt;
| Unterdrückung des Rests der Zeile (einschließlich Zeilentrenner)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;include&amp;lt;/span&amp;gt;(`Datei&amp;#039;)&lt;br /&gt;
| Text aus &amp;#039;&amp;#039;Datei&amp;#039;&amp;#039; einlesen und interpretieren.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;$1&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;font-family:monospace;&amp;quot;&amp;gt;$2&amp;lt;/span&amp;gt;, …&lt;br /&gt;
| Parameter, die innerhalb von &amp;#039;&amp;#039;def&amp;#039;&amp;#039; in einer Makrodefinition verwendet werden können und die dann durch den Text des aktuellen Parameters bei Aufruf ersetzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mit einem Makroprozessor lassen sich zum Beispiel automatische Zähler implementieren:&lt;br /&gt;
&lt;br /&gt;
 define(`Zaehler&amp;#039;,`define(`$1&amp;#039;,incr($1))Kapitel $1.&amp;#039;)dnl&lt;br /&gt;
 define(`kapitelnr&amp;#039;,0)dnl&lt;br /&gt;
 Zaehler(`kapitelnr&amp;#039;)&lt;br /&gt;
 Zaehler(`kapitelnr&amp;#039;)&lt;br /&gt;
 Zaehler(`kapitelnr&amp;#039;)&lt;br /&gt;
 Zaehler(`kapitelnr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
Wird dieses Beispiel mit m4 bearbeitet, so erhält man die folgende Ausgabe:&lt;br /&gt;
&lt;br /&gt;
 Kapitel 1.&lt;br /&gt;
 Kapitel 2.&lt;br /&gt;
 Kapitel 3.&lt;br /&gt;
 Kapitel 4.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich z.&amp;amp;nbsp;B. Kapitel- und Abschnittsnummern in einem Text automatisch hochzählen:&lt;br /&gt;
&lt;br /&gt;
 divert(-1)dnl&lt;br /&gt;
   define(`Zaehler&amp;#039;,`define(`$1&amp;#039;,incr($1))$1&amp;#039;)&lt;br /&gt;
   define(`kapitelnr&amp;#039;,0)&lt;br /&gt;
   define(`abschnittnr&amp;#039;,0)&lt;br /&gt;
   define(`Kapitel&amp;#039;,`&amp;amp;lt;h1&amp;amp;gt;Zaehler(`kapitelnr&amp;#039;). $1&amp;amp;lt;/h1&amp;amp;gt;define(`abschnittnr&amp;#039;,0)&amp;#039;)&lt;br /&gt;
   define(`Abschnitt&amp;#039;,`&amp;amp;lt;h2&amp;amp;gt;kapitelnr.Zaehler(`abschnittnr&amp;#039;) $1&amp;amp;lt;/h2&amp;amp;gt;&amp;#039;)&lt;br /&gt;
 divert(0)dnl&lt;br /&gt;
&lt;br /&gt;
 Kapitel(Einführung)&lt;br /&gt;
 Dieser Text handelt von …&lt;br /&gt;
 Abschnitt(Geschichte)&lt;br /&gt;
 Geschichtlich ist folgendes zu sagen …&lt;br /&gt;
 Abschnitt(Neuere Entwicklungen)&lt;br /&gt;
 Doch in neuerer Zeit ergeben sich …&lt;br /&gt;
 Kapitel(Definitionen)&lt;br /&gt;
 Abschnitt(Zahlenwerte)&lt;br /&gt;
 …&lt;br /&gt;
 Abschnitt(Konstanten)&lt;br /&gt;
 …&lt;br /&gt;
 Abschnitt(Variablen)&lt;br /&gt;
 …&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe von &amp;#039;&amp;#039;m4&amp;#039;&amp;#039; ist dann&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;h1&amp;gt;1. Einführung&amp;lt;/h1&amp;gt;&lt;br /&gt;
  Dieser Text handelt von …&lt;br /&gt;
  &amp;lt;h2&amp;gt;1.1 Geschichte&amp;lt;/h2&amp;gt;&lt;br /&gt;
  Geschichtlich ist folgendes zu sagen …&lt;br /&gt;
  &amp;lt;h2&amp;gt;1.2 Neuere Entwicklungen&amp;lt;/h2&amp;gt;&lt;br /&gt;
  Doch in neuerer Zeit ergeben sich …&lt;br /&gt;
  &amp;lt;h1&amp;gt;2. Definitionen&amp;lt;/h1&amp;gt;&lt;br /&gt;
  &amp;lt;h2&amp;gt;2.1 Zahlenwerte&amp;lt;/h2&amp;gt;&lt;br /&gt;
  … …&lt;br /&gt;
  &amp;lt;h2&amp;gt;2.2 Konstanten&amp;lt;/h2&amp;gt;&lt;br /&gt;
  … …&lt;br /&gt;
  &amp;lt;h2&amp;gt;2.3 Variablen&amp;lt;/h2&amp;gt;&lt;br /&gt;
  … …&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Der Makroprozessor als Präprozessor ==&lt;br /&gt;
&lt;br /&gt;
Ein Makroprozessor stellt eine Form von [[Präprozessor]] (&amp;#039;&amp;#039;Vor&amp;#039;&amp;#039;-Prozessor) dar. Er verändert einen Eingabetext &amp;#039;&amp;#039;bevor&amp;#039;&amp;#039; der Benutzer diesen dem eigentlichen Verarbeitungsprogramm übergibt.&lt;br /&gt;
&lt;br /&gt;
Unter [[Unix]] lassen sich viele Makroprozessoren in der Kommandozeile als eigene Prozesse aufrufen, die Weitergabe des verarbeiteten Texts geschieht über eine [[Pipe (Informatik)|Pipe]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &amp;amp;nbsp; &amp;#039;&amp;#039;&amp;#039;$ m4&amp;#039;&amp;#039;&amp;#039; diplomarbeit.txt | tbl | eqn | groff -mt -Tps | kprinter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier wird die Datei &amp;#039;&amp;#039;diplomarbeit.txt&amp;#039;&amp;#039; zunächst vom Makroprozessor &amp;#039;&amp;#039;m4&amp;#039;&amp;#039; bearbeitet, danach vom Tabellenprozessor &amp;#039;&amp;#039;tbl&amp;#039;&amp;#039; und vom Formelsatz-Prozessor &amp;#039;&amp;#039;eqn&amp;#039;&amp;#039; (beides Makroprozessoren), um dann vom Textsatz-(Makro-)Prozessor &amp;#039;&amp;#039;groff&amp;#039;&amp;#039; in die Sprache Postscript gewandelt zu werden. &amp;#039;&amp;#039;kprinter&amp;#039;&amp;#039; kann danach das Ergebnis auf einem Postscript-fähigen Drucker ausgeben.&lt;br /&gt;
&lt;br /&gt;
=== Der C-Präprozessor ===&lt;br /&gt;
&lt;br /&gt;
Die [[C (Programmiersprache)|Programmiersprache C]] enthält einen einfachen Makroprozessor, den &amp;#039;&amp;#039;C-Präprozessor&amp;#039;&amp;#039;. Dieser kann für die folgenden Aufgaben eingesetzt werden:&lt;br /&gt;
&lt;br /&gt;
* Definition von symbolischen Konstanten&lt;br /&gt;
* Bedingte Übersetzung&lt;br /&gt;
* Erweiterung der Sprache durch einfache Sprachkonstrukte&lt;br /&gt;
* Vereinfachung der Schreibarbeit&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|+ Befehle des C-Präprozessors (Auswahl)&lt;br /&gt;
|-&lt;br /&gt;
! Makro&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;#define&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;name Ersatztext&amp;#039;&amp;#039;&lt;br /&gt;
| Definition des neuen Makros &amp;#039;&amp;#039;name&amp;#039;&amp;#039;. Tritt &amp;#039;&amp;#039;name&amp;#039;&amp;#039; im Text auf, wird es durch den &amp;#039;&amp;#039;Ersatztext&amp;#039;&amp;#039; ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;#define&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;name(p1,p2) txt&amp;#039;&amp;#039;&lt;br /&gt;
| Definition des neuen Makros &amp;#039;&amp;#039;name&amp;#039;&amp;#039; mit den Parametern &amp;#039;&amp;#039;p1&amp;#039;&amp;#039; und &amp;#039;&amp;#039;p2&amp;#039;&amp;#039;. Innerhalb von &amp;#039;&amp;#039;txt&amp;#039;&amp;#039; werden die Zeichenfolgen &amp;#039;&amp;#039;p1&amp;#039;&amp;#039; und &amp;#039;&amp;#039;p2&amp;#039;&amp;#039; durch den jeweiligen Text der aktuellen Parameter ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;#ifdef&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;#else&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;#endif&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Bedingte Übersetzung. Die Zeilen zwischen den Makros werden nur übersetzt, wenn ein Makro &amp;#039;&amp;#039;name&amp;#039;&amp;#039; existiert oder nicht.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;__FILE__&amp;#039;&amp;#039;&amp;#039;&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;__LINE__&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Name und Zeilennummer der Datei, die den Programmtext enthält.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;__unix__&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Vordefiniert unter Unix-Betriebssystemen, undefiniert unter anderen Systemen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;#include&amp;#039;&amp;#039;&amp;#039; &amp;lt;datei&amp;gt;&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;#include&amp;#039;&amp;#039;&amp;#039; &amp;quot;datei&amp;quot;&lt;br /&gt;
| Datei einlesen und Text in die Ausgabe einfügen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Möglichkeiten des C-Präprozessors sind relativ eingeschränkt. Er gibt der Sprache jedoch eine zusätzliche Flexibilität, die von anderen Sprachen kaum erreicht wird. Allerdings führt das in komplexen Programmsystemen auch zu Schwierigkeiten mit der Wartung und Pflege einheitlicher Definitionen, weshalb nachfolgend entwickelte Programmiersprachen teilweise bewusst auf dieses Konzept verzichtet hatten.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Programmbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #define FIELDSIZE 100&lt;br /&gt;
&lt;br /&gt;
  int Feld[FIELDSIZE];&lt;br /&gt;
  main() {&lt;br /&gt;
     int i;&lt;br /&gt;
     Feld[0] = 0; Feld[1] = 1;&lt;br /&gt;
     for (i = 2; i &amp;lt; FIELDSIZE; ++i)&lt;br /&gt;
        Feld[i] = Feld[i-1] + Feld[i-2];&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
wird FIELDSIZE einfach durch 100 ersetzt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  int Feld[100];&lt;br /&gt;
  main() {&lt;br /&gt;
     int i;&lt;br /&gt;
     Feld[0] = 0; Feld[1] = 1;&lt;br /&gt;
     for (i = 2; i &amp;lt; 100; ++i)&lt;br /&gt;
        Feld[i] = Feld[i-1] + Feld[i-2];&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Erst dadurch entsteht ein Programmtext, den der eigentliche C-[[Compiler]] fehlerfrei übersetzen kann.&amp;lt;ref&amp;gt;Tatsächlich erfolgt seit Jahrzehnten die Verarbeitung aber nicht mehr in zwei aufeinanderfolgenden Schritten (sofern der Benutzer das Ergebnis des Preprocessing nicht ausdrücklich als Ausgabe zu sehen wünscht), sondern in einem Durchgang während der Kompilierung.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das folgende Programm ermittelt, ob es unter Unix kompiliert worden ist. Andernfalls wird auf eine Eingabe gewartet:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  main() {&lt;br /&gt;
     printf(&amp;quot;Das Programm läuft &amp;quot;);&lt;br /&gt;
  #ifdef __UNIX__&lt;br /&gt;
     printf(&amp;quot;unter Unix.\n&amp;quot;);&lt;br /&gt;
  #else&lt;br /&gt;
     printf(&amp;quot;unter einem unbekannten Betriebssystem.\n&amp;quot;);&lt;br /&gt;
     printf(&amp;quot;Bitte drücken Sie eine Taste!&amp;quot;);&lt;br /&gt;
     getchar();&lt;br /&gt;
  #endif&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Unix-Compiler würde hier den folgenden Text übersetzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  main() {&lt;br /&gt;
     printf(&amp;quot;Das Programm läuft &amp;quot;);&lt;br /&gt;
     printf(&amp;quot;unter Unix.\n&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Compiler eines unbekannten Betriebssystems würde dagegen das folgende Programm übersetzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  main() {&lt;br /&gt;
     printf(&amp;quot;Das Programm läuft &amp;quot;);&lt;br /&gt;
     printf(&amp;quot;unter einem unbekannten Betriebssystem.\n&amp;quot;);&lt;br /&gt;
     printf(&amp;quot;Bitte drücken Sie eine Taste!&amp;quot;);&lt;br /&gt;
     getchar();&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der C-Makroprozessor ist jedoch viel einfacher als der &amp;#039;&amp;#039;m4&amp;#039;&amp;#039;-Prozessor. Er erlaubt keine rekursiven Aufrufe, Schleifen oder Auswertung von Ausdrücken.&lt;br /&gt;
&lt;br /&gt;
=== TeX und LaTeX ===&lt;br /&gt;
&lt;br /&gt;
Der Makroprozessor des [[Textsatzprogramm]]s TeX kann für benutzerdefinierte Erweiterungen verwendet werden. Das Makropaket [[LaTeX]] von [[Leslie Lamport]] stellt eine verbreitete Erweiterung dar. Statt &amp;#039;&amp;#039;define&amp;#039;&amp;#039; werden neue Makros durch &amp;#039;&amp;#039;&amp;#039;newcommand&amp;#039;&amp;#039;&amp;#039; definiert.&lt;br /&gt;
&lt;br /&gt;
Einen Teil eines CD-Covers zeigt das folgende Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;#039;latex&amp;#039;&amp;gt;&lt;br /&gt;
 \documentclass[landscape,dvips]{article}&lt;br /&gt;
 \usepackage{cd-cover}&lt;br /&gt;
&lt;br /&gt;
 \newcommand{\lied}[4]{&lt;br /&gt;
 \small{\textsf{#1}} &amp;amp; \small{\textsf{#2}}&lt;br /&gt;
                     &amp;amp; \small{\textsf{#3}}&lt;br /&gt;
                     &amp;amp; \small{\textsf{#4}} \\}&lt;br /&gt;
 \begin{document}&lt;br /&gt;
 %[...]&lt;br /&gt;
 \begin{tabular}{l l l l}&lt;br /&gt;
 \lied{1} {Neneh Cherry}&lt;br /&gt;
          {Woman}&lt;br /&gt;
          {04:10}&lt;br /&gt;
 \lied{2} {Luz Casal}&lt;br /&gt;
          {Piensa en mi}&lt;br /&gt;
          {04:27}&lt;br /&gt;
 %[...]&lt;br /&gt;
 \lied{14}{Axelle Red}&lt;br /&gt;
          {Rester femme}&lt;br /&gt;
          {05:01}&lt;br /&gt;
 \end{tabular}&lt;br /&gt;
&lt;br /&gt;
 \end{document}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MediaWiki ===&lt;br /&gt;
&lt;br /&gt;
Die [[Wiki]]-Engine [[MediaWiki]] enthält einen Makroprozessor. Hierzu werden Vorlagenseiten (&amp;#039;&amp;#039;engl.&amp;#039;&amp;#039; template) erstellt, die dann inklusive Parametern in eine Seite eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Prozessor (Software)]]&lt;br /&gt;
&lt;br /&gt;
== Anmerkungen ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierwerkzeug]]&lt;/div&gt;</summary>
		<author><name>imported&gt;APPERbot</name></author>
	</entry>
</feed>