我见过以下用法:
\NewTColorBox[]{containerbox}{o o}{
%invisible boxes for sections (now grey)
boxsep=0cm,
boxrule=0cm,
sharp corners,
left=0cm,
right=0cm,
top=0cm,
bottom=0cm,
leftright skip=0cm,
nobeforeafter,
IfValueT={#1}{width=#1},
IfValueT={#2}{equal height group=#2},
}
我想了解结尾前的最后两行是如何}
工作的。我已经看到了如何IfValueT
作为条件语句工作,如IfValueT{condition}{code_if_condition_met}{code_if_condition_unmet}
。但用法
IfValueT = {#1}{width=#1}
看起来很奇怪,因为感觉\NewTColorBox
应该将其视为IfValueT
一个论点......但不知何故却没有??
它的使用方式似乎是如果第一个可选参数将被传递,然后在创建 的实例时containerbox
将 width 参数传递给,如果不是,则不会将 width 参数传递给。我理解得对吗?如果是,它是如何工作的?编译器是否只是以特殊方式将 视为参数?并且会不会出现类似\NewTColorBox
containerbox
\NewTColorBox
IfValueT
\NewTColorBox[]{containerbox}{o}{
IfValueT = {#1}{width=#1}{width=1.0}
}
如果在没有传递可选参数的情况下我想要宽度为 1,也可以这样做吗?
使用方法
\NewTColorBox[]{containerbox}{o}{
left=0cm,
IfValueT{#1}{width=#1}{width=1.0}
}
这是否可行并且与我之前所做的事情相同?
答案1
该IfValueT
键被定义为一个带有三个参数的键,其定义如下所示(来自tcolorbox.sty
——我添加的行号):
875 \ExplSyntaxOn
876 \tcbset
877 {
...
888 IfValueT/.code~n~args={2}{\tl_if_novalue:nF{#1}{\pgfkeysalso{#2}}},
...
893 }
894 \ExplSyntaxOff
因此,该键的作用是在等号后获取两个参数,然后检查第一个参数是否是特殊的无值标记(这是o
类型参数的默认值),如果不是,则使用\pgfkeysalso{#2}
哪个来设置其他键。所以IfValueT
这只是一个执行一些有用代码的简单键。
另一个有用的键是IfValueTF
允许您要求的操作,即如果给出了值或没有给出值则设置不同的键:
\NewTColorBox[]{containerbox}{o}
{
left=0cm,
IfValueTF={#1}{width={#1}}{width=1.0}
}
但是如果您只想使用默认值并始终使用它(在这种情况下,行为与省略解决方案中的键width
不同),那么为可选参数设置默认值要简单得多:width
IfValueT={#1}{width={#1}}
width
\NewTColorBox[]{containerbox}{O{1.0cm}}
{
left=0cm,
width={#1}
}
使用具有默认值的建议可选参数的示例文档:
\documentclass{article}
\usepackage{tcolorbox}
\NewTColorBox{containerbox}{O{1cm}}{left=0cm, width={#1}}
\begin{document}
\begin{containerbox}
some thin box
\end{containerbox}
\begin{containerbox}[5cm]
some thick box
\end{containerbox}
\end{document}
结果: