Archiv verlassen und diese Seite im Standarddesign anzeigen : \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
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
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.