Anzeige:
Ergebnis 1 bis 7 von 7

Thema: \label als optionales Argument von \newcommand

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.02.2011
    Beiträge
    48

    \label als optionales Argument von \newcommand

    Hallo LaTeX-Eingeweihte,
    um das Kodieren von Gleichungen zu rationalisieren und nur im Bedarfsfall einen Label eingeben zu können, habe ich folgendes Makro geschrieben:

    \newcommand{\EQ}[2][KeinLabel]{\begin{equation}#2\label{#1}\end{equation}}

    Das funktioniert, führt aber verständlicherweise zur Warnung Label 'KeinLabel' multiply defined.

    Wie kann man das "ordentlich" lösen?

    Herzliche Grüße
    helm

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.02.2010
    Beiträge
    685
    Wenn ich das richtig verstehe, möchtest Du im Falle "KeinLabel" tatsächlich
    kein Label haben. Dann kannst Du beispielsweise mit \ifthenelse aus dem
    ifthen-Paket arbeiten:

    Code:
    \newcommand{\EQ}[2][]{\begin{equation}#2\ifthenelse{\equal{#1}{}}{}{\label{#1}}\end{equation}}
    Caveat: In Ermangelung eines Minimalbeispiels ungetestet.

  3. #3
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

    das ist klassisch nicht moeglich so wie du es moechtest. du hast ja gesehen, dass du ein default vorgeben kannst aber eben kein leeres argument. besser ist es, zu testen ob ueberhaupt das argument #1 verwendet wurde und dann eine entsprechende fallunterscheidung zu machen. das geht ganz gut mit xparse aus latex3

    Code:
    \documentclass{article}
    
    \usepackage{xparse}
    \DeclareDocumentCommand{\EQ}{o m} {%
    \IfNoValueTF {#1}{
    \begin{equation}#2\end{equation}
    }{
    \begin{equation}#2\label{#1}\end{equation}
    }
    }
    
    \begin{document}
    
    \EQ{1+1}
    \EQ{2+2}
    \EQ[eq:wichtig]{3+3}
    
    siehe gleichung \ref{eq:wichtig}
    
    \end{document}
    in der definition heist das `o` optional und das `m` mandatory. im anschluss wird getestet ob ein label #1 vergeben wurde. wenn nicht, dann wird nur die gleichung ausgegeben, wenn ja, dann wird gleichung + label generiert.

    gruss
    Mein Ball ist umgefallen

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.02.2010
    Beiträge
    685
    Neugierig: Warum so kompliziert?

    Code:
    \documentclass{article}
    \usepackage{ifthen}
    \newcommand{\EQ}[2][]{\begin{equation}#2\ifthenelse{\equal{#1}{}}{}{\label{#1}}\end{equation}}
    \begin{document}
    \EQ{3+3}
    
    \EQ{3+3}
    
    \EQ[eq:wichtig]{3+3}
    
    siehe gleichung \ref{eq:wichtig}
    
    \end{document}
    funktioniert auch (es sei denn, ich habe etwas Fundamentales übersehen).

  5. #5
    Registrierter Benutzer Avatar von cgnieder
    Registriert seit
    06.04.2011
    Ort
    Herrenberg
    Beiträge
    254
    Auch wenn ich persönlich xparse sehr schätze und oft verwende ist die Lösung auch ohne jedes Zusatzpaket möglich:
    Code:
    \documentclass{article}
    \newcommand\EQ[2][]{%
      \begin{equation}
        #2\if\relax\detokenize{#1}\relax\else\label{#1}\fi
      \end{equation}}
    
    \begin{document}
    \EQ{3+3}
    
    \EQ{3+3}
    
    \EQ[eq:wichtig]{3+3}
    
    siehe gleichung \ref{eq:wichtig}
    
    \end{document}
    Gruß
    Clemens

  6. #6
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    alle wege fuehren nach rom wuerde ich mal sagen. ich finde xparse einfach geschickt, man muss es natuerlich nicht verwenden...


    gruss
    Mein Ball ist umgefallen

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.02.2011
    Beiträge
    48
    Danke an Euch alle für die schnell geposteten Lösungen! Ich habe LuPi's versucht, und das geht ohne Warning-Mecker.

    Herzliche Grüße
    helm

Lesezeichen

Berechtigungen

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