PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Memoir Setupmaintoc



Pantos
21-02-2011, 12:11
Hallo

Ich möchte die Befehle \setupshorttoc, \setupparasubsecs und \setupmaintoc, aus dem Memoir Handbuch memman.pdf übernehmen. Wenn ich den Code direkt aus der PDF kopiere wird nicht mal eine output PDF erzeugt (fatal error).
Deswegen habe ich den Code von hier übernommen:

http://www.tex.ac.uk/ctan/macros/latex/contrib/memoir/doc-src/memsty.sty

Es Funktionier aber auch nicht und ich verstehe nicht warum. Hier mein Minimalbeispiel:




\documentclass [a4paper,11pt,oneside]{memoir}
\setsecnumdepth{section}
\setcounter{tocdepth}{3}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%
%%%% Short and long ToC

\newcommand*{\setupshorttoc}{%
\renewcommand*{\contentsname}{Short contents}
\let\oldchangetocdepth\changetocdepth
\let\oldprecistoctext\precistoctext
\renewcommand{\precistoctext}[1]{}
\let\oldcftchapterfillnum\cftchapterfillnum
\renewcommand*{\changetocdepth}[1]{}
\setcounter{tocdepth}{0}% chapters
\renewcommand*{\cftchapterfont}{\hfill\sffamily}
\renewcommand*{\cftchapterpagefont}{\normalfont}
\renewcommand*{\cftchapterleader}{ \textperiodcentered\space}
\renewcommand*{\cftchapterafterpnum}{\cftparfillsk ip}
%% \setpnumwidth{0em}
%% \setpnumwidth{1.5em}
\renewcommand*{\cftchapterfillnum}[1]{%
{\cftchapterleader}\nobreak
\hbox to 1.5em{\cftchapterpagefont ##1\hfil}\cftchapterafterpnum\par}
\setrmarg{0.3\textwidth}
\setlength{\unitlength}{\@tocrmarg}
\addtolength{\unitlength}{1.5em}
\let\oldcftpartformatpnum\cftpartformatpnum
\renewcommand*{\cftpartformatpnum}[1]{%
\hbox to\unitlength{{\cftpartpagefont ##1}}}
\let\oldcftbookformatpnum\cftbookformatpnum
\renewcommand*{\cftbookformatpnum}[1]{%
\hbox to\unitlength{{\cftbookpagefont ##1}}}}

\newcommand*{\setupparasubsecs}{%
\let\oldnumberline\numberline
\renewcommand*{\cftsubsectionfont}{\itshape}
\renewcommand*{\cftsubsectionpagefont}{\itshape}
\renewcommand{\l@subsection}[2]{
\ifnum\c@tocdepth > 1\relax
\def\numberline####1{\textit{####1}~}%
\leftskip=\cftsubsectionindent
\rightskip=\@tocrmarg
%% \advance\rightskip 0pt plus \hsize % uncomment this for raggedright
%% \advance\rightskip 0pt plus 2em % uncomment this for semi-ragged
\parfillskip=\fill
\ifhmode ,\ \else\noindent\fi
\ignorespaces
{\cftsubsectionfont ##1}~{\cftsubsectionpagefont##2}%
\let\numberline\oldnumberline\ignorespaces
\fi}}

\AtEndDocument{\addtocontents{toc}{\par}}%%% OK

\newcommand*{\setupmaintoc}{%
\renewcommand{\contentsname}{Inhaltsverzeichnis}
\let\changetocdepth\oldchangetocdepth
\let\precistoctext\oldprecistoctext
\let\cftchapterfillnum\oldcftchapterfillnum
\addtodef{\cftchapterbreak}{\par}{}
\renewcommand*{\cftchapterfont}{\normalfont\sffami ly}
\renewcommand*{\cftchapterleader}{\sffamily\cftdot fill{\cftchapterdotsep}}
\renewcommand*{\cftchapterafterpnum}{}
\renewcommand{\cftchapterbreak}{\par\addpenalty{-\@highpenalty}}
\setpnumwidth{2.55em}
\setrmarg{3.55em}
\setcounter{tocdepth}{2}
\let\cftpartformatpnum\oldcftpartformatpnum
\addtodef{\cftpartbreak}{\par}{}
\let\cftbookformatpnum\oldcftbookformatpnum
\addtodef{\cftbookbreak}{\par}{}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%


\begin{document}

\setupparasubsecs
\setupmaintoc
\tableofcontents
\setlength{\unitlength}{1pt}

\chapter{Chaper 1}
\section{Section}
\subsection{Subsection}
\chapter{Chapter 2}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\section{Section}
\section{Section}
\section{Section}

\end{document}





Ich erhalte Fehler wie

You can't use `macro parameter character #' in horizontal mode

parameters must be numbered consecutively

missing number treated as zero

und weitere...

In der PDF wird die TOC zwar erstellt aber es erschein die Warnung "highpenalty" zwischen den Kapiteln.

Ich habe schon den ganzen Vormittag versucht den Fehler zu beheben, aber habe noch nicht mal eine Ahnung warum es nicht funktioniert. Mein Latexwissen reicht da leider nicht aus.

Viel Dank im Voraus!

CollmDante
21-02-2011, 14:05
Was mir auf dem ersten Blick aufgefallen ist:
Der eingefügte Code in der Präambel enthält u.a. das @ Zeichen und ist daher zwischen die Befehle \makeatletter und \makeatother zu setzen.
Ob damit das eigentliche Problem gelöst ist, kann ich zur Zeit, da unterwegs nicht feststellen.
MfG
Jens

Pantos
21-02-2011, 20:54
Im Quelltext, aus dem ich den Code genommen habe, wurde das nicht so gemacht, aber bei mir reduziert sich die Fehlerzahl von 17 auf 3, wenn ich den Code zwischen diese beiden Befehle setzte.

Danke für den Tip. Mal schaun ob ich es damit komplett zum laufen bringe.

Pantos
21-02-2011, 21:02
Ok ich habs jetzt... Danke noch mal. Code mit @ muß zwischen \makeatletter und \makeatother oder in eine sty Datei.