是否可以有可选参数newtcblisting
?
我用吗\ifthenelse
?
答案1
编辑:添加了@cmhughes 在他的评论中使用 xparse 库建议的解决方案。
这是 tcolorbox 手册第 4.13 页 302 的一个例子,方括号 [ ] 中的参数是可选的:
\documentclass{article}
\usepackage[most]{tcolorbox}
\newtcblisting{mybox}[2][]{%
colback=red!5!white,
colframe=red!75!black,
fonttitle=\bfseries,
title=#2,#1}
\begin{document}
\begin{mybox}%[listing only]
{Listing Box}
This is my \LaTeX\ box.
\end{mybox}
\bigskip
\begin{mybox}[listing only]
{Listing Box}
This is my \LaTeX\ box.
\end{mybox}
\bigskip
\begin{mybox}[listing side text]
{Listing Box}
This is my
\LaTeX\ box.
\end{mybox}
\end{document}
输出:
使用 xparse 库的第二种解决方案
格式为\DeclareTCBListing[init options]{name}{specification}{options}
{specifications} 是 xparse 包的格式。
在示例中,来自手册 4.13 第 441 页的规范为 { s O{} m },其中:
- “s” 是一个可选的星号,如果存在星号,则结果为 \BooleanTrue,否则为 \BooleanFalse(如下所述)。
- O{} 与“o”相同,但如果未指定值,则返回 hdefaulti。应指定为 O{hdefaulti}。
- m 是标准强制参数,可以是单个标记,也可以是花括号括起来的多个标记。无论输入是什么,该参数都将传递给括号对包围的内部代码。这是普通 TEX 参数的 xparse 类型说明符
有关更多信息,请参阅 xparser 包文档:解析
\documentclass{article}
\usepackage[most]{tcolorbox}
\DeclareTCBListing{mybox}{ s O{} m }{%
colback=red!5!white,
colframe=red!75!black,
fonttitle=\bfseries,
IfBooleanTF={#1}
{listing side text}
{text side listing},
title=#3,#2}
\begin{document}
\begin{mybox}{Listing Box}
This is my
\LaTeX\ box.
\end{mybox}
\bigskip
\begin{mybox}*{Listing Box}
This is my
\LaTeX\ box.
\end{mybox}
\bigskip
\begin{mybox}[colback=yellow]
{Listing Box}
This is my
\LaTeX\ box.
\end{mybox}
\end{document}