Glossar nicht nummeriert im Inhaltsverzeichnis (Lösung)

Erstellen von Index, Glossar, Symbolverzeichnis, einer Nomenklatur etc. mit MakeIndex oder Xindy


DonCube
Forum-Guru
Forum-Guru
Beiträge: 291
Registriert: So 29. Jun 2008, 21:17
Wohnort: Bocholt

Glossar nicht nummeriert im Inhaltsverzeichnis (Lösung)

Beitrag von DonCube »

Guten morgen,
wie auch bei Maximilian ist bei mir das Problem aufgetreten, dass bei Verwendung des glossary Packages, das erstellte Glossar nicht im Inhaltsverzeichnis nummeriert wird.

Meines erachtens liegt das daran, dass das Package eine \chapter* Umgebung verwendet und nicht \chapter. Ich habe nun mal ein workaround erstellt um dennoch die Nummerierung darzustellen.

Hierzu muss folgender Teil des Glossarpackages in der Präambel redefiniert werden.
\providecommand{\glossarytitle}{%
Der entstandenen Code sieht dann folgendermaßen aus.
\makeatletter
\renewcommand{\glossarytitle}{%
\@ifundefined{chapter}%
{%
\ifgls@hypertoc
\phantomsection
\@glosaddtoc{section}%
\section*{\@glossaryname}\relax
\else
\section*{\@glossaryname}\relax
\ifgls@toc\@glosaddtoc{section}\fi
\fi}%
{%
\ifthenelse{\boolean{gls@section}}%
{%
\ifgls@hypertoc
\phantomsection
\@glosaddtoc{section}%
\section*{\@glossaryname}\relax
\else
\section*{\@glossaryname}\relax
\ifgls@toc\@glosaddtoc{section}\fi
\fi}%
{%
\ifgls@hypertoc
\@ifundefined{if@twoside}{%
\clearpage}{%
\if@twoside
\@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}%
\else
\clearpage
\fi}%
\phantomsection
\@glosaddtoc{chapter}%
\fi\chapter{\@glossaryname}\relax % <--->  \fi\chapter*{\@glossaryname}\relax
%\ifgls@toc\@glosaddtoc{chapter}\fi
}}
\markboth{\@shortglossaryname}{\@shortglossaryname}%
}
\makeatother
Hierbei sind die ursprünglichen Codeelemente noch in den Kommentaren zu erkennen. Jetzt wirft sich bei mir aber folgende Fragen auf.

1. Warum muss die folgende Zeile auch gelöscht werden? Bei Existenz dieser Zeile enstehen zwei Einträge im Inhaltsverzeichnis. Ein nummerierter und ein unnummerierter.
\ifgls@toc\@glosaddtoc{chapter}\fi
2. Die Option toc hat nun keine Wirkung mehr. Das Glossar taucht nun immer im Inhaltsverzeichnis auf.

Wie gesagt das Codeschnipsel ist nur ein Workaround. Würde es gerne hier diskutieren.

Gruß
DonCube

PS: \addchap habe ich zuvor schon ausprobiert. Das funktioniert leider nicht wie gewünscht.
Schau mal hier rein goLaTeX-Wiki, und gaaaanz wichtig Minimalbeispiel

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2529
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

Hallo DonCube,

wenn Du ein compilierbares Minimalbeispiel angibst, mit dem man diesen Workaround testen kann, lässt sich besser darüber sprechen. Du hast doch damit bestimmt auch übersetzt und nicht nur den workaround uncompiliert durchdacht. Ich konstruiere mir jetzt kein eigenes Testbeispiel, biete jedoch gern eine Alternative an.
Auf folgende Weise kannst Du bewirken, dass glossary ein richtiges Kapitel anlegt:
\let\stdchapter\chapter
\def\chapter*#1{\stdchapter{#1}}
\printglossary
\let\chapter\stdchapter
Diese Art workaround funktioniert nicht nur für glossary, auch für nomencl oder das Literaturverzeichnis. Analog klappt es mit \section für kapitellose Klassen. Siehe auch change starred command into unstarred.

Viele Grüße,

Stefan

DonCube
Forum-Guru
Forum-Guru
Beiträge: 291
Registriert: So 29. Jun 2008, 21:17
Wohnort: Bocholt

Minimalbeispiel für Workaround

Beitrag von DonCube »

Hey Stefan,
so hier ist erstmal der Workaround als compilierbares Minimalbeispiel.
\documentclass[11pt,
paper=a4,
]{scrbook}				
\title{Minimalbeispiel}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{scrpage2}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Glossar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[
%nonumberlist, 	%keine Seitenzahlen anzeigen  
acronym,      	%ein Abkürzungsverzeichnis erstellen
toc,            %Eintrag im Inhaltsverzeichnis
%section			 	%im Inhaltsverzeichnis auf section-Ebene erscheinen
]{glossary}
\newglossarytype[glg]{glossar}{glo}{gls}
\newcommand{\glossarname}{Glossar}
\setglossarystyle[glossar]{
style=altlist,
header=plain,
border=none,
number=none,
}
\makeglossar


