如何将以 # 开头的文本传递给宏(minted)?

如何将以 # 开头的文本传递给宏(minted)?

我使用 minted 创建了一个命令来在我的文档中输入代码。

\documentclass{scrartcl}

\usepackage{minted}

\newcommand{\inlinecode}[2][text]{%
  \mintinline{#1}{#2}%
}

\begin{document}%
  something \inlinecode{somecode} important
  something \inlinecode{#pragma} important
  something \mintinline{text}{#pragma} important
\end{document}

问题出在文档中的第二行。输出是##pragma而不是#pragma。其他两个命令产生预期的输出。那么我该如何将以 开头的文本传递#给命令以获得正确的输出?

答案1

如果你定义

\newcommand{\inlinecode}[2][text]{%
  \mintinline{#1}{#2}%
}

然后在调用时\inlinecode{...},参数被标记化 \mintinline可以对特殊字符的标准解释进行所需的更改(这是一种特殊的逐字模式)。

只需将定义改为

\newcommand{\inlinecode}[1][text]{%
  \mintinline{#1}%
}

现在\mintinline可以完成其工作并吸收尚未标记的论点。

请注意,您还可以使用

\inlinecode|text|

用这个定义。

完整示例

\documentclass{scrartcl}

\usepackage{minted}

\newcommand{\inlinecode}[1][text]{%
  \mintinline{#1}%
}

\begin{document}%
  text \inlinecode{somecode} text
  text \inlinecode{#pragma} text
  text \mintinline{text}{#pragma} text
\end{document}

在此处输入图片描述

会发生什么?当 TeX 看到(新的)时,\inlinecode它会向前扫描以查看[下一个是否是。如果没有[找到,则\mintinline{text}替换\inlinecode,因此下一步将是处理

\mintinline{text}{#pragma}

通过诸如 之类的调用\inlinecode[cpp]{#pragma}[将扫描 ,因此宏的定义将 替换为\mintinline{cpp};最终

\mintinline{cpp}{#pragma}

将被处理。

答案2

一般来说:

\documentclass{article}
\newcommand{\inline}[1]{#1}
\begin{document}
\inline{\#pragma} \inline{magpie}
\end{document}

#是 LaTeX 的七个符号之一,具有特殊意义。其他符号为:$ % & _ { }。要打印它们,请在它们前面加上反斜杠,就像我上面做的那样。

相关内容