\footnotetext 为许多 \footnotemark 编号 - 自动解决方案

\footnotetext 为许多 \footnotemark 编号 - 自动解决方案
\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

自从乌尔丽克·菲舍尔假如一个简单而清晰的解决方案,我尝试改进她的答案以自动计算\footnotemarks。

只需在序言中添加以下几行:

\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{...}

Ulrike Fischer 的作品

Fischer 的解决方案和我的解决方案的唯一问题是,在几个连续的 s 中,只有第一个\footnotetexts 可以正确地超链接(通过hyperref包裹)。

相关内容