我正在使用这个memoir
课程。
在页面的某些部分,有多个地方需要用相同的脚注进行注释。
Lorem ipsum dolor[1] sit amet, consectetur adipiscing elit[2], sed do eiusmod tempor incididunt ut labore et dolore[1] magna aliqua。 Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor[1] in reprehenderit in voluptate velit esse cillum dolore[1] eu fugiat nulla pariatur。 excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。
1:看附录关于痛苦。
2:看附录:精英。
目前,我正在手动指定脚注,例如ipsum dolor\footnote[1]{See \emph{Appendix on dolors}.} sit amet
。然后我必须手动添加其他脚注标记:labore et dolore\textsuperscript{1} magna aliqua
但我不想手动跟踪脚注的编号。它们经常被移动,我总是忘记。此外,我不应该手动跟踪编号,Latex 应该会帮我做这件事。
我可以使用什么命令来多次引用同一个脚注,以便脚注自动编号?
答案1
使用 Andrews MWE 并添加一些 Heiko 魔法:
\documentclass{memoir}
\usepackage[height=30mm]{geometry}%
\usepackage{refcount}
\begin{document}
One footnote\footnote{A wonderful footnote!\label{foot}}
and a second one\footnote{A less wonderful footnote!\label{toe}}.
The last footnote, \ref{foot}, is really nice. I like
footnote~\ref{foot} more than footnote \ref{toe}. Here is another
footnote with the first footnote marker\footnotemark[\getrefnumber{foot}]
and a second footnote with the second foot note
marker\footnotemark[\getrefnumber{toe}].
\end{document}
关键是\ref{...}
给出数字 + \hbox{}
,因此\footnotemark
不喜欢它,因为它期望一个数字。
如果使用数字以外的其他内容来标记脚注,则解决方案可能会失败。
注意如何\label
添加里面脚注。
答案2
\label
使用标准和命令确实应该能够做您想做的事情\ref
,但是,这并不起作用,因为\footnote
没有设置\@currentlabel
LaTeX 用来“记住”最后一个标签的内容。
显而易见的解决方法是记住\footnote
最后使用的标签,它调用\@thefnmark
。您可以使用\apptocmd
etoolbox 包:
\makeatletter
\apptocmd{\@footnotetext}{\def\@currentlabel{\@thefnmark}}{}{}
\makeatother
(事实证明这\@footnotetext
就是需要改变的事情。)这是完整的 MWE:
以及随附的代码:
\documentclass{memoir}
\usepackage[height=30mm]{geometry}%
\usepackage{etoolbox}
\makeatletter
\apptocmd{\@footnotetext}{\def\@currentlabel{\@thefnmark}}{}{}
\newcommand\footnoteref[1]{\ifcsmacro{r@#1}{\footnotemark[\ref{#1}]}{$^{??}$}}
\makeatother
\begin{document}
One footnote\footnote{A wonderful footnote!}\label{foot}
and a second one\footnote{A less wonderful footnote!}\label{toe}.
The last footnote, \ref{foot}, is really nice. I like
footnote~\ref{foot} more than footnote \ref{toe}. Here is another
footnote with the first footnote marker\footnoteref{foot}
and a second footnote with the second foot note
marker\footnoteref{toe}.
\end{document}
编辑该宏\footnoteref
对于放置重复的脚注标签很方便,但它也是必需的,因为如果没有它,当您第一次定义新标签时,代码将无法编译,尽管在后续的所有传递中它都会正常。在第一次传递时,当标签未定义时,MWE 会产生以下内容:
正如@dalief 指出的那样,最好加上脚注里面 \footnote{...}
而不是\@footnotemark
像我上面所做的那样重新定义。
答案3
一个解决方案可能是包fixfoot
:
\documentclass[12pt]{memoir}
\usepackage[bmargin=20cm,lmargin=6cm,rmargin=6cm]{geometry}
\usepackage{fixfoot,xspace}
\usepackage[colorlinks]{hyperref}
\DeclareFixedFootnote{\foobar}{Run \texttt{pdflatex} two times.}
\DeclareFixedFootnote*{\foo}{A wonderful footnote!}
\DeclareFixedFootnote*{\baz}{A more wonderful footnote!}
\begin{document}
Compile this twice \foobar. One footnote,\foo and another.\baz
The last footnote\baz is really nice. I like this footnote\baz
more than footnote\foo, but check that the PDF is correctly
generated.\foobar
\end{document}
答案4
由于创建脚注后需要重复脚注引用,因此实际上不需要运行两次 LaTeX 的\label
/系统。相反,可以将计数器的当前值保存在宏中,并且带有数字的宏将成为 的参数:\ref
footnote
\footnotemark
\documentclass{memoir}
\usepackage[height=30mm]{geometry}%
\begin{document}
Lorem ipsum dolor%
\footnote{See \emph{Appendix on dolors}}%
\edef\thefndolors{\the\value{footnote}}
sit amet, consectetur adipiscing elit%
\footnote{See \emph{Appendix on elites}},%
sed do eiusmod tempor incididunt ut labore et
dolore\footnotemark[\thefndolors] magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
ea commodo consequat. Duis aute irure dolor\footnotemark[\thefndolors]
in reprehenderit in voluptate velit esse cillum
dolore\footnotemark[\thefndolors] eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum.
\end{document}