当参数 #1 以 `#` 开头时,将参数 #1 传递给 minted 的 \mintinline

当参数 #1 以 `#` 开头时,将参数 #1 传递给 minted 的 \mintinline

我注意到了以下意想不到的(对我来说!)行为,如下图所示的 MWE 及其输出所示:

% arara: xelatex: { shell : yes }    
\documentclass[11pt]{article}
\usepackage{minted}
\newcommand{\li}[1]{\mintinline{lean}{#1}}
\begin{document}

\mintinline{lean}{#print axioms}

\begin{minted}{lean}
#print axioms
\end{minted}

\li{#print axioms}

\end{document}

在此处输入图片描述

它看起来像命令\li被解释为两个都a#和 a ##(参见参数中的双井号(数字符号,哈希字符)##1 是什么意思?),这很奇怪!

从排版角度来看,解决我的问题的明显“解决方案”是使用\mintinline{lean}{...}而不是\li别名。但我也很想知道代码是怎么回事。原则上它似乎\li应该有效,而且,事实上,对于不以 开头的输入,它确实有效#

答案1

您正在处理逐字命令,尤其是其逐字参数,这始终很危险。而且,您正在通过传递宏定义中的参数来覆盖 minted 可能具有的任何特殊参数处理。更好的版本是\newcommand{\li}{\mintinline{lean}}将参数处理留给minted

除此之外:还minted提供\newmintinline主要用于创建此类宏的功能。

相关内容