![知道为什么这个 \newcommand{\n}{\lstinline|\n|} 宏不起作用吗?](https://linux22.com/image/236750/%E7%9F%A5%E9%81%93%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%20%5Cnewcommand%7B%5Cn%7D%7B%5Clstinline%7C%5Cn%7C%7D%20%E5%AE%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%E5%90%97%EF%BC%9F.png)
因此,我创建了一个新的宏\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。