von iTob » Sa 11. Sep 2010, 13:17
Hallo,
ich habe ein kleines Problem mit dem \@ifstar-Befehl. Wenn ich ihn »normal« benutze, geht alles, aber wenn ich den Befehl innerhalb einer \if-Struktur verwenden will, geht es nicht.
Hintergrund: Ich würde gerne durch eine Paketoption, die mir als \if@<paketoption> die Stern- und normale Definition eines Makros vertauschen können.
Hier mal ein Beispiel, in dem ich die \if-Anweisung einfach so definiere, da das Problem vermutlich nicht im Paket sondern meiner Verwendung von \@ifstar liegt. Ich hab auch schon zwei Verschiedene Varianten probiert, die beide nicht gehen...
\documentclass[fontsize=10pt, DIV=11,a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\makeatletter
% die Paketoption wird hier schlicht als if defniniert
\newif\if@paketoption
\@paketoptiontrue
% \@paketoptionfalse
% die beiden Befhele, die durch Stern unterschieden werden sollen
\providecommand{\@testnorm}{\textbf{ohne} Stern}
\providecommand{\@teststar}{\textbf{mit} Stern}
% ein "normaler" Aufruf von \@ifstar geht
\providecommand{\klapptimmer}{%
\@ifstar \@teststar \@testnorm%
}
% und zwei Versuche, das ganze mit einer if-Abfrage
% bei Bedarf vertauschen zu können
\providecommand{\versucheins}{%
\if@paketoption
\@ifstar \@notestar \@notenorm
\else
\@ifstar{\@notenorm}{\@notestar}
\fi
}
\providecommand{\versuchzwei}{%
\@ifstar%
{\if@paketoption\@notestar\else\@notenorm\fi}%
{\if@paketoption\@notenorm\else\@notestar\fi}
}
\makeatother
\begin{document}
\section*{\texttt{@ifstar}-Problem}
Zuerst die Version, die immer geht:
An dieser Stelle der gesternte Aufruf: \klapptimmer* (Soll: \textit{mit Stern})
An dieser Stelle der normale Aufruf: \klapptimmer\ (Soll: \textit{ohne Stern})
\bigskip
\noindent Jetzt der missglueckte Versuch 1:
gesternter Aufruf: \versucheins* (Soll: \textit{mit Stern}, wenn \texttt{@paketoption=true}, sonst \textit{ohne Stern})
gesternter Aufruf: \versucheins (Soll: \textit{ohne Stern}, wenn \texttt{@paketoption=true}, sonst \textit{nit Stern})
\bigskip
\noindent Und der zweite missglueckte Versuch:
gesternter Aufruf: \versuchzwei* (Soll: \textit{mit Stern}, wenn \texttt{@paketoption=true}, sonst \textit{ohne Stern})
gesternter Aufruf: \versuchzwei (Soll: \textit{ohne Stern}, wenn \texttt{@paketoption=true}, sonst \textit{nit Stern})
\end{document}
Vielen Dank für Eure Hilfe!
Grüße, Tobi
Hallo,
ich habe ein kleines Problem mit dem \@ifstar-Befehl. Wenn ich ihn »normal« benutze, geht alles, aber wenn ich den Befehl innerhalb einer \if-Struktur verwenden will, geht es nicht.
Hintergrund: Ich würde gerne durch eine Paketoption, die mir als \if@<paketoption> die Stern- und normale Definition eines Makros vertauschen können.
Hier mal ein Beispiel, in dem ich die \if-Anweisung einfach so definiere, da das Problem vermutlich nicht im Paket sondern meiner Verwendung von \@ifstar liegt. Ich hab auch schon zwei Verschiedene Varianten probiert, die beide nicht gehen...
[code]\documentclass[fontsize=10pt, DIV=11,a4paper]{scrartcl}
\usepackage[latin1]{inputenc}
\makeatletter
% die Paketoption wird hier schlicht als if defniniert
\newif\if@paketoption
\@paketoptiontrue
% \@paketoptionfalse
% die beiden Befhele, die durch Stern unterschieden werden sollen
\providecommand{\@testnorm}{\textbf{ohne} Stern}
\providecommand{\@teststar}{\textbf{mit} Stern}
% ein "normaler" Aufruf von \@ifstar geht
\providecommand{\klapptimmer}{%
\@ifstar \@teststar \@testnorm%
}
% und zwei Versuche, das ganze mit einer if-Abfrage
% bei Bedarf vertauschen zu können
\providecommand{\versucheins}{%
\if@paketoption
\@ifstar \@notestar \@notenorm
\else
\@ifstar{\@notenorm}{\@notestar}
\fi
}
\providecommand{\versuchzwei}{%
\@ifstar%
{\if@paketoption\@notestar\else\@notenorm\fi}%
{\if@paketoption\@notenorm\else\@notestar\fi}
}
\makeatother
\begin{document}
\section*{\texttt{@ifstar}-Problem}
Zuerst die Version, die immer geht:
An dieser Stelle der gesternte Aufruf: \klapptimmer* (Soll: \textit{mit Stern})
An dieser Stelle der normale Aufruf: \klapptimmer\ (Soll: \textit{ohne Stern})
\bigskip
\noindent Jetzt der missglueckte Versuch 1:
gesternter Aufruf: \versucheins* (Soll: \textit{mit Stern}, wenn \texttt{@paketoption=true}, sonst \textit{ohne Stern})
gesternter Aufruf: \versucheins (Soll: \textit{ohne Stern}, wenn \texttt{@paketoption=true}, sonst \textit{nit Stern})
\bigskip
\noindent Und der zweite missglueckte Versuch:
gesternter Aufruf: \versuchzwei* (Soll: \textit{mit Stern}, wenn \texttt{@paketoption=true}, sonst \textit{ohne Stern})
gesternter Aufruf: \versuchzwei (Soll: \textit{ohne Stern}, wenn \texttt{@paketoption=true}, sonst \textit{nit Stern})
\end{document}[/code]
Vielen Dank für Eure Hilfe!
Grüße, Tobi