Untertitelpaket nicht mit Threeparttablex-Paket kompatibel?

Untertitelpaket nicht mit Threeparttablex-Paket kompatibel?

Ich versuche, so etwas zu erreichen: Fußnote in Tabelle mit Hyperlinks

Außer dass ich das Caption-Paket zusätzlich verwende, das ich für andere Dinge brauche. Die beiden Ansätze scheinen nicht gut zusammenzupassen und ich weiß nicht, wie ich das umgehen soll. Die Warnung, die ich bekomme, ist die folgende:

Warnung zum Pakettitel: \labelohne entsprechende \captionEingabezeile 32. Eine Erklärung finden Sie in der Titelpaketdokumentation.

Und die Verweise werden nicht aufgelöst (an ihrer Stelle erscheint das gefürchtete ??). Wenn ich versuche, \captionvor den \labelEinträgen ein hinzuzufügen \tnotex, versucht es im Grunde nur, derselben Tabelle mehrere Überschriften in meiner Überschriftenschriftart hinzuzufügen.

\documentclass[letterpaper]{article}

% This package allows for footnoting within tables
\usepackage{enumitem,booktabs,cfr-lm}
\usepackage{tabularx}
\usepackage[referable]{threeparttablex}
\renewlist{tablenotes}{enumerate}{1}
\makeatletter
\setlist[tablenotes]{label=\tnote{\alph*}, ref=\alph*, itemsep=\z@, topsep=\z@skip, partopsep=\z@skip,parsep=\z@,itemindent=\z@,labelindent=\tabcolsep,labelsep=.2em,leftmargin=*,align=left,before={\footnotesize}}
\makeatother

\usepackage{caption}

\begin{document}

\begin{table}[ht]       
    \centering            
    \begin{threeparttable}  
        \begin{tabular}{|l|c|c|}
            \hline
            A & 1 & 2 \tnote{1} \\
            \hline
            B & 2 & 1 \\
            \hline
            C & 3\tnotex{tn:2} & 3 \\
            \hline
            Line & producing & space. \\
            \hline
        \end{tabular}
        \begin{tablenotes}
            \item[1] This is the first note.
            \item[2] \label{tn:2} This is the hyperlinked note.
        \end{tablenotes}      
    \end{threeparttable}
    \caption{A table caption.}
\end{table}% 

\end{document}

Es funktioniert auch ohne das Untertitelpaket, aber ich verwende es, um die Schriftart und Farbe der Untertitel in meinem Dokument festzulegen. Kennt jemand einen Workaround?

Antwort1

Das PaketdreiteiligestischxLadungendreiteiliger Tischund kann sicherlich, wie aus anderen Antworten hervorgeht, einschließlich der von der Frage verlinkten, verwendet werden, um die Standardumgebung tablenotesfür die Verwendung mit tabularusw. anzupassen und ist nicht auf die Verwendung mit beschränkt, longtablewie in einer anderen Antwort vorgeschlagen.

Tatsächlich funktioniert der Code, den Sie haben, bei mir mit nur ein paar kleinen Änderungen einwandfrei. Sie definieren ihn neu, tablenotesumautomatischAufzählung, aber diese dann mit fest codierten Beschriftungen überschreiben. Das macht keinen Sinn. Wenn Sie die nicht empfohlenen und nicht bewährten arabischen Ziffern als Markierungen verwenden möchten, ändern Sie einfach die Anpassung tablenotesentsprechend.

\setlist[tablenotes]{label=\tnote{\arabic*}, ref=\arabic*, itemsep=0pt, topsep=0pt, partopsep=0pt ,parsep=0pt, itemindent=0pt, labelindent=\tabcolsep, labelsep=.2em, leftmargin=*, align=left, before={\footnotesize}}

und dann schreiben

    \begin{tablenotes}
      \item This is the first note.
      \item \label{tn:2} This is the hyperlinked note.
    \end{tablenotes}

Wenn Sie lieber schreiben \item[1]etc. möchten, dann definieren Sie die tablenotesUmgebung erst gar nicht neu.

Mit diesen Änderungen und der Hinzufügung von \usepackage{hyperref}funktioniert die als Hyperlink verknüpfte Notiz bei mir einwandfrei:

Tabellennotiz mit Hyperlink

Vollständiger Code:

\documentclass[letterpaper]{article}
\usepackage{enumitem,cfr-lm}% you aren't using booktabs
\usepackage{tabularx}
\usepackage[referable]{threeparttablex}
\renewlist{tablenotes}{enumerate}{1}
\setlist[tablenotes]{label=\tnote{\arabic*}, ref=\arabic*, itemsep=0pt, topsep=0pt, partopsep=0pt ,parsep=0pt, itemindent=0pt, labelindent=\tabcolsep, labelsep=.2em, leftmargin=*, align=left, before={\footnotesize}}

\usepackage{hyperref}
\usepackage{caption}

\begin{document}
\begin{table}[ht]
  \centering
  \begin{threeparttable}
    \begin{tabular}{|l|c|c|}
      \hline
      A & 1 & 2 \tnote{1} \\
      \hline
      B & 2 & 1 \\
      \hline
      C & 3\tnotex{tn:2} & 3 \\
      \hline
      Line & producing & space. \\
      \hline
    \end{tabular}
    \begin{tablenotes}
      \item This is the first note.
      \item \label{tn:2} This is the hyperlinked note.
    \end{tablenotes}
  \end{threeparttable}
  \caption{A table caption.}
\end{table}
\end{document}

Antwort2

Dies ist zunächst einmalnichteine Inkompatibilität zwischen captionund threeparttablexPaket. Das captionPaket gibt nur einen Hinweis darauf, dass hier etwas schief läuft, und damit hat es recht.

Beginnen wir aber zunächst mit der Standardimplementierung von \item, die von LaTeX2e selbst angeboten wird:

\def\@item[#1]{%
  ...
  \if@noitemarg
    \@noitemargfalse
    \if@nmbrlist
      \refstepcounter\@listctr
    \fi
  \fi
  ...}

Wie man hier sehen kann, wird nur dann eine Referenz erzeugt (die später \itemverwendet werden kann ), wenn die Liste nummeriert ist und ohne optionales Argument verwendet wurde. Insbesondere wird\ļabel\item\item[2]nicht\labelGenerieren Sie eine Referenz, die von und verwendet werden kann \ref. (Dies scheint eine Designentscheidung von Leslie Lamport zu sein.)

Beispieldokument:

\documentclass{article}

\begin{document}

\ref{item1} \ref{item2}

\begin{enumerate}
\item \label{item1} Text
\item[2] \label{item2} Text
\end{enumerate}

\end{document}

Beide \refwerden 1hier ausgegeben (und nicht 1und 2), da nur das \itemoptionale Argument ohne eine Referenz generiert, sodass beide \labeltatsächlich dieselbe Referenz verwenden, die durch das \itemoptionale Argument ohne erstellt wurde.

Das threeparttablexPaket definiert neu \item( tablenotesnur intern), so dass \item[2]eine Referenz erzeugt wird (durch Definition \@currentlabel): [1]

\renewcommand\tablenotes{%
  \let\TPTL@item=\item
  \renewcommand\item[1][]{\TPTL@item[##1]%
    \phantomsection\protected@edef\@currentlabel{##1}}
  ...}

Beispieldokument:

\documentclass[letterpaper]{article}
\usepackage[referable]{threeparttablex}

\begin{document}

\begin{table}[ht]
    \centering
    \begin{threeparttable}
        \begin{tabular}{|l|c|c|}
            \hline
            A & 1 & 2 \tnote{1} \\
            \hline
            B & 2 & 1 \\
            \hline
            C & 3 \tnotex{tn:2} & 3 \\
            \hline
            Line & producing & space. \\
            \hline
        \end{tabular}
        \begin{tablenotes}
            \item[1] This is the first note.
            \item[2] \label{tn:2} This is the hyperlinked note.
        \end{tablenotes}
    \end{threeparttable}
    \caption{A table caption.}
\end{table}

\end{document}

Das Ergebnis ist in Ordnung und \tnotex{tn:2}wird wie erwartet aussehen 2. (Hinweis: Man kann die Verwendung des captionPakets hier problemlos hinzufügen.)

\renewlist{tablenotes}Nun fügen wir die vom Paket angebotenen Nutzungsmöglichkeiten hinzu enumitem:

\documentclass[letterpaper]{article}
\usepackage[referable]{threeparttablex}

\usepackage{enumitem}
\renewlist{tablenotes}{enumerate}{1}

\begin{document}

\begin{table}[ht]
    \centering
    \begin{threeparttable}
        \begin{tabular}{|l|c|c|}
            \hline
            A & 1 & 2 \tnote{1} \\
            \hline
            B & 2 & 1 \\
            \hline
            C & 3 \tnotex{tn:2} & 3 \\
            \hline
            Line & producing & space. \\
            \hline
        \end{tabular}
        \begin{tablenotes}
            \item[1] This is the first note.
            \item[2] \label{tn:2} This is the hyperlinked note.
        \end{tablenotes}
    \end{threeparttable}
    \caption{A table caption.}
\end{table}

\end{document}

Upps, der 2ist jetzt weg. Was ist passiert?

Nun, das \renewlist{tablenotes}{enumerate}{1}definiert die tablenotesUmgebung neu, um enumeratestattdessen eine normale Umgebung zu verwenden. Und wie wir aus dem obigen wissen, wird \item[2]in einer normalen Umgebung überhaupt enumeratekeine Referenz zur Verwendung mit generiert , sodass die von angebotene Funktion eliminiert wird, die tatsächlich eine Referenz generiert. Daher wird jetzt stattdessen die Referenz ausgewählt, die vom letzten Befehl generiert wurde, der eine generiert hat. Aber es gibt keine, also ist die Ausgabe einfach leer. Das Hinzufügen von demonstriert dies:\labelthreeparttablex\item[xxx]\label{tn:2}\section

\documentclass[letterpaper]{article}
\usepackage[referable]{threeparttablex}

\usepackage{enumitem}
\renewlist{tablenotes}{enumerate}{1}

\begin{document}

\section{Test}  % <= This line added

\begin{table}[ht]
    \centering
    \begin{threeparttable}
        \begin{tabular}{|l|c|c|}
            \hline
            A & 1 & 2 \tnote{1} \\
            \hline
            B & 2 & 1 \\
            \hline
            C & 3 \tnotex{tn:2} & 3 \\
            \hline
            Line & producing & space. \\
            \hline
        \end{tabular}
        \begin{tablenotes}
            \item[1] This is the first note.
            \item[2] \label{tn:2} This is the hyperlinked note.
        \end{tablenotes}
    \end{threeparttable}
    \caption{A table caption.}
\end{table}

\end{document}

Jetzt wird ein (anstelle des erwarteten ) \tnotex{tn:2}erzeugt , da (immer noch) nicht auf das , sondern auf den (ersten) Abschnitt verweist.12\label{tn:2}\item[2]

Aber warum gibt das von cfr angebotene Beispieldokument die richtige Ausgabe aus? Weil es \itemohne optionales Argument verwendet wird, und wie wir aus dem Obigen wissen, führt dies immer zu korrekten Referenzen.

Nun zum letzten Teil der Geschichte: Was hat das captionPaket mit all dem zu tun?

Nun, das captionPaket verfügt über eine Funktion, die erkennt, dass innerhalb von , , usw. \labelkeine entsprechende Referenz vorhanden ist . Und da genau dies hier das Problem ist, wird diese Funktion zuschlagen.figuretablethreeparttable

ABER: Ich gebe zu, dass der Inhalt der vom Paket angebotenen Warnmeldung captionhier irreführend ist. Ich habe den Text „\label ohne richtige \caption“ gewählt, da hier normalerweise ein \labelohne führendes Zeichen \captiondas Problem ist. Ich werde ihn in der nächsten Version in den technisch korrekteren Text „\label ohne richtige Referenz“ ändern.

[1] Dies ist eine dokumentierte Funktion des threeparttablexPakets: "Durch die Verwendung der Paketoption »referable« werden wir einige interne Vorgänge der Threeparttable so ändern, dass (a) die manuell angegebenen Notizmarkierungen, die durch \item[...] ausgegeben werden, referenzierbar sind und ..." (Entnommen aus der threeparttablexDokumentation, Stand 22. Mai 2014)

Antwort3

Mein Workaround ist wahrscheinlich nicht genau das, wonach Sie gesucht haben, aber für Tabellen mit Fußnoten halte ich es für eine gute Lösung, eine tabularxUmgebung zu verwenden und die Fußnote in eine letzte pSpalte mit der angegebenen Breite der Tabelle zu setzen. Ich empfehle auch Inline-Aufzählungen als Fußnote, um die volle Breite der Tabelle zu nutzen. \tabrefDas Erscheinungsbild der Referenzen wird mit einem Makro angepasst. Zusammengefasst:

\documentclass[letterpaper]{article}

\usepackage[inline]{enumitem}
\usepackage{booktabs,cfr-lm,tabularx,ragged2e}
\usepackage{caption,hyperref}
\captionsetup[table]{position=top,aboveskip=6pt}

\newcommand*{\tabref}[1]{\textsuperscript{\ref{#1}}}

\begin{document}

\begin{table}[ht]
  \centering
  \captionbox{A table caption made somewhat longer to see the
    effect\label{tab:example}}{%
    \begin{tabularx}{0.5\textwidth}{@{}c>{\hfil}X<{\hfil}c@{}}
      \toprule
      Line & producing & space \\
      \midrule
      A & 1 & 2\tabref{tn:1} \\
      B & 2 & 1 \\
      C & 3\tabref{tn:2} & 3 \\
      \bottomrule
      \multicolumn{3}{@{}p{0.5\textwidth}@{}}{\RaggedRight
        \begin{enumerate*}
        \item  This is the first note.\label{tn:1}
        \item  This is the hyperlinked note\label{tn:2}.
        \end{enumerate*}%
      }%
    \end{tabularx}%
  }%
\end{table}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen