我最近被介绍给tcolorbox
,这是一个很棒的软件包。我试图用它来突出显示文档中的计算机代码,例如bash
、python
和。当我运行以下 MWE 时,我收到错误: 。在下面的 MWE 中,当我删除第一个注释行时:它可以正常工作。但是,我想在 bash 代码的开头添加注释行。有人能解释一下吗?c++
Illegal parameter number in definition of \next #
# Unzip the file to the created directory
\documentclass[11pt,letterpaper]{article}
\usepackage{tcolorbox}
\tcbuselibrary{minted,skins}
\newtcblisting{bashcode}[1][]{
listing engine=minted,
colback=bg,
colframe=black!70,
listing only,
minted style=colorful,
minted language=bash,
minted options={linenos=true,numbersep=3mm,texcl=true,#1},
left=5mm,enhanced,
overlay={\begin{tcbclipinterior}\fill[black!25] (frame.south west)
rectangle ([xshift=5mm]frame.north west);\end{tcbclipinterior}}
}
\definecolor{bg}{rgb}{0.85,0.85,0.85}
\begin{document}
\begin{bashcode}
# Unzip the file to the created directory
$ unzip code-163f67cbf550560aa351b3d0a3bbbd7a22863cb4.zip -d ~
$ mkdir ~/code
# Since the directory name is long, I do the following
$ mv ~/code-163f67cbf550560aa351b3d0a3bbbd7a22863cb4/ ~/code
$ cd ~/code
$ ls -F
apps/ inverters/ Makefile* numerics/ sphfunc/
imaging/ logging.properties* models/ simulation/
$ make
\end{bashcode}
\end{document}
答案1
如果你使用
\begin{bashcode}[]
那么你的示例就可以很好地编译(使用shell-escape
)。
为了解释这一点,请记住 是#
中的特殊字符LaTeX
。您已定义一个环境,该环境接受一个默认为空的可选参数。在大多数情况下,不写入它而将其留空是完全没问题的 - 您只是恰好选择了一个会导致问题的字符。
由于您的环境正在扫描可选参数,因此#
仍然具有其原始含义,因此不会被解释为逐字文本。使用[]
明确告诉 LaTeX 没有参数。
为了进一步探索,请尝试#
用任何其他字符替换您的第一个字符(模数大师找到另一个特殊情况),您会发现没有任何问题。