Glossaries-Style super abändern

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


meep.meep
Forum-Anfänger
Forum-Anfänger
Beiträge: 45
Registriert: Do 8. Apr 2010, 10:36

Glossaries-Style super abändern

Beitrag von meep.meep »

Hallo zusammen,

ich möchte gerne den Stil meines Glossars abwandeln. Ich habe mich bereits durch die Dokumentation gearbeitet, komme aber nicht zur Lösung. Mein Problem ist wie folgt:

Ich möchte gerne einen auf Tabellen basierenden Style (hier: super) für meine Verzeichnisse anwenden. In diesen Styles ist nun die Breite der ersten Spalte (z.B. Abkürzung) variabel und die der zweiten Spalte (Beschreibung) festgelegt. Was ich nun möchte, ist, dass für den Fall einer langen Beschreibung, die einen Zeilenumbruch im Glossar erfordert, die gesamte Textbreite für die zweite Spalte ausgenutzt wird, während sich die erste Spalte weiterhin an dem längsten Eintrag hierin bemisst.

Was ich mir selbst erarbeiten konnte: Die zweite Spalte ist \glsdescwidth breit.
\newglossarystyle{super}{%
 \renewenvironment{theglossary}%
 {\tablehead{}\tabletail{}%
 \begin{supertabular}{lp{\glsdescwidth}}}%
 {\end{supertabular}}%
 \renewcommand*{\glossaryheader}{}%
 \renewcommand*{\glsgroupheading}[1]{}%
 \renewcommand*{\glossaryentryfield}[5]{%
 \glstarget{##1}{##2} & ##3\glspostdescription\space ##5\\}%
 \renewcommand*{\glossarysubentryfield}[6]{%
 & \glstarget{##2}{\strut}##4\glspostdescription\space ##6\\}%
 \renewcommand*{\glsgroupskip}{ & \\}}
Dies wird in den Tabellen-basierten Styles wiederum definiert als
 \@ifundefined{glsdescwidth}{% 
 \newlength\glsdescwidth 
 \setlength{\glsdescwidth}{0.6\hsize}
 }{} 


Sie ist also statisch. Ich habe bereits versucht, einen neuen Glossary-Style auf Basis von super zu erstellen, mit supertabular* und als Tabellenbreite \textwidth, aber dies funktioniert nicht. ich bin auch auf das Paket ltxtable gestossen, bin aber überfragt, ob und wie man es für einen Glossar-Stil verwenden kann.

Mein (hoffentlich den Anforderungen entsprechendes) Minimalbeispiel lautet wie folgt:
\documentclass[12pt,ngerman,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[acronym,nonumberlist]{glossaries}


\makeglossaries
%Diese Befehle sortieren die Einträge in den einzelnen Listen:
%makeindex -s datei.ist -t datei.alg -o datei.acr datei.acn <--- Abkürzungsverzeichnis
%makeindex -s datei.ist -t datei.glg -o datei.gls datei.glo
%siehe auch : http://ewus.de/tipp-1029.html
\glossarystyle{super}

\begin{document}
%-----------Die Glossary-Einträge-----------------
\newacronym{estg}{EStG}{Einkommensteuergesetz, eine längere Beschreibung um zu testen, wie der Zeilenumbruch funktioniert}
\newacronym{lang}{lange Abkürzung}{Lange Abkürzung zum Testen}
\glsunset{estg}\glsunset{lang}
%---------Die Druck-Befehle-----------------------
\printglossaries

\vspace{5ex}
Diese Arbeit beschäftigt sich oft mit dem \gls{estg}. Ich nutze die Abkürzung: \gls{lang}.
\end{document}
Es wäre super, falls jemand die Lösung für mein Problem weiss, bzw. mir sagen kann, ob es überhaupt eine Lösung gibt. Im Notfall kann ich natürlich nach Eingabe aller Einträge die Breite der ersten Spalte ausmessen und die Breite der zweiten Spalte manuell optimieren. Ich suche aber gerade nach der eleganteren Lösung auf der Programmier-Ebene.

Beste Grüße, Anja

meep.meep
Forum-Anfänger
Forum-Anfänger
Beiträge: 45
Registriert: Do 8. Apr 2010, 10:36

Beitrag von meep.meep »

Ich habe es geschafft, mir selbst eine Lösung zusammenzubasteln. Sie nutzt das autolabeling-Paket (siehe: http://www.golatex.de/labeling-umgebung ... t4302.html und der Stil ist jetzt Listen basiert. Hier das Minimalbeispiel:
\documentclass[12pt,ngerman]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{autolabeling}
\usepackage[ngerman]{babel}
\usepackage[acronym,nonumberlist]{glossaries}

\newglossarystyle{list_auto}{%
 \renewenvironment{theglossary}%
 {\begin{autolabeling}[]}{\end{autolabeling}}%
 \renewcommand*{\glossaryheader}{}%
 \renewcommand*{\glsgroupheading}[1]{}%
\renewcommand*{\glossaryentryfield}[5]{%
\item[\glstarget{##1}{##2}] ##3\glspostdescription\space ##5}%
\renewcommand*{\glossarysubentryfield}[6]{%
 \glstarget{##2}{\strut}##4\glspostdescription\space ##6.}%
 \renewcommand*{\glsgroupskip}{\indexspace}}%

\makeglossaries
%makeindex -s datei.ist -t datei.alg -o datei.acr datei.acn <--- Abkürzungsverzeichnis
%makeindex -s datei.ist -t datei.glg -o datei.gls datei.glo
%siehe auch : http://ewus.de/tipp-1029.html
\glossarystyle{list_auto}

\begin{document}
\newacronym{kurz}{Abk.}{Eine längere Beschreibung einer Abkürzung, um zu testen, wie der Zeilenumbruch funktioniert}
\newacronym{lang}{lange Abkürzung}{Lange Abkürzung zum Testen}
\glsaddall
\printglossaries
\newpage
\end{document}
Bei der Lösungssuche hat mich der Autor von ltxtable auch darauf aufmerksam gemacht, dass es ähnliche Pakete für lange Tabellen gibt, die keine Dateieinbindung erfordern. Er hat diese Lösung damals wohl aufgrund der begrenzten Speicherkapazität von TeX-Systemen gewählt. Bei Interesse finden sich die verschiedenen Lösungen hier: http://www.ctan.org/tex-archive/help/Ca ... longtables

Sven

printonlyused

Beitrag von Sven »

Ich benutze genau dein Beispiel und funktioniert prima. Gibt es eine Möglichkeit das nur die auch verwendeten Abkürzung und Symbole ausgewiesen werden? Also so was ähnliches wie:

\usepackage[printonlyused] {acronym}

eine kurze Antwort wäre super

meep.meep
Forum-Anfänger
Forum-Anfänger
Beiträge: 45
Registriert: Do 8. Apr 2010, 10:36

Beitrag von meep.meep »

Du entfernst
\glsaddall 
:)

Antworten