Abfrage von Argumenten und IfThen...

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


faultier
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 53
Registriert: Mi 30. Sep 2015, 18:23

Abfrage von Argumenten und IfThen...

Beitrag von faultier »

Guten Morgen,

ich hänge an einem Problem fest, wo ich nicht recht voran komme. Für die Weiterarbeiten eines Namens habe ich folgendes Kommando definiert:
\newcommand*{\Name}[2]{\textsc{#1 #2\index[Person]{\textsc{#2}, #1}}}
Aufgerufen wird es mit:
\Name{Vorname}{Nachname}
Wenn ich den Text setze, wird der Name in Kapitälchen gesetzt, außerdem in der Reihenfolge "Name, Vorname" im "Personenregister" gespeichert, wobei der Nachname dort ebenfalls in Kapitälchen ausgegeben wird.

Soweit funktioniert es. Gerne hätte ich eine Abfrage, ob eines der beiden Felder leer ist, um in diesem Fall kein Komma auszugeben. Momentan führt die Angabe von
\Name{}{Mustermann}
im Personenregister zu "Mustermann, , Seitenangabe" und im Text selbst zu einem weiteren Leerzeichen.

In einem anderen Forum riet man mir zu folgendem Code:
\newcommand*{\Name}[2]{\textsc{#1\IfArgIsEmpty{#2}{}{ #2}}\index[Person]{#2, #1@\IName{#1}{#2}}}%
\DeclareRobustCommand*{\IName}[2]{\textsc{\IfArgIsEmpty{#2}{}{#2, }#1}}%
Dieser bringt aber leider eine Fehlermeldung und wenn ich nach "\IfArgIsEmpty" bei Google suche, kommt nicht ein einziger Eintrag.

Erprobt habe ich es dann mit folgenden Minimalbeispiel:
%Definition des Dokumentes "Buch"
\documentclass[11pt,a4paper,twoside,bibliography=totoc]{scrbook}


%Verzeichnisse
\usepackage{imakeidx}
\makeindex[name=Person, title=Personenverzeichnis]

%neu definierte Befehle
\newcommand*{\Name}[2]{\textsc{#1\IfArgIsEmpty{#2}{}{ #2}}\index[Person]{#2, #1@\IName{#1}{#2}}}%
\DeclareRobustCommand*{\IName}[2]{\textsc{\IfArgIsEmpty{#2}{}{#2, }#1}}%

%Beginn des Dokuments
\begin{document}

Ein Satz.

\Name{Max}{Mustermann}

\printindex[Person]

\end{document}
Vielen Dank.
faultier

Besserwisser

Beitrag von Besserwisser »

Hier wurde dir doch bereits erklärt, dass du für \IfArgIsEmpty KOMA-Script 3.19 brauchst. Außerdem wurde Dir erklärt, dass das mit \DeclareRobustCommand nicht funktioniert. Dagegen funktioniert das Beispiel von dort mit KOMA-Script 3.19 in der Tat einwandfrei. Was stellst du jetzt also hier diese Frage? Man hat dir dort sogar einen Link gegeben, mit dem du KOMA-Script 3.19 bei Bedarf installieren kannst.

Man hat dir dort auch die Syntax von \IfArgIsEmpty erklärt. Warum suchst du also auf Google nach einer LaTeX-Anweisung, die es in KOMA-Script erst seit kurzem gibt? Das ist doch Quatsch!

Man hat dir dort auch erklärt, dass du ggf. das Paket xstring verwenden kannst, um \IfArgIsEmpty (beispielsweise durch \IfStrEq) zu ersten. Auch auf die KOMA-Script-Anleisung \ifstr, die im [d]scrguide[/d] schon seit Jahren lange erklärt ist, wurde hingewiesen.

Also, warum trägst du das Problem jetzt (ohne Verlinkung!) hier her, statt den Hinweisen zu folgen und ggf. dort noch einmal nachzufragen??? Und warum gibst du hier den fehlerhaften Code an, obwohl du bereits einen funktionierenden Code erhalten hast?

faultier
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 53
Registriert: Mi 30. Sep 2015, 18:23

Beitrag von faultier »

Ok, mir ist tatsächlich die zweite veränderte Zeile im Code untergegangen, die muss ich nachher nochmal prüfen.

Antworten