在 bash 代码中使用 tcolorbox 中的注释行时出现问题

在 bash 代码中使用 tcolorbox 中的注释行时出现问题

我最近被介绍给tcolorbox,这是一个很棒的软件包。我试图用它来突出显示文档中的计算机代码,例如bashpython和。当我运行以下 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 没有参数。

为了进一步探索,请尝试#用任何其他字符替换您的第一个字符(模数大师找到另一个特殊情况),您会发现没有任何问题。

相关内容