\footnote 中的 \mintinline 中的数字符号

\footnote 中的 \mintinline 中的数字符号

print(x) # prints x当我想要在脚注中突出显示内容时,我在使用 minted 包排版代码时遇到问题:

\documentclass{article}
\usepackage{minted}
\begin{document}
Comments in Python\footnote{\mintinline{python}{print(x) # prints x}}.
\end{document}

问题是#打印了两次:

在此处输入图片描述

如果我用百分号突出显示代码,我可以更改其 catcode:

\catcode`\%=11
Comments in \TeX\footnote{\mintinline{tex}{\LaTeX % comment}}.

但是,更改 的 catcode#会导致错误,因为它在 的定义中使用\mintinline。错误如下:

! Undefined control sequence.
\PYG #1#2->\FV@PYG 
                   {#1}{\FancyVerbBreakStart #2\FancyVerbBreakStop }
l.2 ...x}\PYG{p}{)} \PYG{c+c1}{\PYGZsh{} prints x}

我该如何解决这个问题(以可扩展的方式)?我打算经常使用它,因为#它是我打算排版的 ARM 汇编代码中的一个常见字符。(我无法在这里提供 ARM 示例,因为 ARM 词法分析器尚未包含在最新的 pygments 版本中)。

答案1

处理脚注中的逐字材料总是很麻烦。

您可以分两个步骤完成此操作:定义要排版的字符串,然后使用它。

\documentclass{article}
\usepackage{xparse}
\usepackage{minted}
\ExplSyntaxOn
\NewDocumentCommand{\mintedstring}{mv}
 {
  \tl_clear_new:c { l_minted_string_#1_tl }
  \tl_set:cn { l_minted_string_#1_tl } { #2 }
 }
\NewDocumentCommand{\mintinlinestring}{mm}
 {
  \minted_inline_string:nv { #1 } { l_minted_string_#2_tl }
 }
\cs_new_protected:Nn \minted_inline_string:nn
 {
  \mintinline{#1}{#2}
 }
\cs_generate_variant:Nn \minted_inline_string:nn { nv }
\ExplSyntaxOff

\setlength{\textheight}{2cm} % just to keep the picture small

\begin{document}

Comments in Python%
  \mintedstring{print}{print(x) # prints x}%
  \footnote{\mintinlinestring{python}{print}}.

\end{document}

在此处输入图片描述

答案2

我进一步研究了文档,发现有一些关于它的内容:

我想\mintinline在通常不允许逐字内容的上下文中使用。\mintinline命令在许多不允许使用普通逐字命令的地方已经起作用,例如\verb,因此请务必先尝试一下。如果它不起作用,最简单的替代方法之一是将代码保存在框中,然后稍后使用它。例如,

\newsavebox\mybox
\begin{lrbox}{\mybox}
\mintinline{cpp}{std::cout}
\end{lrbox}

\commandthatdoesnotlikeverbatim{Text \usebox{\mybox}}

因此,我的代码可以适用于:

\documentclass{article}
\usepackage{minted}
\begin{document}
\newsavebox\mybox
\begin{lrbox}{\mybox}
  \mintinline{python}{print(x) # prints x}
\end{lrbox}
Comments in Python\footnote{\usebox{\mybox}}.
\end{document}

相关内容