Сноски для таблиц в LaTeX

87

Когда я делаю это \footnote{}для значения в таблице, сноска не отображается. Как мне заставить его появиться? Кроме того, можно ли отобразить его внизу таблицы, а не внизу страницы?

полк
источник

Ответы:

72

Это классическая сложность в LaTeX.

Проблема в том, как сделать разметку с помощью поплавков (рисунков и таблиц, аналогичные объекты) и сносок. В частности, трудно выбрать место для поплавка с уверенностью, что освобождение места для соответствующих сносок не вызовет проблем. Так что стандарт tabularи figureсреда даже не пробуют.

Что ты можешь сделать:

  1. Притворяться. Просто поставьте жестко запрограммированный вертикальный пропуск внизу подписи, а затем напишите сноску самостоятельно (используйте \footnotesizeразмер). Вы также должны сами управлять символами или числами \footnotemark. Просто, но не очень привлекательно, и сноска не появляется внизу страницы.
  2. Используйте tabularx, longtable, threeparttable[x](престижность Иосиф ) или ctableкоторые поддерживают такое поведение.
  3. Управляйте им вручную. Используйте [h!](или [H]с пакетом float), чтобы контролировать, где будет отображаться float, и \footnotetextна той же странице, чтобы разместить сноску там, где вы хотите. Опять же, используйте \footnotemarkдля установки символа. Хрупкий и требует ручной обработки в каждом случае.
  4. footnotesПакет обеспечивает savenoteсреду, которая может использоваться , чтобы сделать это.
  5. Minipage это (код сразу украден , и в этом случае прочтите отказ от ответственности в отношении длинных подписей):
    \ begin {рисунок}
      \ begin {minipage} {\ textwidth}
        ...
        \ caption [Заголовок для LOF]%
          {Настоящая подпись \ footnote {blah}}
      \ end {minipage}
    \ end {рисунок}

Дополнительная ссылка: TeX FAQ пункт Сноски в таблицах .

dmckee --- котенок экс-модератора
источник
texblog.org/2012/02/03/using-footnote-in-a-table мне кажется хорошей альтернативой
Pio
1
@dmckee Возможно ли получить трехчастную таблицу в xtable: что-то вроде print.xtable (df, tabular.environment = "threeparttable")?
Ануша
Ссылка @Pio - отличная ссылка. Использование пакета сносок решило мою проблему.
ИОАНН
Почему самый популярный ответ не находится наверху?
Эдуардо Рейс
60

Лучший способ сделать это без головной боли - использовать \tablefootnoteкоманду из tablefootnoteпакета. Добавьте в свою преамбулу следующее:

\usepackage{tablefootnote}

Он просто работает без дополнительных уловок.

Francesquini
источник
17
В моем случае при использовании \ tablefootnote сноска отображалась, но, к сожалению, на странице, предшествующей странице с таблицей.
Nu-hin
У вас есть пример, чтобы продемонстрировать такое поведение?
Francesquini
2
Есть ли способ разместить сноску на той же странице, что и таблица?
Anusha
3
У меня это не работает во вложенных таблицах (сноски повторяются столько раз, сколько во вложенных таблицах)
fffred
1
Работаю для меня с использованием пакета float и [H] для таблицы, чтобы сноски были на одной странице таблицы.
mao95,
15

Возможно, не очень элегантный метод, который, как мне кажется, является всего лишь вариантом того, что говорили некоторые другие люди, - это просто его жестко закодировать. Во многих журналах есть шаблоны, которые позволяют делать сноски к таблицам, поэтому я стараюсь делать все довольно просто. Хотя, действительно, уже есть несколько невероятных пакетов, и я думаю, что эта ветка хорошо указывает на это.

\documentclass{article}
\begin{document}
\begin{table}[!th]
\renewcommand{\arraystretch}{1.3} % adds row cushion
\caption{Data, level$^a$, and sources$^b$}
\vspace{4mm}
\centering
\begin{tabular}{|l|l|c|c|}
  \hline      
  \textbf{Data}  & \textbf{Description}   & \textbf{Level} & \textbf{Source} \\
  \hline      
  \hline
  Data1  &  Description. . . . . . . . . . . . . . . . . .   &  cnty & USGS \\
  \hline
  Data2  &  Description. . . . . . . . . . . . . . . . . .   &  MSA & USGS \\
  \hline
  Data3  &  Description. . . . . . . . . . . . . . . . . .   &  cnty & Census  \\
  \hline  
\end{tabular}
\end{table}
\footnotesize{$^a$ The smallest spatial unit is county, $^b$ more details in appendix A}\\
\end{document}

Вывод из приведенного выше кода

Скотт Уорланд
источник
11

Если ваша таблица уже работает tabular, то проще всего переключиться на нее longtable, не забудьте добавить

\usepackage{longtable}

Например:

\begin{longtable}{ll}
  2014--2015 & Something cool\footnote{first footnote} \\
  2016-- & Something cooler\footnote{second footnote}
\end{longtable}
Сомнение
источник
2
У меня это не сработало. Он по-прежнему не появляется. Что еще я должен изменить, кроме добавления этой строки?
Emanuel Berg
2
Ага, надо поменять и команду начала / окончания таблицы. Попался.
Emanuel Berg
1
Не могли бы вы привести полный пример? Я не могу заставить это работать
user2808117 02
7

Используйте среду minipage. Вот пример:

\begin{minipage}{6cm}
\begin{tabular}{|l|c|c|}
    \hline
    A & 1 & 2 \footnote{This is a footnote.} \\
    \hline
    B & 2 & 1 \\
    \hline
    C & 3 & 3 \\
    \hline
\end{tabular}
\end{minipage}
Wgzhao
источник
1
В моем случае сноска печатается дважды, и вместо того, чтобы сидеть внизу страницы, она находится прямо под таблицей в середине страницы.
kakyo
5

Вероятно, лучшее решение - взглянуть на пакеты threeparttable / threeparttablex.

Джозеф Райт
источник
1
Вот некоторая информация о том, как использовать threeparttable. У меня это сработало! dound.com/2009/06/...
Veridian
2

В таблицах я использовал \ footnotetext.

MSB
источник
2
\begin{figure}[H]
\centering
{\includegraphics[width=1.0\textwidth]{image}}
\caption{captiontext\protect\footnotemark}
\label{fig:}
\end{figure}
\footnotetext{Footnotetext} 
Рамоста
источник
0

Что сказал @dmckee.

Написать свой собственный код для организации очереди сносок несложно. Что вам нужно сделать:

  1. Напишите код в очередь Latex-кода - как ловушка в emacs: очень стандартная техника, если не каждый Latex-хакер может сделать это правильно;
  2. Временно переопределите, \footnoteчтобы добавить макрос сноски в вашу очередь;
  3. Убедитесь, что ловушка вызывается при выходе из таблицы / рисунка и возврата в обычный вертикальный режим.

Если это интересно, я покажу код, который это делает.

Чарльз Стюарт
источник