acro - Verzeichnis linksbündig ausrichten

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


Jonny

acro - Verzeichnis linksbündig ausrichten

Beitrag von Jonny »

Hallo!

Basierend auf dieser Frage:

acro-paket-abkuerzungen-in-liste-fett-t20702.html

habe ich mein Abkürzungsverzeichnis erstellt. Da es allerdings länger als eine Seite ist, habe ich statt table, longtable verwendet.

Leider funktioniert mit longtable die Lösung mit

Code: Alles auswählen

table-spec= @{}>{\bfseries}lp{.7\linewidth}@{}
nicht mehr.

Hier das vollständige Beispiel (aufbauend auf dem des verlinkten Threads):

Code: Alles auswählen

\documentclass[10pt,
			   paper=a5,
			   ngerman,
			  ]{scrreprt}

\usepackage{babel} 
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{array} 
\usepackage[sort=true]{acro} 
\usepackage{longtable}

\DeclareAcroListStyle {tabular} {table} 
  {
    table=longtable, 
    table-spec= @{}>{\bfseries}lp{.7\linewidth}@{}
  } 


\acsetup{list-style = tabular, 
         list-heading = addchap} 


\DeclareAcronym{c}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{a}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{d}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{e}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{f}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{g}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{h}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{i}{ 
   short = A, 
   long  = Der Buchstabe A 
}
\DeclareAcronym{j}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{k}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{l}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{m}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{n}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{o}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{aa}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{bb}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{cc}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{dd}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{ee}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{ff}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{gg}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{hh}{ 
   short = A, 
   long  = Der Buchstabe A 
}
\DeclareAcronym{ii}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{jj}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{kk}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{ll}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{mm}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{nn}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{oo}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{pp}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{qq}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{1}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{2}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{3}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{4}{ 
   short = A, 
   long  = Der Buchstabe A 
} 
\DeclareAcronym{5}{ 
   short = C, 
   long  = Der Buchstabe C 
} 
\DeclareAcronym{6}{ 
   short = A, 
   long  = Der Buchstabe A 
} 





\begin{document} 


\printacronyms 

\clearpage


\ac*{c} \ac{a} \ac{d}\ac{e} \ac{f} \ac{g} \ac{h} \ac{i} \ac{j}\ac{k} \ac{l} \ac{m} \ac{n} \ac{o} 
\ac{aa} \ac{bb}\ac{cc} \ac{dd} \ac{ee} \ac{ff} \ac{gg} \ac{hh}\ac{ii} \ac{jj} \ac{kk} \ac{ll} \ac{mm} ‏\ac{nn}
\ac{oo} \ac{pp} ‏\ac{qq} \ac{1} \ac{2} \ac{3} \ac{4}\ac{5} \ac{6}



\end{document}
Danke!

LG
Jonny

Gast

Beitrag von Gast »

longtable zentriert die Tabelle automatisch. Wenn die Tabelle also schmaler als der Satzspiegel ist, wird sie nicht linksbündig erscheinen. Leider kennt acro derzeit AFAIK keinen Stil für die Verwendung von tabularx oder xltabular. Sonst könnte man für de zweite Spalte einfach einen X-Spalte verwenden und die Tabelle auf Satzspiegelbreite bringen. Zwar kennt eine longtable Option l, um sie linksbündig zu setzen, allerdings sehe ich gerade keine Möglichkeit diese bei acro zu setzen. So bleibt als Trick nur \LTright umzudefinieren (siehe longtable-Anleitung):

Code: Alles auswählen

\documentclass[10pt,
            paper=a5,
            ngerman,
           ]{scrreprt}

\usepackage{babel}
\usepackage[utf8]{inputenc}% nur bei veralteten TeX-Distributionen wie auf Overleaf notwendig
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage[sort=true]{acro}
\usepackage{longtable}

\DeclareAcroListStyle {longtable} {table}
  {
    table=longtable,
    table-spec= @{}>{\bfseries}lp{.7\linewidth}@{}
  }


\acsetup{list-style = xltabular,
         list-heading = addchap}


\DeclareAcronym{c}{
   short = C,
   long  = Der Buchstabe C
}

\begin{document}


{\let\LTright=\hfill
\printacronyms}

\clearpage


\ac*{c}
\end{document}
Da zum Zeigen des Problems keine mehrseitige Tabelle notwendig ist, habe ich das Beispiel mal deutlich gekürzt.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2160
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

@Gast

Sollte der Option list-style nicht der zuvor bestimmte Listenstil longtable zugewiesen werden?

\let\LTright=\hfill gibt bei Dir keine Fehlermeldung aus?.

@Jonny

Scheinbar funktioniert es auch mit der Option before:

Code: Alles auswählen

\DeclareAcroListStyle{longtable}{table}{
    before=\setlength{\LTleft}{0pt},
    table=longtable,
    table-spec= @{}>{\bfseries}lp{.7\linewidth}@{}
}

\acsetup{
    list-style = longtable,
    list-heading = addchap
}

Gast

Beitrag von Gast »

Bartman hat geschrieben:@Gast

