\documentclass{report}
\begin{document}
Text\footnote{text1} Text\footnote{text2}
\vbox{%
\begin{itemize}
\item X\footnotemark{}
\item Y\footnotemark{}
\item Z\footnotemark{}
\end{itemize}
}
\footnotetext{a}
\footnotetext{b}
\footnotetext{c}
\end{document}
生成:
Text^1 Text^2
* X^3
* Y^4
* Z^5
-------------
1 text1
2 text2
5 a
5 b
5 c
如何\footnotetext
在没有手动编号的情况下恢复编号?
我想,我知道我用了\footnotemark
n
时间,所以我想要像这样的解决方案(它是“伪代码”想法草案):
\newcounter{tempcounter := footnotecounter - n}
\footnotetext[ ++tempcounter ]{a}
\footnotetext[ ++tempcounter ]{b}
\footnotetext[ ++tempcounter ]{c}
或者其他自动编号解决方案。我不想每次更改章节中的脚注时都手动更正此列表。
PS,我知道将列表放入可能看起来很奇怪,请假设它只是一个需要使用+vbox
的环境的玩具示例。\footnotemark
\footnotetext
答案1
\documentclass{report}
\begin{document}
Text\footnote{text1} Text\footnote{text2}
\begin{itemize}
\item X\footnotemark{} \item Y\footnotemark{} \item Z\footnotemark{}
\end{itemize}
\addtocounter{footnote}{-3} %3=n
\stepcounter{footnote}\footnotetext{a}
\stepcounter{footnote}\footnotetext{b}
\stepcounter{footnote}\footnotetext{c}
\end{document}
答案2
另一种方法是修复环境以使其不再需要这个,并将脚注从环境中移除,这样就不需要手动更正了。
tabularx
例如
\let\@footnotetext\TX@ftntext\let\@xfootnotenext\TX@xftntext
在环境开始时
\global\TX@ftn\expandafter{\expandafter}\the\TX@ftn
最后,在\TX@ftntext
哪里
% \begin{macro}{\TX@ftntext}
% \begin{macro}{\TX@xftntext}
% Inside the alignment just save up the footnote text in a token
% register.
% \begin{macrocode}
\long\def\TX@ftntext#1{%
\edef\@tempa{\the\TX@ftn\noexpand\footnotetext
[\the\csname c@\@mpfn\endcsname]}%
\global\TX@ftn\expandafter{\@tempa{#1}}}%
\long\def\TX@xftntext[#1]#2{%
\global\TX@ftn\expandafter{\the\TX@ftn\footnotetext[#1]{#2}}}
% \end{macrocode}
% \end{macro}
% \end{macro}
因此,将其全部放入您的示例中:
\documentclass{report}
\makeatletter
\newtoks\FTN@ftn
\def\pushftn{%
\let\@footnotetext\FTN@ftntext\let\@xfootnotenext\FTN@xftntext
\let\@xfootnote\FTN@xfootnote}
\def\popftn{%
\global\FTN@ftn\expandafter{\expandafter}\the\FTN@ftn}
\long\def\FTN@ftntext#1{%
\edef\@tempa{\the\FTN@ftn\noexpand\footnotetext
[\the\csname c@\@mpfn\endcsname]}%
\global\FTN@ftn\expandafter{\@tempa{#1}}}%
\long\def\FTN@xftntext[#1]#2{%
\global\FTN@ftn\expandafter{\the\FTN@ftn\footnotetext[#1]{#2}}}
\def\FTN@xfootnote[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
\endgroup
\@footnotemark\FTN@xftntext[#1]}
\makeatother
\begin{document}
Text\footnote{text1} Text\footnote{text2}
fff\footnote[35]{jjjj}
\vbox{\pushftn
\begin{itemize}
\item X\footnote{a}
\item Y\footnote{b}
\item Z\footnote{c}
\item W fff\footnote[42]{kkk}
\end{itemize}
}\popftn
\end{document}
答案3
对于表格表脚注包实现了所要求的自动化(并且还处理超链接,当超链接包)。 (请参阅其手册.pdf)对于其他环境,该包可能会被“滥用”(参见我对“嵌套脚注破坏了脚注的逗号划分”的回答)。它会保存(表格)脚注(文本)并在表格环境结束后发出。当您使用 时vbox
,必须在其末尾(手动)发出,确实如此\spewfootnotes
。完全自动化会重新定义为在框结束后\vbox
包含并重新定义为内部。\spewfootnotes
\footnote
\tablefootnote
\vbox
\documentclass{report}
\usepackage{hyperref}% if you want/for demonstration of hyperlinks
\usepackage{tablefootnote}
\makeatletter
\newcommand{\spewfootnotes}{%
\tfn@tablefootnoteprintout%
\global\let\tfn@tablefootnoteprintout\relax%
\gdef\tfn@fnt{0}%
}
\makeatother
\begin{document}
Text\footnote{text1} Text\footnote{text2}
\vbox{%
\begin{itemize}
\item X\tablefootnote{a}
\item Y\tablefootnote{b}
\item Z\tablefootnote{c}
\end{itemize}
}\spewfootnotes
Text\footnote{text7}
\newpage
Just to get another page to demonstrate the hyperlinks.
\end{document}
答案4
自从乌尔丽克·菲舍尔有假如一个简单而清晰的解决方案,我尝试改进她的答案以自动计算\footnotemark
s。
只需在序言中添加以下几行:
\newcounter{footnotemarknum}
\newcommand{\fnm}{\addtocounter{footnotemarknum}{1}\footnotemark}
% I put all the commands in one line to avoid generating extra space before the footnote superscript number.
\newcommand{\fnt}[1]{
\addtocounter{footnote}{-\value{footnotemarknum}}
\addtocounter{footnote}{1}
\footnotetext{#1}
\setcounter{footnotemarknum}{0}
}
(您可以根据需要自定义新的命令名称。)
并像这样使用\fnm
(modified \footnotemark
) 和\fnt
(modified ):\footnotetext
\documentclass{report}
\begin{document}
Text\footnote{text1} Text\footnote{text2}
\begin{itemize}
\item X\fnm \item Y\fnm \item Z\fnm
\end{itemize}
\fnt{a}
\fnt{b}
\fnt{c}
\end{document}
输出结果与 Ulrike Fischer 的答案相同。结果显示,新命令也与 兼容\footnote{...}
。
Fischer 的解决方案和我的解决方案的唯一问题是,在几个连续的 s 中,只有第一个\footnotetext
s 可以正确地超链接(通过hyperref
包裹)。