知道为什么这个 \newcommand{\n}{\lstinline|\n|} 宏不起作用吗?

知道为什么这个 \newcommand{\n}{\lstinline|\n|} 宏不起作用吗?

因此,我创建了一个新的宏\newcommand{\n}{\lstinline|\n|},但出于某种原因,当我使用它时,我得到的只是粗体“n”字母,而不是漂亮的\n。有什么想法吗?

答案1

正如 Ulrike 已经发布的,您不能在宏参数或替换文本中使用逐字宏或环境。要使\n排版\n为逐字,您可以使用:

\newcommand{\n}{\texttt{\string\n}}

或者使用verbdef包:

\verbdef\n|\n|

答案2

实际上,您可以使用 lstinline 来定义自定义命令。我定义了一些简短的命令来包含特定形式语言的片段,如下所示:

\newcommand\foo[1]{\lstinline[language=foo]{#1}}

foo如果未定义语言,则必须先使用以下命令进行定义

\lstdefinelanguage{foo}{ ... }

然后,您可以在代码中使用如下自定义命令。某些特殊字符(如{}和 )^必须进行转义:

Blabla \foo{this is syntax highlighted} blabla,
bla \foo{This contains \{ braces \}}.

答案3

\lstinline是一个逐字命令。它必须执行大量\catcode-magic 才能禁用命令并解析其参数。您不能在另一个命令中使用它。 https://texfaq.org/FAQ-verbwithin

相关内容