脚注中的列表

脚注中的列表

该代码无法编译:

\documentclass{article}
\usepackage{listings}
\lstset{
    language=C,
    basicstyle=\small
}

\begin{document}
lorem ipsum\footnote{%
\begin{lstlisting}
// some C code or whatever...
printf("Blah blah\n");
\end{lstlisting}}
\end{document}

它说Illegal parameter number in definition of \lst@insertargs.我知道listings它对去向很挑剔,但那里必须是一种将列表塞进脚注的方法,对吗?

(这是一个 MWE,我的 tex 文件有点复杂;我的实际错误是,Paragraph ended before \lst@next was complete.但希望它们相关;我无法使用 MWE 得到这个错误。)

答案1

另一个选择是使用cprotect包,并替换\footnote\cprotect\footnote

\documentclass{article}
\usepackage{cprotect}
\usepackage{listings}
\lstset{
    language=C,
    basicstyle=\small
}

\begin{document}
lorem ipsum\cprotect\footnote{%
\begin{lstlisting}
// some C code or whatever...
printf("Blah blah\n");
\end{lstlisting}}
\end{document}

主要优点是许多宏可以\cprotect像脚注一样使用 -ed 命令。主要缺点是(目前)每个\cprotect-ed 命令都会生成一个辅助文件。

你可以找到这个CTAN 上的软件包(它相当新)。

答案2

\usepackage{bigfoot}应该可以解决问题。它的功能远不止这些,但让脚注文本仅被解析一次(就像普通 TeX 用它自己的\footnote宏所做的那样)就是其中之一。

如果你想要更轻量级的答案(大多数需要更多的手动工作,但不会过多地干扰 LaTeX 的内部结构),https://texfaq.org/FAQ-verbwithin给出了一些。

答案3

传递列表(和其他逐字材料)的一种万无一失的方法是使用一个盒子,而且不需要任何额外的包或实验性功能:

\documentclass{article}
\usepackage{listings}
\lstset{
    language=C,
    basicstyle=\small
}

\newsavebox{\LstBox}

\begin{document}
\begin{lrbox}{\LstBox}
\begin{lstlisting}
// some C code or whatever...
printf("Blah blah\n");
\end{lstlisting}
\end{lrbox}
%
lorem ipsum\footnote{\usebox{\LstBox}}
\end{document}

答案4

列表作者描述了在参数中使用列表的困难,并提供了一种“实验性”的方法来处理它(参见用户手册第 46 页)。

\documentclass{article}
\usepackage{listings}
\lstset{
    language=C,
    basicstyle=\small
}
\usepackage{fancyvrb}
\begin{document}
lorem\footnote{\lstinline{var i:integer;} and
\lstinline!protected\ \ spaces! and
\fbox{\lstinline!\\\{\}\%!}} 
ipsum  \VerbatimFootnotes
  We can put verbatim\footnote{\verb+_Yes!_+} text in footnotes
\end{document}

fancyvrb您还可以使用提供 的包,\VerbatimFootnote如上面的极简图所示。

相关内容