为什么 fixfoot 的固定脚注不接受段落和列表?

为什么 fixfoot 的固定脚注不接受段落和列表?

普通脚注既接受段落也接受列表:

\documentclass{article}
%
\newcommand{\alist}{%
  \begin{itemize}
  \item Foo.
  \end{itemize}
}
\newcommand{\twopar}{%
  Foo\par
  Foo.%
}
%
\begin{document}
Bar\footnote{\alist}.

Baz\footnote{\twopar}.
\end{document}

fixfoot的固定脚注不接受:

  1. 段落均未提及:

    \documentclass{article}
    \usepackage{fixfoot}
    %
    \newcommand{\twopar}{%
    Foo\par
    Foo.%
    }
    %
    \DeclareFixedFootnote{\reptwopar}{\twopar}
    %
    \begin{document}
    Bar% \reptwopar.
    \end{document}
    

    一旦% \reptwopar取消注释就会失败(因此至少\DeclareFixedFootnote接受段落)。

  2. 也不列出:

    \documentclass{article}
    \usepackage{fixfoot}
    %
    \newcommand{\alist}{%
      \begin{itemize}
      \item Foo.
      \end{itemize}
    }
    %
    % \DeclareFixedFootnote{\repalist}{\alist}
    %
    \begin{document}
    Bar% \repalist.
    \end{document}
    

    一旦% \DeclareFixedFootnote{\repalist}{\alist}取消注释就会失败(因此\DeclareFixedFootnote其本身不接受列表)。

为什么要对固定脚注进行这样的限制?有没有办法绕过这些限制?

答案1

fixfoot 在存放时会扩展主体(使用\protected@edef)。

这意味着您可以/应该保护脆弱的命令:

\documentclass{article}
\usepackage{fixfoot}
%
\newcommand{\alist}{%
  \begin{itemize}
  \item Foo.
  \end{itemize}
}

 \DeclareFixedFootnote{\repalist}{\protect\alist \protect\begin{itemize}\protect\item a \protect\end{itemize}}

\begin{document}
Bar \repalist.
\end{document}

您可以\par使用\endgraf以下方法来避免问题:

\documentclass{article}
\usepackage{fixfoot}

%
\DeclareFixedFootnote{\reptwopar}{foo\endgraf foo}
%
\begin{document}
Bar \reptwopar.
\end{document}

相关内容