%META:TOPICINFO{author="HerbertVoss" date="1381229182" format="1.1" version="1.4"}% %META:TOPICPARENT{name="LaTeXGrundlegendes"}%
====== Optionales Argument ======
* [[#10|Wie kann ich unter LaTeX eine OptionalesArgument Anweisung mit optionalem Parameter definieren?]]
* [[#11|Wie erkenne ich bei einer OptionalesArgument Anweisung mit optionalem Parameter, ob dieser vom Autor angegeben wurde?]]
* [[#13|Wie kann ich in LaTeX eine Anweisung mit mehr als einem optionalen Parameter definieren?]]
* [[#15|Wie kann ich innerhalb des optionalen Arguments einer Anweisung zusätzliche eckige Klammern, beispielsweise die eines optionalen Arguments einer anderen Anweisung, verwenden?]]
==== Wie kann ich unter LaTeX eine Anweisung mit optionalem Parameter definieren? ====
In LaTeX kann man mit den Anweisungen ''%%\newcommand%%'', ''%%\renewcommand%%'', ''%%\newenvironment%%'' und ''%%\renewenvironment%%'' eigene Anweisungen und Umgebungen definieren, die einen optionalen Parameter als erstes Argument besitzen. Nähere Informationen finden sich in der Dokumentation für Autoren ,,usrguide.tex``. | **usrguide.tex:** | [[http://mirror.ctan.org/macros/latex/doc/|macros/latex/doc/]] |
==== Wie erkenne ich bei einer Anweisung mit optionalem Parameter, ob dieser vom Autor angegeben wurde? ====
Mit Hilfe des im Paket ''%%ifthen%%'' definierten Vergleichs =\equal%%'' kann man das optionale Argument mit dem voreingestellten Wert vergleichen. Das folgende Beispiel geht davon aus, dass der voreingestellte Wert leer sein soll:
\usepackage{ifthen}
\newcommand{\meineanweisung}[2][]{% #1 = optional, #2 = notwendig
\ifthenelse{\equal{#1}{}}{%
% Autor hat kein oder leeres optionales Argument angegeben
}{%
% Autor hat optionales Argument angegeben
}}
| **ifthen:** | [[http://mirror.ctan.org/macros/latex/base/|macros/latex/base/]] |
==== Wie kann ich in LaTeX eine Anweisung mit mehr als einem optionalen Parameter definieren? ====
Mit ''%%\newcommand%%'' kann man nur ein Makro mit einem einzigen optionalen Parameter definieren. Will man ein Makro mit mehr als einem optionalen Parameter definieren, so muss man hierzu mehrere Makros mit jeweils einem optionalen Parameter definieren, die den Wert des Parameters zwischenspeichern und das nächste Makro aufrufen.
Hier ist ein Beispiel für ein Makro \cubic[a][b][c]{d} mit drei optionalen Argumenten:
\newcommand{\erstesargument}{}
\newcommand{\zweitesargument}{}
\newcommand{\cubic}[1][a]{% erstes optionales Argument
\begingroup % Definitionen von \...argument lokal halten
\renewcommand{\erstesargument}{#1}% opt. Argument speichern
\cubicZwei}
\newcommand{\cubicZwei}[1][b]{% zweites optionales Argument
\renewcommand{\zweitesargument}{#1}% opt. Argument speichern
\cubicDrei}
\newcommand{\cubicDrei}[2][c]{% drittes opt. + notwendiges Argument
\({\erstesargument}x^3+{\zweitesargument}x^2+#1x+#2\)%
\endgroup}
Eine weitere Möglichkeit bietet das Paket ,twoopt`:
\newcommandtwoopt{\Cmd}[3][DefaultA][DefaultB]{Args: #1, #2, #3}
In Anlehnung an die Standard-LaTeX-Definitionen existieren auch die Anweisungen ''%%\renewcommandtwoopt%%'' und ''%%\providecommandtwoopt%%''.
Zusätzlich hat Jonathan Sauer das Paket "optparams" geschrieben, mit dessen Hilfe mehrfache [[OptionalesArgument|optionale Argumente]] möglich sind.
| **twoopt:** | [[http://mirror.ctan.org/macros/latex/contrib/oberdiek/|macros/latex/contrib/oberdiek/]] | | **optparams:** | http://mirror.ctan.org/macros/latex/contrib/sauerj/ |
==== Wie kann ich innerhalb des optionalen Arguments einer Anweisung zusätzliche eckige Klammern, beispielsweise die eines optionalen Arguments einer anderen Anweisung, verwenden? ====
Im Unterschied zu den geschwungenen Klammern ''%%{...}%%'', die immer paarweise und korrekt geschachtelt werden müssen, sucht LaTeX bei eckigen Klammern einfach nach der nächsten schließenden eckigen Klammer ''%%]%%'', ohne auf korrekte Schachtelung dieser Klammern zu achten. Um dies zu verhindern, muss man einfach innerhalb der eckigen Klammern ''%%[...]%%'' ein geschweiftes Klammerpaar einfügen, wie dies hier als Beispiel für ''%%\twocolumn%%'' gezeigt wird:
\twocolumn[{ ... \sqrt[3]{x^2} ... }]
-- Main.HerbertVoss - 04 Mar 2009