Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Zeichen zählen (die Variable enthält)

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.06.2012
    Beiträge
    19

    Zeichen zählen (die Variable enthält)

    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:
    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:
    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{\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
    	}{}
    }

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Zitat Zitat von moono Beitrag anzeigen
    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?
    eine Anzahl Zeichen könntest Du z.B. mit dem stringstrings-Paket ermitteln -- der Befehl hieße dann \stringlength.
    Oder Du weist einem Längenregister die Breite des übergebenen Arguments zu und wertest die Länge entsprechend aus. Das ginge z.B. mit
    Code:
    \settowidth\foo{#1}%
    Oder Du schaust mit sowas wie
    Code:
    \ifx\relax#1\relax
      %hier ist #1 leer
    \else
      %hier steht was in #1
    \fi
    nach, ob was im übergebenen Parameter drin ist...

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •