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:
\label
ohne entsprechende\caption
Eingabezeile 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, \caption
vor den \label
Einträ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 tablenotes
für die Verwendung mit tabular
usw. anzupassen und ist nicht auf die Verwendung mit beschränkt, longtable
wie 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, tablenotes
umautomatischAufzä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 tablenotes
entsprechend.
\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 tablenotes
Umgebung erst gar nicht neu.
Mit diesen Änderungen und der Hinzufügung von \usepackage{hyperref}
funktioniert die als Hyperlink verknüpfte Notiz bei mir einwandfrei:
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 caption
und threeparttablex
Paket. Das caption
Paket 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 \item
verwendet werden kann ), wenn die Liste nummeriert ist und ohne optionales Argument verwendet wurde. Insbesondere wird\ļabel
\item
\item[2]
nicht\label
Generieren 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 \ref
werden 1
hier ausgegeben (und nicht 1
und 2
), da nur das \item
optionale Argument ohne eine Referenz generiert, sodass beide \label
tatsächlich dieselbe Referenz verwenden, die durch das \item
optionale Argument ohne erstellt wurde.
Das threeparttablex
Paket definiert neu \item
( tablenotes
nur 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 caption
Pakets 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 2
ist jetzt weg. Was ist passiert?
Nun, das \renewlist{tablenotes}{enumerate}{1}
definiert die tablenotes
Umgebung neu, um enumerate
stattdessen eine normale Umgebung zu verwenden. Und wie wir aus dem obigen wissen, wird \item[2]
in einer normalen Umgebung überhaupt enumerate
keine 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:\label
threeparttablex
\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.1
2
\label{tn:2}
\item[2]
Aber warum gibt das von cfr angebotene Beispieldokument die richtige Ausgabe aus? Weil es \item
ohne 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 caption
Paket mit all dem zu tun?
Nun, das caption
Paket verfügt über eine Funktion, die erkennt, dass innerhalb von , , usw. \label
keine entsprechende Referenz vorhanden ist . Und da genau dies hier das Problem ist, wird diese Funktion zuschlagen.figure
table
threeparttable
ABER: Ich gebe zu, dass der Inhalt der vom Paket angebotenen Warnmeldung caption
hier irreführend ist. Ich habe den Text „\label ohne richtige \caption“ gewählt, da hier normalerweise ein \label
ohne führendes Zeichen \caption
das 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 threeparttablex
Pakets: "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 threeparttablex
Dokumentation, 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 tabularx
Umgebung zu verwenden und die Fußnote in eine letzte p
Spalte 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. \tabref
Das 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}