Hallo,
Ich arbeite zur Zeit an einer Wrapper-Klasse, die – abhängig von einigen externen Faktoren – einige besondere Elemente im Inhaltsverzeichnis benötigt (Z.b. Titel von Tagungsbandbeiträgen). Diese externen Faktoren werden über ifthen
-Abfragen geprüft und abhängig davon sollen bestimmte Einträge im Inhaltsverzeichnis via \DeclareTOCStyleEntry
sichtbar gemacht und mit \TOCEntryStyleStartInitCode
angepasst werden.
Dies gelingt auch, wenn die Anpassung im Toplevel (außerhalb jeder expansion) erfolgt. Wird \TOCEntryStyleStartInitCode
jedoch in einem Argument gerufen (Z.b. im Wahr-Zweig von \ifthenelse{..}{ }{}
, aber auch anderen), gibt es einen Fehler.
MWE:
\errorcontextlines=999 \documentclass{scrartcl} \usepackage{tocbasic} \tocbasicautomode \def\this#1{#1} \this{ \CloneTOCEntryStyle{tocline}{title} \TOCEntryStyleStartInitCode{title}{% \expandafter\providecommand% \csname scr@tso@#1@linefill\endcsname {\hfill}% } \DeclareTOCStyleEntry[level=0,indent=0pt,numwidth=1.5em]{title}{title} } \begin{document} \tableofcontents \addcontentsline{toc}{title}{MyTitle} \end{document}
Fehler bei \errorcontextlines=999
:
Illegal parameter number in definition of \l@preto@macro@a@add. 1 ... \providecommand \csname scr@tso@##1 @linefill\endcsname {\hfill } \l@preto@macro@a@ ...ef \l@preto@macro@a@add {^^A1 }\l@preto@macro@a@@ ...so@##1@linefill\endcsname {\hfill }} \DeclareTOCStyleEntry [le... \this #1->#1 l.13 }
Gibt es eine Möglichkeit, \TOCEntryStyleStartInitCode
im nicht-Toplevel auszuführen?
Nein
Die Problematik ist vergleichbar der von xpatch:
Davon abgesehen ist
\ifthenelse
bezüglich Expansionen ohnehin problematisch. Verwende besser normale, mit\newif
definierte Schalter oder Zähler zur Auswahl von Entscheidungen mit mehr als zwei Möglichkeiten.Schade, für mich so nicht gangbar.
Schade.
Da ich hier mit vielen Schaltern arbeiten muss, die untereinander verknüpft sind, ist ifthen schon sehr hilfreich.
Ich werde mir mit einer Krücke außerhalb von
\ifthenelse
behelfen.Danke für die Hilfe.