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, 17:48

Bettina's gravatar image

Bettina
65541923
Akzeptiert: 83%

bearbeitet 20 Sep '13, 08:27


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:

Open in Online-Editor
\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.

Open in Online-Editor
\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:

Open in Online-Editor
\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, 17:59

Clemens's gravatar image

Clemens
19.0k113060

bearbeitet 22 Jul, 08:13

@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, 09:46) dzaic
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×8
×3

Frage gestellt: 19 Sep '13, 17:48

Frage wurde angeschaut: 2,917 Mal

Zuletzt aktualisiert: 22 Jul, 09:49