\makeatletter
\renewcommand{\glossarytitle}{%
\@ifundefined{chapter}%
{%
\ifgls@hypertoc
\phantomsection
\@glosaddtoc{section}%
\section*{\@glossaryname}\relax
\else
\section*{\@glossaryname}\relax
\ifgls@toc\@glosaddtoc{section}\fi
\fi}%
{%
\ifthenelse{\boolean{gls@section}}%
{%
\ifgls@hypertoc
\phantomsection
\@glosaddtoc{section}%
\section*{\@glossaryname}\relax
\else
\section*{\@glossaryname}\relax
\ifgls@toc\@glosaddtoc{section}\fi
\fi}%
{%
\ifgls@hypertoc
\@ifundefined{if@twoside}{%
\clearpage}{%
\if@twoside
\@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}%
\else
\clearpage
\fi}%
\phantomsection
\@glosaddtoc{chapter}%
\fi\chapter{\@glossaryname}\relax % <--->  \fi\chapter*{\@glossaryname}\relax
%\ifgls@toc\@glosaddtoc{chapter}\fi
}}
\markboth{\@shortglossaryname}{\@shortglossaryname}%
}
\makeatother

\begin{document}

%Glossareintrag
\storeglosentry[glossar]{system}{name=technisches System, description={
Ein technisches System ist das systemtheoretische Modell eines vom Menschen geschaffenen oder gedachten künstlichen Gegenstandes.}}

\tableofcontents

\chapter{Minimalbeispiel}
Ein einfacher Text und eine Einbindung des Glossareintrages \gls{system}

\appendix
\printglossar

\end{document}
Durch auskommentieren der Redefinition erhält man das Verhalten, dass das Glossar nicht nummeriert wird.

So werde nun mal dein vorschlag ausprobieren. Melde mich gleich wieder sobald ich es habe.

Gruß
doncube
Schau mal hier rein goLaTeX-Wiki, und gaaaanz wichtig Minimalbeispiel

DonCube
Forum-Guru
Forum-Guru
Beiträge: 291
Registriert: So 29. Jun 2008, 21:17
Wohnort: Bocholt

Glossar, Nomencl nummeriert im Inhaltsverzeichnis

Beitrag von DonCube »

Hey Stefan,
vielen Dank für Dein Codeschnipsel. Habe es nun getestet und es funktioniert super. Somit kann man sich die Redefinition sparen. Hätte ich auch eher drauf kommen können es so zu probieren.

Komisch das Google nie die Lösung die du bereits in texblog gepostet hast anzeigt. Echt gut. Ich habe es mal für die faulen Leute, welche nie auf Links klicken hier reinkopiert.

Hack: change starred command into unstarred - original on TeXblog from 17 June 2008 by Stefan Kottwitz
Stefan Kottwitz hat geschrieben: Some packages like nomencl, glossary and environments like thebibliography in standard LaTeX classes use the starred sectioning forms \chapter* and \section*. Even if they provide an option to let them added to the table of contents it may be required to use numbered sectioning. In that case you could look at the corresponding source code (article.cls, nomencl.sty, glossary.sty, …) and redefine thebibliography by \renewenvironment or redefine thenomenclature of the nomencl package etc.

Here I will show a way without redefining certain internal environments. I will use the TeX commands \def and \let to temporarily change the meaning of \section:
\let\stdsection\section
\def\section*#1{\stdsection{#1}}
\printnomenclature
% \printglossary
\let\section\stdsection
If you are interested in testing it by yourself you can find complete examples here.
Schau mal hier rein goLaTeX-Wiki, und gaaaanz wichtig Minimalbeispiel

impression
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Do 9. Jun 2011, 12:42

Beitrag von impression »

Stefan hat geschrieben:Hallo DonCube,

wenn Du ein compilierbares Minimalbeispiel angibst, mit dem man diesen Workaround testen kann, lässt sich besser darüber sprechen. Du hast doch damit bestimmt auch übersetzt und nicht nur den workaround uncompiliert durchdacht. Ich konstruiere mir jetzt kein eigenes Testbeispiel, biete jedoch gern eine Alternative an.
Auf folgende Weise kannst Du bewirken, dass glossary ein richtiges Kapitel anlegt:
\let\stdchapter\chapter
\def\chapter*#1{\stdchapter{#1}}
\printglossary
\let\chapter\stdchapter
Diese Art workaround funktioniert nicht nur für glossary, auch für nomencl oder das Literaturverzeichnis. Analog klappt es mit \section für kapitellose Klassen. Siehe auch change starred command into unstarred.

Viele Grüße,

Stefan

Hi,

ich hab dazu ne Frage. Ich musste den von dir beschriebenen Code einbauen, damit mein Glossar überhaupt im Inhaltsverzeichnis aufgenommen wurde. Nur \printglossaries nimmt das Glossar nicht ins Inhaltsverzeichnis auf.
Ok, aber jetzt habe ich das Problem, dass vor dem Glossar im Inhaltsverzeichnis eine Nummerierung steht. Kann ich das auch noch entfernen?

Danke.


Problem gelöst:
% Glossar
\printglossary[style=long3col, title=Glossar]
\addcontentsline{toc}{chapter}{Glossar} 
Jetzt klappts auch mit dem Inhaltsverzeichnis ohne Zahl davor.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Nur dass Du die letzte statt der ersten Seite des Glossars in das Inhaltsverzeichnis einträgst …

Da inzwischen das Paket glossaries das Paket glossary abgelöst hat, würde ich schlicht einen Blick in dessen Anleitung werfen. Dort ist dann ziemlich früh u. a. auch die Option toc dokumentiert.

Antworten