我使用 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 的七个符号之一,具有特殊意义。其他符号为:$ % & _ { }。要打印它们,请在它们前面加上反斜杠,就像我上面做的那样。