在脚注中列出

在脚注中列出

当命令出现在列表本身中时,LaTeX 似乎对脚注中的列表的处理方式不同\footnote 。参见以下 MWE:

\documentclass{article}

\begin{document}
Text.\footnote{Text.
  \begin{enumerate}
  \item This is an item.
  \end{enumerate}
}

\begin{enumerate}
\item This is an item.\footnote{Text.
  \begin{enumerate}
  \item This should be an item, but it looks like a subitem.
  \end{enumerate}
}
\begin{enumerate}
\item This is a subitem.
\end{enumerate}
\end{enumerate}
\end{document}

一种解决方法是将列表中的脚注拆分为\footnotemark如下 \footnotetext内容:

\documentclass{article}

\begin{document}
Text.\footnote{Text.
  \begin{enumerate}
  \item This is an item.
  \end{enumerate}
}

\begin{enumerate}
\item This is an item.\footnotemark
\begin{enumerate}
\item This is a subitem.
\end{enumerate}
\end{enumerate}
\footnotetext{Text.
  \begin{enumerate}
  \item This should be an item, and it is one.
  \end{enumerate}
}
\end{document}

然而,这既繁琐又容易出错,特别是如果分页符位于 和 之间\footnotemark\footnotetext会将脚注移动到错误的页面。

有没有更好的办法解决这个问题?

答案1

脚注在脚注位置的保存框内格式化,因此它们会继承当时的\@listdepth和计数值。这将重新定义为将这些计数重置为零(无论是否使用它们)。甚至可以将此视为错误修复。\@enumdepth\footnote

\documentclass{article}

\makeatletter
\let\oldfootnote=\footnote
\renewcommand{\footnote}[2][\empty]% #1 = number, optional, #2 = text
{\ifx\empty#1\relax \oldfootnote{\@listdepth=0 \@enumdepth=0 #2}%
 \else  \oldfootnote[#1]{\@listdepth=0 \@enumdepth=0 #2}%
 \fi}
\makeatother

\begin{document}
Text.\footnote{Text.
  \begin{enumerate}
  \item This is an item.
  \end{enumerate}
}

\begin{enumerate}
\item This is an item.\footnote{Text.
  \begin{enumerate}
  \item This should be an item, but it looks like a subitem.
  \end{enumerate}
}
\begin{enumerate}
\item This is a subitem.
\end{enumerate}
\end{enumerate}
\end{document}

演示

相关内容