Ich möchte gerne einen eigenen Befehl erstellen, der in Abhängigkeit eines optionalen Parameters etwas ausgibt. Ich denke, mit dem Minimalbeispiel wird es deutlicher:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
%\newcommand\MeinBefehl[1]{if "Y" then \textcolor{red}{123} else \textcolor{green}{123}}

\begin{document}
% \MeinBefehl[Y] ==> \textcolor{red}{123}
% \MeinBefehl    ==> \textcolor{green}{123}
\end{document}

gefragt 05 Dez, 11:38

dzaic's gravatar image

dzaic
4112136
Akzeptiert: 84%

bearbeitet 05 Dez, 12:30

Ijon%20Tichy's gravatar image

Ijon Tichy
5.9k1919

2

Da Du eine KOMA-Script-Klasse verwendest: Schau mal in der Anleitung nach \ifstr. Alternative: etoolbox.

(05 Dez, 11:42) saputello
1
(05 Dez, 12:34) saputello

Im gezeigten Beispiel könnte man eigentlich ganz einfach ein normales optionales Argument verwenden:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\newcommand*{\MeinBefehl}[1][green]{\textcolor{#1}{123}}

\begin{document}
\MeinBefehl[red]

\MeinBefehl
\end{document}

Will man unbedingt Y als optionales Argument verwenden, könnte man sich einfach einen Farb-Alias mit xcolor definieren:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\newcommand*{\MeinBefehl}[1][green]{\textcolor{#1}{123}}
\colorlet{Y}{red}
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

Natürlich kann man auch mit Hilfsmakros arbeiten:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\makeatletter
\newcommand\MeinBefehl@Y{\textcolor{red}{123}}
\newcommand\MeinBefehl@{\textcolor{green}{456}}
\newcommand*{\MeinBefehl}[1][]{\@nameuse{MeinBefehl@#1}}
\makeatother
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

Da ich für die Hilfemakros interne Namen mit @ verwende, muss natürlich makeatletter und makeatother zum Einsatz kommen. Um aus Präfix und Argument wiederum einen Befehl zusammenzusetzen, verwende ich \@nameuse, das für Paketautoren in source2e.pdf dokumentiert ist.

Und wenn man unbedingt ein If-Konstrukt haben will, so bietet scrartcl (bzw. das davon verwendete scrbase) ein solches bereits an:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\newcommand*{\MeinBefehl}[1][]{%
  \ifstr{#1}{Y}{\textcolor{red}{123}}{\textcolor{green}{456}}%
}
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

Es gibt diverse weitere Pakete, die conditionals anbieten, beispielsweise etoolbox:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{etoolbox}
\newcommand*{\MeinBefehl}[1][]{%
  \ifstrequal{#1}{Y}{\textcolor{red}{123}}{\textcolor{green}{456}}%
}
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

aber auch l3str (sollte via expl3 geladen werden):

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand*{\MeinBefehl}[1][]{%
  \str_if_eq:nnTF { #1 } { Y }
                  { \textcolor{red}{123} }
                  { \textcolor{green}{456} }
}
\ExplSyntaxOff                
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

wobei man dann natürlich gleich mal überlegen sollte, ob man die Definition nicht direkt mit xparse erledigt:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\MeinBefehl} { o } {%
  \str_if_eq:nnTF { #1 } { Y }
                  { \textcolor{red}{123} }
                  { \textcolor{green}{456} }
}
\ExplSyntaxOff                
\begin{document}
\MeinBefehl[Y]

\MeinBefehl
\end{document}

Durch die jeweils angegebenen Links findet man auch die relevanten Anleitungen, in denen man die verwendeten Anweisungen unbedingt nachlesen sollte.

Permanenter link

beantwortet 05 Dez, 12:10

Ijon%20Tichy's gravatar image

Ijon Tichy
5.9k1919

bearbeitet 05 Dez, 12:28

WOW - da habe ich etwas zu studieren. Herzlichen Dank!

(07 Dez, 07:36) dzaic
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×13
×9
×3
×1

Frage gestellt: 05 Dez, 11:38

Frage wurde angeschaut: 113 Mal

Zuletzt aktualisiert: 07 Dez, 07:36