Sollte der Option list-style nicht der zuvor bestimmte Listenstil longtable zugewiesen werden?
Uups. Ja. Und deshalb gibt es auch keine Fehlermeldung.

Gast

Beitrag von Gast »

Es ist übrigens kein großes Problem das acro-list Template tabe aus acro zu einem Template zu erweitern, das für tabularx oder xltabular geeignet ist:

Code: Alles auswählen

\documentclass[10pt,
            paper=a5,
            ngerman,
           ]{scrreprt}

\usepackage{babel}
\usepackage[utf8]{inputenc}% nur bei veralteten TeX-Distributionen wie auf Overleaf notwendig
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage[sort=true]{acro}
\usepackage{xltabular}

\ExplSyntaxOn
\dim_new:N \l__acro_list_table_width_dim

\DeclareTemplateInterface {acro-list} {xtable} {2}
  {
    table       : tokenlist = tabularx ,
    table-spec  : tokenlist = @{}lX@{} ,
    foreign-sep : tokenlist = {~} ,
    reverse     : boolean   = false ,
    before      : tokenlist = ,
    after       : tokenlist = ,
    width       : length    = \linewidth
  }

\DeclareTemplateCode {acro-list} {xtable} {2}
  {
    table       = \l__acro_list_table_tl      ,
    table-spec  = \l__acro_list_table_spec_tl ,
    foreign-sep = \l__acro_foreign_sep_tl ,
    reverse     = \l__acro_list_reverse_long_extra_bool ,
    before      = \l__acro_list_before_tl ,
    after       = \l__acro_list_after_tl ,
    width       = \l__acro_list_table_width_dim ,
  }
  {
    \AssignTemplateKeys
    \acro_activate_hyperref_support:
    \bool_if:NTF \l__acro_list_reverse_long_extra_bool
      {
        \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
          { ##1 & ##3 ##2 ##4 \tabularnewline }
      }
      {
        \cs_set_protected:Npn \acro_print_list_entry:nnnn ##1##2##3##4
          { ##1 & ##2 ##3 ##4 \tabularnewline }
      }
    \acro_build_list_entries:Nnn \l__acro_list_entries_tl {#1} {#2}
    \use:x
      {
        \exp_not:V \l__acro_list_before_tl
        \exp_not:N \begin { \exp_not:V \l__acro_list_table_tl }
          { \exp_not:V \l__acro_list_table_width_dim }
          { \exp_not:V \l__acro_list_table_spec_tl }
        \exp_not:V \l__acro_list_entries_tl
        \exp_not:N \end { \exp_not:V \l__acro_list_table_tl }
        \exp_not:V \l__acro_list_after_tl
      }
  }
    

\DeclareAcroListStyle { tabularx } { xtable }
  { table = tabularx }

\DeclareAcroListStyle { xltabular } { xtable }
  { table = xltabular }

\ExplSyntaxOff

\DeclareAcroListStyle{xltabularbf}{xtable}{%
  table = xltabular,
  table-spec = @{}>{\bfseries}lX@{}
}

\acsetup{list-style = xltabularbf,
         list-heading = addchap}


\DeclareAcronym{c}{
   short = C,
   long  = Der Buchstabe C
}

\begin{document}

\printacronyms

\clearpage


\ac*{c}
\end{document}
Der Code zwischen ExplSyntaxOn und ExplSyntaxOff ist größtenteils den entsprechenden Anweisungen für das Template table aus acro.sty entnommen. Es wurde lediglich um die Variable width für die gewünschte Breite der Tabelle erweitert. Entsprechend wurde tabular durch tabularx und longtable durch xltabular ersetzt. Außerdem wurde table-spec geändert und verwendet nun eine X-Spalte statt einer p-Spalte und wurde auch gleich um @{} ergänzt.

Jonny

Beitrag von Jonny »

Vielen Dank für eure Hilfe!

Sorry wegen dem langen Beispiel, ich dachte es sei wichtig, dass der Seitenumbruch auch tatsächlich auftaucht (für eine Lösung).

Umgesetzt habe ich bisher die Lösung von Bartman. Welche wäre denn die "beste" Alternative?

LG
Jonny

Gast

Beitrag von Gast »

Die Verwendung von X-Spalten hat den Vorteil, dass diese sich automatisch an die verfügbare Breite (abhängig von der Breite der ersten Spalte und der Breite des Satzspiegels) anpassen. Siehe dazu sowohl die Anleitung zu xltabular als auch zu tabularx.

Jonny

Beitrag von Jonny »

Hi,

nachdem ich jetzt ein bisschen getestet habe, ist mir noch folgendes Problem aufgefallen (weiß net, ob ich dafür jetzt extra einen Thread aufmachen muss):

Da das Verzeichnis ja in einer unsichtbaren longtable steht, bekomme ich die hyperref Warnung "warning (pdf backend): ignoring duplicate destination with the name 'table.0.1"

Wie kann ich das denn beheben, denn anscheinend versucht hyperref die Tabelle des Abkürzungsverzeichnisses auch zu referenzieren.

Danke!

Jonny

Beitrag von Jonny »

Ich möchte ja nicht ungeduldig erscheinen, aber hat niemand eine Idee?

Gast

Beitrag von Gast »


Antworten