PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \label als optionales Argument von \newcommand



helm
20-03-2012, 11:27
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

LuPi
20-03-2012, 12:56
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:


\newcommand{\EQ}[2][]{\begin{equation}#2\ifthenelse{\equal{#1}{}}{}{\la bel{#1}}\end{equation}}


Caveat: In Ermangelung eines Minimalbeispiels ungetestet.

bobmalaria
20-03-2012, 12:58
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


\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

LuPi
20-03-2012, 13:06
Neugierig: Warum so kompliziert?


\documentclass{article}
\usepackage{ifthen}
\newcommand{\EQ}[2][]{\begin{equation}#2\ifthenelse{\equal{#1}{}}{}{\la bel{#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).

cgnieder
20-03-2012, 13:49
Auch wenn ich persönlich xparse sehr schätze und oft verwende ist die Lösung auch ohne jedes Zusatzpaket möglich:

\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ß

bobmalaria
20-03-2012, 13:56
alle wege fuehren nach rom wuerde ich mal sagen. ich finde xparse einfach geschickt, man muss es natuerlich nicht verwenden...


gruss

helm
20-03-2012, 13:58
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