TeXwelt wurde neu installiert. Es funktionieren noch nicht alle Features und auch an den deutschsprachigen Formulierungen wird verbessert. Danke für eure Geduld.

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
57123750
Akzeptiert-Rate: 46%

bearbeitet 05 Dez '17, 18:30

Ijon%20Tichy's gravatar image

Ijon Tichy
9.1k31026

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

Ijon%20Tichy's gravatar image

Ijon Tichy
9.1k31026
Akzeptiert-Rate: 54%

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
×12
×3
×1

gestellte Frage: 05 Dez '17, 17:38

Frage wurde gesehen: 1,965 Mal

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