Liberty
17-02-2011, 10:55
Moin,
ich bin mal wieder an meine Grenzen gestoßen. :confused: Ich versuche gerade, mir die \label \ref und \pageref Befehle in erweiterten Fassungen zusammenzubasteln, aber ich scheine ein Problem mit nicht ausreichend robusten Befehlen zu haben.
Ich hab mal ein MinBsp gebastelt, dass jetzt zwar nicht direkt aus meinem Projekt stammt, aber den Fehler reproduziert.
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{ifthen}
\usepackage{hyperref}
% Konstanten
\newcommand{\labelcatA}{A}
\newcommand{\labelprefA}{TypA}
\newcommand{\labelcatB}{B}
\newcommand{\labelprefB}{TypB}
\newcommand{\labelcat}{CAT}
\newcommand{\labelcatsep}{:}
\newcommand{\defaultcat}{\labelcatA}
% Hilfsmakro, das das Label zusammenbaut
\newcommand{\makemylabel}[2]{%
\ifthenelse{\equal{#1}{\labelcatA}}{%
\def\catlabel{\labelprefA}%
}{%
\def\catlabel{\labelprefB}%
}
\labelprefA\labelcatsep#2%
}
% Erweiterte Label/Ref Befehle
\newcommand{\mylabel}[2][\defaultcat]{\label{\makemylabel{#1}{#2}}}
\newcommand{\myref}[2][\defaultcat]{\ref{\makemylabel{#1}{#2}}}
\begin{document}
\section{Test}\mylabel{Test}
Direct Printout: \makemylabel{T}{Test}
Reference: \myref{Test}
\end{document}
Die erste der 100 Fehlermeldungen ist:
! Illegal parameter number in definition of \reserved@a.
Der Rest dürften Folgefehler sein, aber ihr seht's ja selbst bei testen.
Ich hatte es auch schon mal geschafft, dass die *.aux - Datei die Labels enthält, allerdings waren das wilde Folgen von \par's, leeren Blöcken und so weiter.
Soweit ich das Problem bereits verstehe, gibt's irgendwo Ärger mit einem zerbrechlichen Befehl, aber meine Versuch-Irrtum Tests mit \DeclareRobustCommand haben mir bis jetzt nicht weitergeholfen.
Was genau muss ich also robust deklarieren, damit das gewünschte Ergebnis erzielt wird?
MfG,
Liberty
P.S.: Als ich nach der Fehlermeldung gesucht habe, kamen hauptsächlich Fragen zum captions-Paket, aber in diesem Fall möchte ich ja selbst en Befehl basteln, also hat mir die Suche bis jetzt nicht geholfen.
ich bin mal wieder an meine Grenzen gestoßen. :confused: Ich versuche gerade, mir die \label \ref und \pageref Befehle in erweiterten Fassungen zusammenzubasteln, aber ich scheine ein Problem mit nicht ausreichend robusten Befehlen zu haben.
Ich hab mal ein MinBsp gebastelt, dass jetzt zwar nicht direkt aus meinem Projekt stammt, aber den Fehler reproduziert.
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{ifthen}
\usepackage{hyperref}
% Konstanten
\newcommand{\labelcatA}{A}
\newcommand{\labelprefA}{TypA}
\newcommand{\labelcatB}{B}
\newcommand{\labelprefB}{TypB}
\newcommand{\labelcat}{CAT}
\newcommand{\labelcatsep}{:}
\newcommand{\defaultcat}{\labelcatA}
% Hilfsmakro, das das Label zusammenbaut
\newcommand{\makemylabel}[2]{%
\ifthenelse{\equal{#1}{\labelcatA}}{%
\def\catlabel{\labelprefA}%
}{%
\def\catlabel{\labelprefB}%
}
\labelprefA\labelcatsep#2%
}
% Erweiterte Label/Ref Befehle
\newcommand{\mylabel}[2][\defaultcat]{\label{\makemylabel{#1}{#2}}}
\newcommand{\myref}[2][\defaultcat]{\ref{\makemylabel{#1}{#2}}}
\begin{document}
\section{Test}\mylabel{Test}
Direct Printout: \makemylabel{T}{Test}
Reference: \myref{Test}
\end{document}
Die erste der 100 Fehlermeldungen ist:
! Illegal parameter number in definition of \reserved@a.
Der Rest dürften Folgefehler sein, aber ihr seht's ja selbst bei testen.
Ich hatte es auch schon mal geschafft, dass die *.aux - Datei die Labels enthält, allerdings waren das wilde Folgen von \par's, leeren Blöcken und so weiter.
Soweit ich das Problem bereits verstehe, gibt's irgendwo Ärger mit einem zerbrechlichen Befehl, aber meine Versuch-Irrtum Tests mit \DeclareRobustCommand haben mir bis jetzt nicht weitergeholfen.
Was genau muss ich also robust deklarieren, damit das gewünschte Ergebnis erzielt wird?
MfG,
Liberty
P.S.: Als ich nach der Fehlermeldung gesucht habe, kamen hauptsächlich Fragen zum captions-Paket, aber in diesem Fall möchte ich ja selbst en Befehl basteln, also hat mir die Suche bis jetzt nicht geholfen.