在带有参数的 tcolorbox 中使用 # 时,\next 定义中的参数编号非法

在带有参数的 tcolorbox 中使用 # 时,\next 定义中的参数编号非法

这是一个有效的例子(但行为有些奇怪):

\documentclass{article}

\usepackage[listings]{tcolorbox}

\newtcblisting{termbox}[1][\normalsize]{%
  listing options={basicstyle=#1},
}

\begin{document}

\begin{termbox}
  aa
\end{termbox}

\begin{termbox}[]
  aa
\end{termbox}

\begin{termbox}[\footnotesize]
  aa
\end{termbox}

\end{document}

在此处输入图片描述

我不明白为什么首先termbox,由于不提供[]选项卡,所以不将其解释为列表环境的一部分,因此不显示。

然后,我尝试显示以 开头的列表环境#(由于第一个选项卡是由 LaTeX 读取的,我几乎确信它会出错)

\documentclass{article}

\usepackage[listings]{tcolorbox}

\newtcblisting{termbox}[1][\normalsize]{%
  listing options={basicstyle=#1},
}

\begin{document}

\begin{termbox}
  # aa
\end{termbox}

\end{document}
 ! Illegal parameter number in definition of \next.
<to be read again> 
                   }
l.12   #
         aa

我尝试添加[](与 相同[\footnotesize])并查看!出现新的错误:

\documentclass{article}

\usepackage[listings]{tcolorbox}

\newtcblisting{termbox}[1][\normalsize]{%
  listing options={basicstyle=#1},
}

\begin{document}

\begin{termbox}[]
  # aa
\end{termbox}

\end{document}
! You can't use `macro parameter character #' in internal vertical mode.
l.1   #
        aa

是我做错了什么还是软件包中存在错误?除了我实际的解决方案之外,还有其他方法可以解决这个问题吗(我创建了两个 tcblisting,一个带有参数,\normalsize另一个带有\footnotesize参数而没有参数)

答案1

错误出现在下半部分,代码如下执行。除非您显示正确的 LaTeX 代码,否则我认为您不会想要它。

\documentclass{article}

\usepackage[listings]{tcolorbox}

\newtcblisting{termbox}[1][\normalsize]{%
  listing options={basicstyle=#1},
  listing only,
}

\begin{document}

\begin{termbox}[]
#  aa
\end{termbox}

\begin{termbox}[\footnotesize]
#  aa
\end{termbox}

\end{document}

[]然而,如果您打算从 开始,恐怕您需要#

在此处输入图片描述

您可能希望使用xparse允许避免扫描输入的界面来查找可能的[

\documentclass{article}

\usepackage[listings,xparse]{tcolorbox}

\NewTCBListing{termbox}{!O{\normalsize}}{%
  listing options={basicstyle=#1},
  listing only,
}

\begin{document}

\begin{termbox}
#  aa
\end{termbox}

\begin{termbox}[]
#  aa
\end{termbox}

\begin{termbox}[\footnotesize]
#  aa
\end{termbox}

\end{document}

在此处输入图片描述

这里的限制是不允许在 前面有空格[,所以不行

\begin{termbox} [...]

但这不应该是一个问题。

相关内容