Symbolverzeichnis unterteilen

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


kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Symbolverzeichnis unterteilen

Beitrag von kannstmasehn »

Moin,

ich habe folgendes Problem:

Ich habe ein Symbolverzeichnis erstellt, welches griechische und lateinische Zeichen enthält. Ich möchte das Symbolverzeichnis nun unterteilen in griechisch und latein. Es soll nicht so sein, dass zwei Verzeichnisse erstellt werden, sprich zwei Einträge im Inhaltsverzeichnis vorhanden sind.

Mein Minimalbeispiel:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage[
nonumberlist, %keine Seitenzahlen anzeigen
acronym,      %ein Abkürzungsverzeichnis erstellen
toc,          %Einträge im Inhaltsverzeichnis
section,      %im Inhaltsverzeichnis auf section-Ebene erscheinen
sanitize={symbol=false} %
]
{glossaries}
  
\renewcommand*{\glspostdescription}{}
  
%Neuer Eintragstyp
\newglossary[fog]{formel}{foi}{foo}{Formelzeichen} 
 
%Ein neuer Verzeichnisstil der auch die Einheit mit ausgibt
\newglossarystyle{mytab}{%  
 % Verzeichnis wird ein 'longtable'  mit 5 Spalten
 \renewenvironment{theglossary}%  
  {\begin{longtable}{lccp{\glsdescwidth}p{\glspagelistwidth}}}%  
  {\end{longtable}}%  
 % Kopf der Tabelle
 \renewcommand*{\glossaryheader}{%  
%  \bfseries Name 
  & \bfseries Symbol 
  & \bfseries Einheit 
  & \bfseries Bescheibung 
%  & \bfseries Seite(n)  %
  \\\endhead}%  
 % Kein Abstand zwischen Gruppen 
  \renewcommand*{\glsgroupheading}[1]{}% 
    %    
  \renewcommand*{\glossaryentryfield}[5]{%  
 %   \glsentryitem{##1}% Entry number if required  
    \glstarget
%    {##1}{##2}% Name 
        & ##4 %Symbol
        & \glsentryuseri{##1}%Einheit
    & ##3% Description  
%    & ##5% Page list  
    \\% end of row  
  }% 
  % The command \glsgroupskip specifies what to do between glossary groups.
  % Glossary styles must redefine this command. (Note that \glsgroupskip 
  % only occurs between groups, not at the start or end of the glossary.)
  \renewcommand*{\glsgroupskip}{\relax}
}

\makeglossaries
 

%Einträge Symbolverzeichnis
 
\newglossaryentry{dichte}{
name=Dichte,  
description={Verhältnis von Gewicht zu Volumen},
symbol={$\rho$},
type=formel,
user1={km/m3}
} 

\newglossaryentry{ct}{
name=ct,  
description={Schubbeiwert},
symbol={$c_T$},
type=formel,
user1={m}
}
 
\begin{document}
\glssymbol{dichte}
\glssymbol{ct}

\newpage
\printglossary[title=Formelzeichen,type=formel,style=mytab]
\end{document}
Das funktioniert so weit auch, jedoch findet keine Trennung der Zeichen statt.

Auf http://mrunix.de/forums/showthread.php? ... ndsproblem habe ich eine Variante gefunden, wie ich es auch gerne hätte. Es wird folgende Zeilen ergänzt:
\newglossaryentry{romanletter}{name={\textbf{Lateinische Buchstaben}},description={}} 
\newglossaryentry{greekletter}{name={\textbf{Griechische Buchstaben}},description={}} 
Zusätzlich gibt es Anpassungen in jedem glossary-Eintrag mit der Option "parent":
\newglossaryentry{ct}{
name=ct,  
description={Schubbeiwert},
symbol={$c_T$},
type=formel,
user1={m},
parent=greekletter
}
Nach dem Einbau bei mir, wird zwar alles übersetzt, aber es wird nur die Beschreibung eines Eintrages angezeigt, eine Unterteilung von griechisch und latein findet auch nicht statt.

So soll es im endeffekt aussehen:
Bild

Bild

Danke im Voraus!

Viele Grüße

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Re: Symbolverzeichnis unterteilen

Beitrag von rais »

Moin moin,
kannstmasehn hat geschrieben: Ich habe ein Symbolverzeichnis erstellt, welches griechische und lateinische Zeichen enthält. Ich möchte das Symbolverzeichnis nun unterteilen in griechisch und latein. Es soll nicht so sein, dass zwei Verzeichnisse erstellt werden, sprich zwei Einträge im Inhaltsverzeichnis vorhanden sind.
kein Problem, Dein Beispiel nutzt gar kein TOC.;-)
kannstmasehn hat geschrieben: Mein Minimalbeispiel:
In meinem Buch demonstriert ein Minimalbeispiel das beobachtete Problem.
Was Du gepostet hast, sieht nach einer Anleitung aus, wie man aus Deinem Code ein Minimalbeispiel für das von Dir beobachtete Problem macht. Warum postest Du nicht direkt ein MB?
kannstmasehn hat geschrieben: Nach dem Einbau bei mir, wird zwar alles übersetzt, aber es wird nur die Beschreibung eines Eintrages angezeigt, eine Unterteilung von griechisch und latein findet auch nicht statt.
Wie stellst Du Dir das vor? Der von Dir definierte Stil berücksichtigt die Unterscheidung Eintrag/Untereintrag nicht. Vllt hilft
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage[
nonumberlist, %keine Seitenzahlen anzeigen
acronym,      %ein Abkürzungsverzeichnis erstellen
toc,          %Einträge im Inhaltsverzeichnis
section,      %im Inhaltsverzeichnis auf section-Ebene erscheinen
sanitize={symbol=false} %
]
{glossaries}
 
\renewcommand*{\glspostdescription}{}

\newif\ifsubhead % (rais) siehe \glossentry weiter unten
%Neuer Eintragstyp
\newglossary[fog]{formel}{foi}{foo}{Formelzeichen}
 
%Ein neuer Verzeichnisstil der auch die Einheit mit ausgibt
\newglossarystyle{mytab}{%
 % Verzeichnis wird ein 'longtable'  mit 5 Spalten
% (rais) von denen Du nur 4 nutzt...
 \renewenvironment{theglossary}%  
  {\begin{longtable}[l]{@{}ccp{\glsdescwidth}p{\glspagelistwidth}@{}}}% (rais) ...entsprechend hab ich das hier auf 4 Spalten gekürzt.
  {\end{longtable}}%  
 % Kopf der Tabelle
 \renewcommand*{\glossaryheader}{}% (rais) wozu genau?
 % Kein Abstand zwischen Gruppen
  \renewcommand*{\glsgroupheading}[1]{}%
  \renewcommand{\glossentry}[2]{%
    \glsentryitem{##1}%
    \ifglshassymbol{##1}{% (rais) siehe `texdoc glossaries-user'. Im Wesentlichen verwende ich \ifglshassymbol hier für die Unterscheidung Eintrag oder Unterüberschrift, wobei ich davon ausgehe, daß für alle Einträge auch ein Symbol definiert ist. Wenn das bei Dir anders ist, kannst Du ggf. die Unterscheidung hier rausnehmen und \subglossentry analog zu \glossentry umdefinieren.
      \global\subheadfalse
      \glossentrysymbol{##1}%
    }{%
      \global\subheadtrue
      \glstarget{##1}{%
        \rule{0pt}{2pc}% (rais) die \rule sorgt hier für den Abstand nach oben
        \makebox[0pt][l]{\glossentryname{##1}}% (rais) die \makebox sorgt hier dafür, daß die Spalte `Symbol' nicht unnötig in die Breite gezogen wird.
      \hphantom{\textbf{Symbol}}% (rais) der \hphantom sorgt hier dafür, daß die Unterüberschriften linksbündig unter der Spaltenüberschrift `Symbol' erscheinen (und nicht `mit dem linken Fuß' daruner zentriert werden)
    }} &
    \glsentryuseri{##1} &
    \glossentrydesc{##1}\glspostdescription & ##2
    \ifsubhead
      \tabularnewline[1pc]% (rais) Stellschraube für den Abstand nach der Unterüberschrift
      \bfseries Symbol & \bfseries Einheit & \bfseries Bescheibung\tabularnewline[1pc]% (rais) Stellschraube für etwaigen Abstand nach der, hmm, Unterunterüberschrift
    \else
      \tabularnewline
    \fi
  }%
  \renewcommand{\subglossentry}[3]{% (rais) siehe auch `texdoc glossaries-user', speziell ``Creating a completely new style''
     \glossentry{##2}{##3}% (rais) siehe oben.
  }%
  \renewcommand*{\glsgroupskip}{\relax}
}

\makeglossaries
 

%Einträge Symbolverzeichnis

\newglossaryentry{romanletter}{name={\textbf{\large Lateinische Buchstaben}},description={}}
\newglossaryentry{greekletter}{name={\textbf{\large Griechische Buchstaben}},description={}}

\newglossaryentry{dichte}{
name=Dichte,  
description={Verhältnis von Gewicht zu Volumen},
symbol={$\rho$},
type=formel,
user1={km/m3},
parent=greekletter
}

\newglossaryentry{ct}{
name=ct,  
description={Schubbeiwert},
symbol={$c_T$},
type=formel,
user1={m},
parent=romanletter
}
 
\begin{document}
\glssymbol{dichte}
\glssymbol{ct}

\newpage
\printglossary[title=Formelzeichen,type=formel,style=mytab]
\end{document}
MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Beitrag von kannstmasehn »

Super! Vielen vielen Dank dafür. Ich habe es inzwischen auf eine andere Weise hinbekommen, aber das war eher gepfusche als etwas vernünftiges, aber deine Variante ist um Weiten besser! Nochmals danke!

Wie kann ich den Abstand von 'Formelzeichen' zu 'Griechische Buchstaben' verkleinern? Oder ist der fest? Es soll ein nahezu gleicher Abstand sein, wie beim Inhaltsverzeichnis zwischen der Überschrift und dem ersten Kapitel. Ist das möglich?

Viele Grüße

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

kannstmasehn hat geschrieben: Wie kann ich den Abstand von 'Formelzeichen' zu 'Griechische Buchstaben' verkleinern? Oder ist der fest?
dafür hatte ich zwar den über eine \rule eingebauten Abstand vorgesehen (0pt breit 2pc hoch), aber dieser Abstand wirkt sich auch auf `Lateinische Buchstaben' aus.
Vllt wäre es günstiger, zwei getrennte Verzeichnisse dafür zu verwenden:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage[
nonumberlist, %keine Seitenzahlen anzeigen
acronym,      %ein Abkürzungsverzeichnis erstellen
%toc,          %Einträge im Inhaltsverzeichnis
section=subsection,  %im Text auf subsection-Ebene erscheinen
sanitize={symbol=false} %
]
{glossaries}
 
\renewcommand*{\glspostdescription}{}

%Neuer Eintragstyp
\newglossary[fog]{formel}{foi}{foo}{Griechische Buchstaben}
\newglossary[flg]{lformel}{fli}{flo}{Lateinische Buchstaben}
%Ein neuer Verzeichnisstil der auch die Einheit mit ausgibt
\newglossarystyle{mytab}{%
 % Verzeichnis wird ein 'longtable'  mit 5 Spalten
% (rais) von denen Du nur 4 nutzt...
 \renewenvironment{theglossary}%  
  {\begin{longtable}[l]{@{}ccp{\glsdescwidth}p{\glspagelistwidth}@{}}}% (rais) ...entsprechend hab ich das hier auf 4 Spalten gekürzt.
  {\end{longtable}}%  
 % Kopf der Tabelle
 \renewcommand*{\glossaryheader}{% (rais) nun dann doch
  \bfseries Symbol & \bfseries Einheit & \bfseries Beschreibung\tabularnewline
  \endhead
}
 % Kein Abstand zwischen Gruppen
  \renewcommand*{\glsgroupheading}[1]{}%
  \renewcommand{\glossentry}[2]{%
    \glsentryitem{##1}%
    \ifglshassymbol{##1}{% (rais) siehe `texdoc glossaries-user'.
      \glossentrysymbol{##1}%
    }{%
      \glstarget{##1}{\glossentryname{##1}}% (rais) gekürzt
    } &
    \glsentryuseri{##1} &
    \glossentrydesc{##1}\glspostdescription & ##2\tabularnewline
  }%
  \renewcommand{\subglossentry}[3]{% (rais) siehe auch `texdoc glossaries-user', speziell ``Creating a completely new style''
     \glossentry{##2}{##3}% (rais) siehe oben.
  }%
  \renewcommand*{\glsgroupskip}{\relax}
}

\makeglossaries
 

%Einträge Symbolverzeichnis

\newglossaryentry{dichte}{
name=Dichte,  
description={Verhältnis von Gewicht zu Volumen},
symbol={$\rho$},
type=formel,
user1={km/m3}
}

\newglossaryentry{ct}{
name=ct,  
description={Schubbeiwert},
symbol={$c_T$},
type=lformel,
user1={m}
}
 
\begin{document}
\glssymbol{dichte}
\glssymbol{ct}

\addsec{Formelzeichen}
\printglossary[type=formel,style=mytab]
\printglossary[type=lformel,style=mytab]
\end{document}
Achte dabei darauf, daß ich die Klasse geändert habe (die Standardklassen unterstützen Dinge wie \addsec nicht), toc nun nicht mehr anzugeben ist (sonst landen beide Verzeichnisse im TOC und das wolltest Du ja nich) und daß `Formelzeichen' nun einfach als unnummerierter Abschnitt vor den \printglossary-Befehlen gesetzt wird (besagter \addsec).

Was Du nun zwischen diesem \addsec und dem ersten \printglossary treibst, liegt völlig in Deiner Hand.;)

MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

kannstmasehn
Forum-Century
Forum-Century
Beiträge: 165
Registriert: Mo 5. Mai 2014, 16:55

Beitrag von kannstmasehn »

Ok verstehe. So ähnlich habe ich das auch gelöst. Die Option mit dem Abstand hatte ich gesehn, mir ist nur nicht aufgefallen, dass damit beide Abstände geändert werden.

Danke für die Mühe, ein schönes Restwochenende wünsche ich!

Antworten