Ich benutze das Pakte acro innerhalb von ltxtable. Wenn ich den Befehl \acl{} benutze, taucht auch die gewünschte lange Form der Abkürzung in der Tabelle auf, allerdings leider nicht im Abkürzungsverzeichnis. Dieses Verhalten tritt nicht bei den normalen longtables auf. alt text

\documentclass{article}
\usepackage{longtable, ltxtable, booktabs}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä}, germandbls={ß}, Euro={€}}

\usepackage[ngerman]{babel}
\usepackage{acro}[2013/09/02]
\usepackage{filecontents}% Damit können filecontents-Umgebungen auch im Dokument
                         % stehen, was für ltxtable sehr praktisch ist.

\DeclareAcronym{A}{
  short = A,
  long  = AAAAAAA}

\DeclareAcronym{B}{
  short = B,
  long  = BBBBBB}

\begin{document}

\tableofcontents

\acsetup{
  list-type    = table ,
  list-style   = longtable ,
  list-heading = section* ,
  list-table-width = \textwidth-4\tabcolsep-6em
}

\section{ltxtable}

\begin{filecontents}{longTest.tex}
\begin{longtable}{lrXp{2cm}}
\caption{log}\label{tab:log2}\\ 
\toprule
Spalte 1 & Spalte 2 & Spalte 3 & Spalte 4\\             
\midrule
\endfirsthead
\caption[]{log \small(Fortsetzung)}\\
\toprule
Spalte 1 & Spalte 2 & Spalte 3 & Spalte 4\\
\midrule
\endhead
\midrule
\endfoot 
\bottomrule
\endlastfoot 
\acl{A}\\
\acl{B}\\
\end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{longTest.tex}

\printacronyms[name=\section{Abkürzungsverzeichnis}]

\end{document}

gefragt 19 Sep '13, 23:48

Bettina's gravatar image

Bettina
665161923
Akzeptiert-Rate: 25%

bearbeitet 20 Sep '13, 14:27


Antwort für Versionen ab und einschließlich v3.1:

Ganz neue Versionen von acro (ab v3.1) patchen die entsprechenden Tabellen-Umgebungen, so dass alles einfach funktionieren sollte


Ursprüngliche Antwort für Versionen älter als v3.1:

ltxtable hat (wie auch einige andere Tabellenarten, u.a. tabularx und tabu) eine Trial- oder Messphase, währendessen die erste Verwendung der Akronyme stattfindet. Wenn die Tabelle dann letztendlich gesetzt wird, denkt acro längst, dass die Akronyme schon mal verwendet würden. Leider kommt das außerhalb der Tabelle nicht an, da wichtige Infos in der aux-Datei fehlen. Idealerweise würde während der Testphase die Sternvariante \ac* verwendet und während der Setzphase dann wieder \ac. acro bietet dafür ab v2.6 den Befehl \acswitchoff, den man mit einem geeigneten Patch einsetzen kann:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{acro}[2016/07/20] % v2.6 is needed for \acswitchoff
\usepackage{longtable,ltxtable,tabu,tabularx,etoolbox,filecontents}

\acsetup{
  list-style = longtable ,
  list-name = Abkürzungsverzeichnis
}

\DeclareAcronym{a}{
  short = aa ,
  long  = AAAAAAA
}
\DeclareAcronym{b}{
  short = bb ,
  long  = BBBBBBB
}
\DeclareAcronym{c}{
  short = cc ,
  long  = CCCCCCC
}
\DeclareAcronym{d}{
  short = dd ,
  long  = DDDDDDD
}

% ltxtable:
\patchcmd\LTXtable
  {\input}
  {\acswitchoff\input}
  {}
  {}

% tabularx:
\makeatletter
\patchcmd\TX@trial
  {\let\hbadness\@tempcnta}
  {\acswitchoff\let\hbadness\@tempcnta}
  {}
  {}
\makeatother

% tabu:
\providecommand\tabuDisableCommands[1]{}
\tabuDisableCommands{\acswitchoff}

\begin{document}

\ac{a}

\begin{filecontents}{mytable.tex}
  \begin{longtable}{l}
    \ac{b}
  \end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{mytable.tex}

\begin{tabularx}{5cm}{X}
  \ac{c}
\end{tabularx}

\begin{tabu}{X}
  \ac{d}
\end{tabu}

\printacronyms

\end{document}

Für Versionen älter als v2.6:

Der einfachste Workaround: benutze \acuse{A,B} direkt nach \LTXtable{\textwidth}{longTest.tex}. Das markiert die Akronyme als benutzt und macht auch die gewünschten Einträge in der aux Datei.

Für eine automatische Lösung kann man \LTXtable mit etoolbox' \patchcmd patchen um in der Messphase einen Schalter zu setzen, und \acro_check_and_mark_if:nn so umdefieren, dass es nichts macht, wenn der Schalter aktiv ist.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{acro,longtable,ltxtable,etoolbox,filecontents}

\acsetup{
  list-style = longtable ,
  list-name = Abkürzungsverzeichnis
}

\DeclareAcronym{a}{
  short = aa ,
  long  = AAAAAAA
}
\DeclareAcronym{b}{
  short = bb ,
  long  = BBBBBBB
}

\makeatletter
% \LTXtable patchen:
\newif\iftable@measuring
% in der Messphase \table@measuring auf wahr setzen:
\patchcmd\LTXtable
  {\input}
  {\table@measuringtrue\input}
  {}
  {}

% used flag nicht setzen, wenn wir in \LTXtables Messphase sind:  
\ExplSyntaxOn
\cs_set_protected:Npn \acro_check_and_mark_if:nn #1#2
  {
    \iftable@measuring
      \acro_check_acronym:nn {#2} {false} % entspricht Sternvariante
    \else
      \bool_if:nTF {#1}
        { \acro_check_acronym:nn {#2} {false} }
        { \acro_check_acronym:nn {#2} {true} }
    \fi
  }
\ExplSyntaxOff
\makeatother
\begin{document}

\ac{a}

\begin{filecontents}{mytable.tex}
  \begin{longtable}{l}
    \ac{b}
  \end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{mytable.tex}

\printacronyms

\end{document}

alt text


Ergänzung: LTXtable ist nicht die einzige Tabellenvariante, die ihren Inhalt mehrmals setzt (um die Breite etc zu bestimmen), andere sind zum Beispiel tabularx und tabu. tabu hat ein offizielles Interface um Code während der Testphase zu ändern. tabularx setzt während der Testphase \let\hbadness\@tempcnta, worauf man testen kann. Folgender Code (Für acro v2.0 und größer) ermöglicht die Verwendung mit allen drei Tabellen:

\makeatletter
% LTXtable patch damit wir auf die Messphase testen können:
\newif\iftable@measuring
\patchcmd\LTXtable
  {\input}
  {\table@measuringtrue\input}
  {}
  {}

\ExplSyntaxOn
\prg_new_conditional:Npnn \acro_tex_if:nn #1#2 {p,T,F,TF}
  { \use:c { if #1 } #2 \prg_return_true: \else: \prg_return_false: \fi: }

\cs_set_protected:Npn \acro_check_and_mark_if:nn #1#2
  {
    \bool_if:nTF
      {
        #1 ||
        \acro_tex_if_p:nn {table@measuring} {} ||   % LTXtable
        \acro_tex_if_p:nn {x} {\hbadness\@tempcnta} % tabularx
      }
      { \acro_check_acronym:nn {#2} {false} }
      { \acro_check_acronym:nn {#2} {true} }
  }

% tabu:
\providecommand\tabuDisableCommands[1]{}
\tabuDisableCommands
  {
    \cs_set_protected:Npn \acro_check_and_mark_if:nn #1#2
      { \acro_check_acronym:nn {#2} {false} }
  }
\ExplSyntaxOff
\makeatother
Permanenter link

beantwortet 19 Sep '13, 23:59

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 08 Mai '20, 11:33

@Clemens Anbei ein virtueller Danke-Punkt. Tolle Erklärung! Macht es nicht Sinn, diesen Patch direkt in dein Paket zu integrieren und ihn bei den Optionen auswhählbar (z.B. \usepackage[patchXtables]{acro}) zu machen?

(22 Jul '16, 15:46) dzaic

@dzaic das ist inzwischen umgesetzt (gut Ding will Weile haben)

(08 Mai '20, 11:33) cgnieder

@Clemens: Eine Kiste Bier ist hiermit versprochen :-)

(11 Mai '20, 12:46) dzaic
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×12
×3

gestellte Frage: 19 Sep '13, 23:48

Frage wurde gesehen: 10,536 Mal

zuletzt geändert: 11 Mai '20, 12:46