Seite 1 von 1

\addcontentsline nicht definiert

Verfasst: Sa 26. Mai 2018, 20:20
von TinTin82
Hi,

ich schreibe mir gerade eine eigene Dokumentenklasse.

Jetzt würde ich gerne ein Inhaltsverzeichnis erstellen lassen.
Leider ist Latex aber der Befehl :

Code • Öffne in Overleaf


\addcontentsline{toc}{chapter}{ .... }



unbekannt. Wie kann ich denn \addcontentsline in meiner Dokumentenklasse verfügbar machen ??
Muss ich den Befehl komplett neu schreiben oder gibt es ein Interface ??


Viele Grüße,
TinTin

Verfasst: So 27. Mai 2018, 00:45
von u_fischer
\addcontentsline wird im LaTeX-Kern definiert.

Verfasst: So 27. Mai 2018, 02:31
von TinTin82
Hi Ulrike,

danke für die Info...

Okay, also die Fehlermeldung ist:
[1{d:/0000_Tools/02_Latech/00_TechLive/2018/texlive/texmf-var/fonts/map/pdftex/
updmap/pdftex.map}
! Undefined control sequence.
<write> ...entsline {section}{ Blablub }{\thepage
}}
l.34 \end{document}

?
Er kommt dann zustande wenn ich in meine class Datei
ein gekennzeichneten Eintrag mache:
%.............................
% Chapter       (Ebene 0)
% ............................
\newcommand\chapter[1]
{{                                          % Zwei Klammern (Gültigkeitsbereich
                                            % selectfont
    \refstepcounter{chapter}                % Chapter counter 
    \chaptermark{#1}                        % Textmarke setzen (siehe unten)
    %\addcontentsline{toc}{chapter}{ #1\hspace{4 mm}  \thechapter  }
    \addcontentsline{toc}{chapter}{ Blablub  } <======= Fehler wenn eingeüft
    \par
    \vspace{17 mm}
    \fontencoding{T1}
    \fontfamily{ppl}
    \fontseries{b}
    \fontshape{n}
    \fontsize{21 pt}{21 pt}
    \selectfont
    #1
    \hspace{5 mm}
    \thechapter
    \vspace{4 mm}
    \par
}}

Verfasst: So 27. Mai 2018, 10:20
von Gast
Wenn in Deiner .cls nur das steht, dann hast Du ganz andere Probleme: \normalsize ist nicht definiert, es gibt keinen Counter namens chapter, chaptermark ist unbekannt. Wenn das nicht Deine ganze Datei ist, dann solltest Du uns im Sinne eines Minimalbeispiel etwas mehr verraten.

Ulrike hat ja schon erklärt, dass \addcontentsline im LaTeX-Kern definiert ist, also eigentlich gar nicht undefiniert sein kann. Und sieht man sich die Fehlermeldung genauer an, sieht man, dass nicht \addcontentsline sondern \thepage undefiniert ist. Du müsstest in Deiner .cls-Datei irgendwo
\pagenumbering{arabic}
oder \pagenumbering{Roman} oder was immer Dein Herz begehrt haben, denn nur dann weiß TeX, wie es mit Seitenzahlen umgehen soll.

Die Definition von \chapter sieht teilweise recht abenteuerlich aus. Häufig müssen in TeX Zeilenenden mit % geschützt werden, um ungewollte Leerzeichen zu verhindern. Siehe https://texwelt.de/wissen/fragen/16/was ... der-zeilen Die Font-Encoding würde ich nicht mitten im Dokument einfach grundlos umstellen. Warum schreibst Du \fonseries{b} und nicht \bfseries? Warum nicht \huge (oder so) statt \fontsize{21pt}{21pt} (wo der Durchschuss wahrscheinlich zu klein ist, siehe z.B. https://texwelt.de/wissen/fragen/11577/ ... instellung bei TeXWelt)? Ferner kann das so definierte \chapter weder mit dem optionalen kurzen Kapitelnamen für das Inhaltsverzeichnis noch mit dem Stern für umnummerierte Ausgaben umgehen. Das mag für den Privatgebrauch alles egal sein, könnte aber problematisch werden, wenn andere die Klasse auch verwenden wollen und sie erwarten, dass diese Standardidiome funktionieren (und mit andere meine ich auch Dich in zwei Monaten).

Wer eine eigene Klasse schreiben möchte, sollte sich den [d]cslguide[/d] durchgelesen haben und für alle Fälle ruhig [d]source2e[/d] offen haben, um nachzuprüfen, was wie definiert ist. Es kommt natürlich immer auf das Level an, auf dem man seine eigene .cls bastelt. Wenn man einfach nur ein leichtes Kleid über eine Standardklasse, eine KOMA-Klasse oder memoir zieht, dann ist tiefe Kenntnis der Interna nicht notwendig, aber wenn man alles selbst machen möchte, dann sollte man schon etwas mehr über die Interna wissen. Es kann auch sinnvoll sein, denn Quellcode einer ähnlichen Klasse offen zu haben, um zu sehen, wie dort die Dinge definiert sind.