Sie sind hier

\listoftoc nach Überschrift zweispaltig

Ich verwende das Paket "tocbasic" dazu, am Ende von Texten ein Verzeichnis der Anlagen erstellen zu lassen, die im Text genannt sind. Bei einer langen Liste von Anlagen hätte ich diese gerne zweispaltig gesetzt.

Aber wenn ich, wie im folgenden Beispiel, die multicols-Umgebung verwende, dann wird die Überschrift natürlich als Bestandteil von multicols angesehen und das sieht häßlich aus:

\documentclass[pagesize]{scrartcl} 
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\usepackage{tocbasic, multicol, xspace}
 
\newcounter{Anl}
\newcommand{\Anlv}[1]{%
  \refstepcounter{Anl}%
  \textit{Anlage \theAnl{}\xspace}%
  \addtocontents{anl}{%
    \mdseries{}Anlage \theAnl{}: #1\newline%{}{}%
  }%
%  \label{ANL:#1}%
}
\DeclareNewTOC[%
type=anlverz,%
types=anlverzes,%
nonfloat,%
name=Anlagen,%
listname={Anlagen:}%
]{anl}
 
 
\begin{document}
 
Text \Anlv{erste} 
 
Text \Anlv{Zweite}
 
Text \Anlv{drei} 
 
Text \Anlv{vier} 
 
Text \Anlv{fünf} 
 
Text \Anlv{sechs}
 
\begin{multicols}{2}
  \listoftoc{anl}
\end{multicols}
 
\end{document}
 

Beim zweispaltigen Inhaltsverzeichnis kann ich mir mit folgendem Code in der Präambel behelfen:

 
\makeatletter
\renewcommand{\tableofcontents}[1][\contentsname]{%
  \section*{#1}
  \begin{multicols}{2}
    \@starttoc{toc}
  \end{multicols}
}
\makeatother

Gibt es sowas auch für \listoftoc{anl} ?

\documentclass[pagesize]{scrartcl} 
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\usepackage{tocbasic, multicol, xspace}
 
\newcounter{Anl}
\newcommand{\Anlv}[1]{%
  \refstepcounter{Anl}%
  \textit{Anlage \theAnl{}\xspace}%
  \addtocontents{anl}{%
    \mdseries{}Anlage \theAnl{}: #1\newline%{}{}%
  }%
%  \label{ANL:#1}%
}
\DeclareNewTOC[%
type=anlverz,%
types=anlverzes,%
nonfloat,%
name=Anlagen,%
listname={Anlagen:}%
]{anl}
 
 
\begin{document}
 
Text \Anlv{erste} 
 
Text \Anlv{Zweite}
 
Text \Anlv{drei} 
 
Text \Anlv{vier} 
 
Text \Anlv{fünf} 
 
Text \Anlv{sechs}
 
\deftocheading{anl}{} 
\begin{multicols}{2}[\addsec{\listanlverzname}]
  \listoftoc{anl}
\end{multicols}
 
\end{document}

Vielen Dank, das funktioniert!

Nun hätte ich noch gerne die von Libertine angebotenen negativen Zahlen in einem schwarzen Kreis verwendet. Dazu habe ich den Code etwas ergänzt. Der Befehl "\lnote" funktioniert so, wie er soll. Aber wenn ich dann versuche, auf diese Weise die Aufzählung der Anlagen zu verändern, gibt es einen Fehler.

Ich habe im folgenden Code in Zeile 13 anstelle von
    \mdseries{} \theAnl{}: #1\newline%{}{}%

geschrieben:
    \mdseries{} \lnnum{\theAnl{}}: #1\newline%{}{}%

und das führt zu einem Fehler. Lässt man "\lnnum" weg, läuft das Beispiel durch.

\documentclass[pagesize]{scrartcl} 
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
 
\usepackage{tocbasic, multicol, xspace, libertine, ifthen}
 
\newcounter{Anl}
\newcommand{\Anlv}[1]{%
  \refstepcounter{Anl}%
  \textit{Anlage \theAnl{}\xspace}%
  \addtocontents{anl}{%
    \mdseries{} \lnnum{\theAnl{}}: #1\newline%{}{}%
  }%
%  \label{ANL:#1}%
}
\DeclareNewTOC[%
type=anlverz,%
types=anlverzes,%
nonfloat,%
name=Anlagen,%
listname={Anlagen:}%
]{anl}
 
\newcommand{\lnnum}[1]
    {\ifthenelse{#1 =  1}{\libertineGlyph{uni2776}}
    {\ifthenelse{#1 =  2}{\libertineGlyph{uni2777}}
    {\ifthenelse{#1 =  3}{\libertineGlyph{uni2778}}
    {\ifthenelse{#1 =  4}{\libertineGlyph{uni2779}}
    {\ifthenelse{#1 =  5}{\libertineGlyph{uni277A}}
    {\ifthenelse{#1 =  6}{\libertineGlyph{uni277B}}
    {\ifthenelse{#1 =  7}{\libertineGlyph{uni277C}}
    {\ifthenelse{#1 =  8}{\libertineGlyph{uni277D}}
    {\ifthenelse{#1 =  9}{\libertineGlyph{uni277E}}
    {\ifthenelse{#1 = 10}{\libertineGlyph{uni277F}}
    {\ifthenelse{#1 = 11}{\libertineGlyph{uni24EB}}
    {\ifthenelse{#1 = 12}{\libertineGlyph{uni24EC}}
    {\ifthenelse{#1 = 13}{\libertineGlyph{uni24ED}}
    {\ifthenelse{#1 = 14}{\libertineGlyph{uni24EE}}
    {\ifthenelse{#1 = 15}{\libertineGlyph{uni24EF}}
    {\ifthenelse{#1 = 16}{\libertineGlyph{uni24F0}}
    {\ifthenelse{#1 = 17}{\libertineGlyph{uni24F1}}
    {\ifthenelse{#1 = 18}{\libertineGlyph{uni24F2}}
    {\ifthenelse{#1 = 19}{\libertineGlyph{uni24F3}}
    {\ifthenelse{#1 = 20}{\libertineGlyph{uni24F4}}
    {NUM TOO HIGH}}}}}}}}}}}}}}}}}}}}}
 
\newcounter{notecon}
\newcommand{\lnote}{\stepcounter{notecon}\lnnum{\thenotecon}}
 
\begin{document}
 
text \lnote{} text \lnote{} text \lnote{} text \lnote{} 
 
 
Text \Anlv{erste} 
 
Text \Anlv{Zweite}
 
Text \Anlv{drei} 
 
Text \Anlv{vier} 
 
Text \Anlv{fünf} 
 
Text \Anlv{sechs}
 
\deftocheading{anl}{} 
\begin{multicols}{2}[\addsec{\listanlverzname}]
  \listoftoc{anl}
\end{multicols}
 
\end{document}

Wahrscheinlich muss man nur an der richtigen Stelle ein "\protect" einfügen, aber meine Versuche dazu sind schief gegangen.

Wenn jemand eine einfachere Idee hat, wie ich mit Libertine diese Zahlen in Kreisen verwenden kann, gerne. Ich bin aber darauf angewiesen, pdfLaTeX zu verwenden, LuaLaTeX etc. scheidet aus.

Und: Ich verwende das ursprüngliche Libertine-Paket, vielleicht liegt darin der Fehler, dann ist mir 'halt nicht zu helfen.

Bild von Markus Kohm

Wenn man in eine Hilfsdatei schreibt, sollte man alle Anweisungen, die nicht bereits beim Schreiben in die Hilfsdatei expandieren sollen, mit \protect schützen. Das gilt ganz besonders für derart extrem nicht vollexpandierbare Anweisungen wie \ifthenelse:

% Bitte XeLaTeX oder LuaLaTeX verwenden!
\documentclass[pagesize]{scrartcl} 
\usepackage[ngerman]{babel}
\usepackage{tocbasic, multicol, xspace, libertine, ifthen}
 
\newcounter{Anl}
\newcommand{\Anlv}[1]{%
  \refstepcounter{Anl}%
  \textit{Anlage \theAnl{}\xspace}%
  \addtocontents{anl}{%
    \protect\mdseries\protect\lnnum{\theAnl}: #1\protect\newline%{}{}%
  }%
%  \label{ANL:#1}%
}
\DeclareNewTOC[%
type=anlverz,%
types=anlverzes,%
nonfloat,%
name=Anlagen,
listname={Anlagen:}%
]{anl}
\BeforeStartingTOC[anl]{\begin{multicols}{2}}
\AfterStartingTOC[anl]{\end{multicols}}
 
\newcommand{\lnnum}[1]
    {\ifthenelse{#1 =  1}{\libertineGlyph{uni2776}}
    {\ifthenelse{#1 =  2}{\libertineGlyph{uni2777}}
    {\ifthenelse{#1 =  3}{\libertineGlyph{uni2778}}
    {\ifthenelse{#1 =  4}{\libertineGlyph{uni2779}}
    {\ifthenelse{#1 =  5}{\libertineGlyph{uni277A}}
    {\ifthenelse{#1 =  6}{\libertineGlyph{uni277B}}
    {\ifthenelse{#1 =  7}{\libertineGlyph{uni277C}}
    {\ifthenelse{#1 =  8}{\libertineGlyph{uni277D}}
    {\ifthenelse{#1 =  9}{\libertineGlyph{uni277E}}
    {\ifthenelse{#1 = 10}{\libertineGlyph{uni277F}}
    {\ifthenelse{#1 = 11}{\libertineGlyph{uni24EB}}
    {\ifthenelse{#1 = 12}{\libertineGlyph{uni24EC}}
    {\ifthenelse{#1 = 13}{\libertineGlyph{uni24ED}}
    {\ifthenelse{#1 = 14}{\libertineGlyph{uni24EE}}
    {\ifthenelse{#1 = 15}{\libertineGlyph{uni24EF}}
    {\ifthenelse{#1 = 16}{\libertineGlyph{uni24F0}}
    {\ifthenelse{#1 = 17}{\libertineGlyph{uni24F1}}
    {\ifthenelse{#1 = 18}{\libertineGlyph{uni24F2}}
    {\ifthenelse{#1 = 19}{\libertineGlyph{uni24F3}}
    {\ifthenelse{#1 = 20}{\libertineGlyph{uni24F4}}
    {NUM TOO HIGH}}}}}}}}}}}}}}}}}}}}}
 
\newcounter{notecon}
\newcommand{\lnote}{\stepcounter{notecon}\lnnum{\thenotecon}}
 
\begin{document}
 
text \lnote{} text \lnote{} text \lnote{} text \lnote{} 
 
 
Text \Anlv{erste} 
 
Text \Anlv{Zweite}
 
Text \Anlv{drei} 
 
Text \Anlv{vier} 
 
Text \Anlv{fünf} 
 
Text \Anlv{sechs}
 
\listofanlverzes
 
\end{document}

Ich finde allerdings, dass es besser ist, auf ifthen in dem Fall zu pfeifen:

\documentclass[pagesize]{scrartcl} 
\usepackage[ngerman]{babel}
\usepackage{tocbasic, multicol, xspace, libertine}
 
\newcounter{Anl}
\newcommand{\Anlv}[1]{%
  \refstepcounter{Anl}%
  \textit{Anlage \theAnl{}\xspace}%
  \addtocontents{anl}{%
    \protect\mdseries\lnnum{\value{Anl}}: #1\protect\par%{}{}%
  }%
%  \label{ANL:#1}%
}
\DeclareNewTOC[%
type=anlverz,%
types=anlverzes,%
nonfloat,%
name=Anlagen,
listname={Anlagen:}%
]{anl}
\BeforeStartingTOC[anl]{\begin{multicols}{2}}
\AfterStartingTOC[anl]{\end{multicols}}
 
\newcommand{\lnnum}[1]{%
  \ifcase #1\relax
  \or \libertineGlyph{uni2776}%
  \or \libertineGlyph{uni2777}%
  \or \libertineGlyph{uni2778}%
  \or \libertineGlyph{uni2779}%
  \or \libertineGlyph{uni277A}%
  \or \libertineGlyph{uni277B}%
  \or \libertineGlyph{uni277C}%
  \or \libertineGlyph{uni277D}%
  \or \libertineGlyph{uni277E}%
  \or \libertineGlyph{uni277F}%
  \or \libertineGlyph{uni24EB}%
  \or \libertineGlyph{uni24EC}%
  \or \libertineGlyph{uni24ED}%
  \or \libertineGlyph{uni24EE}%
  \or \libertineGlyph{uni24EF}%
  \or \libertineGlyph{uni24F0}%
  \or \libertineGlyph{uni24F1}%
  \or \libertineGlyph{uni24F2}%
  \or \libertineGlyph{uni24F3}%
  \or \libertineGlyph{uni24F4}%
  \else {NUM TOO HIGH}%
  \fi
}
 
\newcounter{notecon}
\newcommand{\lnote}{\stepcounter{notecon}\lnnum{\thenotecon}}
 
\begin{document}
 
text \lnote{} text \lnote{} text \lnote{} text \lnote{} 
 
 
Text \Anlv{erste} 
 
Text \Anlv{Zweite}
 
Text \Anlv{drei} 
 
Text \Anlv{vier} 
 
Text \Anlv{fünf} 
 
Text \Anlv{sechs}
 
\listofanlverzes
 
\end{document}

Die Unterschiede kannst Du in der aux- und der anl-Datei sehen.

Die Anweisungen \BeforeStartingTOC und \AfterStartingTOC sind in der Anleitung erklärt.

\mdseries hat übrigens kein Argument. Im Extremfall könnte die Verwendung mit leeren Gruppenklammern gefolgt von einem Leerzeichen zu einem zusätzlichen Leerzeichen in der Ausgabe führen. Im konkreten Fall wird es nicht passieren, aber ich habe es trotzdem korrigiert, damit es niemand an kritischer Stelle nachmacht.

Dankeschön!

Ausprobiert, funktioniert, direkt verwendet. Die Anleitung zu \AfterStartingTOC hatte ich nicht verstanden, ich hatte nach einem nicht existierenden \AfterEndingTOC gesucht. \or muss ich mir anschauen. Jedenfalls ist das sehr erfreulich, weil ich in Zukunft die ganzen Zahlen und Symbole der Linux Libertine auf diese Weise verwenden kann.

Gruß,
Alexander

Bild von Markus Kohm

\or gehört zu \ifcase und ist beispielsweise in TeX by Topic erklärt, das DANTE-Mitglieder dieses Jahr als besonderes Jubiläumsgeschenk vom Verein bekommen bzw. bekommen haben.

Comments for "\listoftoc nach Überschrift zweispaltig" abonnieren