Benutzerdefinierter Glossarstil: Machen Sie das Glossar so breit wie \textwidth

Benutzerdefinierter Glossarstil: Machen Sie das Glossar so breit wie \textwidth

ACHTUNG: Dies ist eine Folgefrage zuLangform-Einträge (wie bei der ersten Verwendung) von Einträgen anzeigen, die keine Akronyme sind.

AlsmafpWie im anderen Beitrag vorgeschlagen, habe ich meine eigenen Glossarstile (zusammen mit einigen Spaltenspezifizierern) definiert, um das Einheitenproblem (mithilfe des user1Felds) anzugehen. Jetzt sieht meine Definition so aus (Stil tabx3colwird im ersten Glossar verwendet und tabx4colim zweiten):

\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\newglossarystyle{tabx3col}{%
 % put the glossary in a longtable environment:
 \renewenvironment{theglossary}%
  {\begin{longtable}{L{0.2\textwidth}L{0.6\textwidth}R{0.2\textwidth}}}%
  {\end{longtable}}%
 % Set the table's header:
 \renewcommand*{\glossaryheader}{}%
 % No heading between groups:
  \renewcommand*{\glsgroupheading}[1]{}%
 % Main (level 0) entries displayed in a row:
  \renewcommand*{\glossaryentryfield}[5]{%
    \glstarget{##1}{\textbf{##2}}% Name
    & ##3% Description
    & ##5% Page list
    \\% end of row
  }%
 % Sub entries treated the same as level 0 entries:
 %\renewcommand*{\glossarysubentryfield}[6]{%
  %\glossaryentryfield{##2}{##3}{##5}{##6}}%
 %% Nothing between groups:
 %\renewcommand*{\glsgroupskip}{}%
}


\newglossarystyle{tabx4col}{%
 % put the glossary in a longtable environment:
 \renewenvironment{theglossary}%
  {\begin{longtable}{L{0.1\textwidth}L{0.1\textwidth}p{0.55\textwidth}R{0.2\textwidth}}}%
  {\end{longtable}}%
 % Set the table's header:
 \renewcommand*{\glossaryheader}{}%
 % No heading between groups:
  \renewcommand*{\glsgroupheading}[1]{}%
 % Main (level 0) entries displayed in a row:
  \renewcommand*{\glossaryentryfield}[5]{%
   \glstarget{\textbf{##1}}{\textbf{##2}}% Name
   & $[$\glsentryuseri{##1}$]$% Units
   & ##3% Description
   & ##5% Page list
    \\% end of row
  }%
 % Sub entries treated the same as level 0 entries:
 %\renewcommand*{\glossarysubentryfield}[6]{%
  %\glossaryentryfield{##2}{##3}{##5}{##6}}%
 %% Nothing between groups:
 %\renewcommand*{\glsgroupskip}{}%
}

Dadurch erhalte ich eine Ausgabe wie im Bild unten dargestellt: Screenshot der Ausgabe

Ich bearbeite den Screenshot mit einigen grauen Linien für den Text, den ich ausrichten möchte (unter Verwendung des RSpaltenbezeichners für Spalten mit fester Breite und Raggedright, die in der Seitenliste verwendet werden). Hauptsächlich möchte ich das gesamte Glossar haben \textwidth. Ich dachte, indem ich jede Spalte von der Variablen abhängig mache \textwidthund die Werte bis 1 addiere, würde ich eine Tabelle erhalten, die letztendlich so breit ist wie die Überschrift. Ich habe auch versucht, tabularx als Tabellenumgebung zu verwenden, was fehlschlug (obwohl ich die Makrobefehle verwendet habe, z. B. \tabularx \endtabularx ). Ich habe ein MWE kompiliert (http://pastebin.com/McqsTPga, vielleicht nicht mehr so ​​minimal), wo Sie das Problem selbst sehen können.

Es tut mir leid, dass der Beitrag etwas lang ist, aber das geht mir wirklich auf die Nerven.

Antwort1

"Ich dachte, wenn ich jede Spalte von der Variable abhängig mache \textwidthund die Werte bis 1 addiere, bekomme ich eine Tabelle, die letztendlich so breit ist wie die Überschrift." Das stimmt fast, aber Sie haben den Spaltenabstand vergessen, der automatisch hinzugefügt wird. Den können Sie @{}in der Spaltenangabe unterdrücken. Wenn ich Ihre Tabellen mit ansehe

\newglossarystyle{tabx3col}{%
 \renewenvironment{theglossary}%
  {\begin{longtable}{@{}p{0.2\textwidth}@{}p{0.6\textwidth}@{}>{\raggedleft}p{0.2\textwidth}@{}}}%
  ...

Und

\newglossarystyle{tabx4col}{%
 \renewenvironment{theglossary}%
  {\begin{longtable}{@{}p{0.12\textwidth}@{}p{0.08\textwidth}@{}p{0.6\textwidth}@{}>{\raggedleft}p{0.2\textwidth}@{}}}%
  ...

die Ausrichtung ist wie gewünscht. Besser ist es vielleicht, den Spaltenabstand vor und nach der Beschreibung nicht zu unterdrücken. Dann muss man die Beschreibungsspalte (oder jede andere Spalte) um 24pt schmaler machen.

Antwort2

Mit \usepackage{calc}können Sie Ihre longtableAusrichtung festlegen als

\begin{longtable}{
  @{} % suppress the space at the left
  L{0.1\textwidth-\tabcolsep}
  L{0.1\textwidth-2\tabcolsep}
  p{0.6\textwidth-2\tabcolsep}
  R{0.2\textwidth-\tabcolsep}
  @{} % suppress the space at the right
}

Möglicherweise möchten Sie die Spaltenzwischenräume in der breitesten Spalte entfernen. In diesem Fall

\begin{longtable}{
  @{} % suppress the space at the left
  L{0.1\textwidth}
  L{0.1\textwidth}
  p{0.6\textwidth-6\tabcolsep}
  R{0.2\textwidth}
  @{} % suppress the space at the right
}

Vor und nach jeder Spalte befindet sich ein \tabcolsepbreiter Leerraum. Sie haben also vier Spalten, sodass nach dem Entfernen der Leerräume ganz links und ganz rechts noch sechs übrig bleiben.

verwandte Informationen