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 '17, 17:38

dzaic's gravatar image

dzaic
631104853
Akzeptiert-Rate: 42%

bearbeitet 05 Dez '17, 18:30

gast3's gravatar image

gast3
(ausgesetzt)

2

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

(05 Dez '17, 17:42) saputello
1
(05 Dez '17, 18: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 '17, 18:10

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 05 Dez '17, 18:28

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

(07 Dez '17, 13:36) dzaic
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×14
×13
×3
×1

gestellte Frage: 05 Dez '17, 17:38

Frage wurde gesehen: 4,565 Mal

zuletzt geändert: 07 Dez '17, 13:36