moono
19-01-2013, 19:14
Hallo zusammen
Ich weiss, das Thema wurde schon oft angeschnitten, aber alle Beiträge, die ich gefunden habe, laufen ins Leere.
Ich habe einen Command, dem zwei Variablen #1 und #2 übergeben werden. Dazu wird eine Variable \mode global im Dokument gesetzt. Wenn die Variable \mode "1" zurückgibt, soll in der Command der Inhalt von #1 ausgegeben werden, wenn sie "2" zurückgibt den Inhalt von #2. Sollte die anzuzeigende Variable leer sein, so soll auch die andere ausgegeben werden.
Mein Problem ist nun, dass das Compilen scheitert, weil dem Command zu stark verschachtelte (zu komplexe) Inhalte und Commands übergeben werden.
Meine Idee nun: einfach die Zeichen zählen, ist die Länge 0, dann ist die Variable leer. Nur, wie zähl ich die? Hat jemand eine Idee?
Mein aktueller Code:
% document mode
% @modes: all, notes, chords
\def\mode{notes}
% songParts
% @param notes
% @param chords
\newcommand{\songParts}[2]{
%if mode=notes + notes given -> print note, else chords
\ifthenelse{\equal{\mode}{notes}}{
%\ifthenelse{\equal{#1}{}}{#2}{#1}
#1
}{}
%if mode=chords + chords given -> print chords, else notes
\ifthenelse{\equal{\mode}{chords}}{
%\ifthenelse{\equal{#2}{}}{#1}{#2}
#2
}{}
% mode all
\ifthenelse{\equal{\mode}{all}}{
#1
#2
}{}
}
Code, wie ich ihn mir ungefähr vorstelle:
% document mode
% @modes: all, notes, chords
\def\mode{notes}
% songParts
% @param notes
% @param chords
\newcommand{\songParts}[2]{
%if mode=notes + notes given -> print note, else chords
\ifthenelse{\equal{\mode}{notes}}{
\ifthenelse{\equal{\count{#1}}{\count{}}}{#2}{#1}
}{}
%if mode=chords + chords given -> print chords, else notes
\ifthenelse{\equal{\mode}{chords}}{
\ifthenelse{\equal{\count{#2}}{\count{}}}{#1}{#2}
}{}
% mode all
\ifthenelse{\equal{\mode}{all}}{
#1
#2
}{}
}
Ich weiss, das Thema wurde schon oft angeschnitten, aber alle Beiträge, die ich gefunden habe, laufen ins Leere.
Ich habe einen Command, dem zwei Variablen #1 und #2 übergeben werden. Dazu wird eine Variable \mode global im Dokument gesetzt. Wenn die Variable \mode "1" zurückgibt, soll in der Command der Inhalt von #1 ausgegeben werden, wenn sie "2" zurückgibt den Inhalt von #2. Sollte die anzuzeigende Variable leer sein, so soll auch die andere ausgegeben werden.
Mein Problem ist nun, dass das Compilen scheitert, weil dem Command zu stark verschachtelte (zu komplexe) Inhalte und Commands übergeben werden.
Meine Idee nun: einfach die Zeichen zählen, ist die Länge 0, dann ist die Variable leer. Nur, wie zähl ich die? Hat jemand eine Idee?
Mein aktueller Code:
% document mode
% @modes: all, notes, chords
\def\mode{notes}
% songParts
% @param notes
% @param chords
\newcommand{\songParts}[2]{
%if mode=notes + notes given -> print note, else chords
\ifthenelse{\equal{\mode}{notes}}{
%\ifthenelse{\equal{#1}{}}{#2}{#1}
#1
}{}
%if mode=chords + chords given -> print chords, else notes
\ifthenelse{\equal{\mode}{chords}}{
%\ifthenelse{\equal{#2}{}}{#1}{#2}
#2
}{}
% mode all
\ifthenelse{\equal{\mode}{all}}{
#1
#2
}{}
}
Code, wie ich ihn mir ungefähr vorstelle:
% document mode
% @modes: all, notes, chords
\def\mode{notes}
% songParts
% @param notes
% @param chords
\newcommand{\songParts}[2]{
%if mode=notes + notes given -> print note, else chords
\ifthenelse{\equal{\mode}{notes}}{
\ifthenelse{\equal{\count{#1}}{\count{}}}{#2}{#1}
}{}
%if mode=chords + chords given -> print chords, else notes
\ifthenelse{\equal{\mode}{chords}}{
\ifthenelse{\equal{\count{#2}}{\count{}}}{#1}{#2}
}{}
% mode all
\ifthenelse{\equal{\mode}{all}}{
#1
#2
}{}
}