包装中的\DeclareTCBox
和有什么区别?\DeclareTotalTCBox
tcolorbox
我已经阅读了包的手册tcolorbox
(第 466-467 页),但我仍然对它们感到困惑。
答案1
唯一的区别是\DeclareTotalTCBox
接受第四个强制参数<(tcbox) content>
,它可以是使用中的参数的模式<(xparse) arg specification>
。(并且\DeclareTCBox
定义的命令需要另一个强制参数。)
例如,在
% syntax
% \DeclareTotalTCBox \<name> {<arg spec>} {<options>} {<box content>}
\DeclareTotalTCBox \mybox { O{} m } {<options>} {<box content>}
您可以在 中使用#1
和。#2
<box content>
借助选项before upper app
和after upper pre
库hooks
,\DeclareTCBox
可以或多或少地模拟相应“总计”的效果,尽管您必须为定义的提供额外的强制性且可能为空的参数\<name>
。
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{hooks, xparse, minted}
\tcbset{
my verb/.style 2 args={
fontupper=\ttfamily,nobeforeafter,tcbox raise base,arc=0pt,outer arc=0pt,
top=0pt,bottom=0pt,left=0mm,right=0mm,
leftrule=0pt,rightrule=0pt,toprule=0.3mm,bottomrule=0.3mm,boxsep=0.5mm,
colback=#1!10!white,colframe=#1!50!black,
#2
}
}
% from dexteritas's answer
\DeclareTCBox {\myverbA}{ O{red} } {my verb={#1}{}}
\DeclareTotalTCBox{\myverbB}{ O{red} v !O{} }{my verb={#1}{#3}}{#2}
\DeclareTotalTCBox{\myverbC}{ O{red} v !O{} }{my verb={#1}{#3}}{foo #2 bar}
% use \DeclareTCBox to simulate \DeclareTotalTCBox
\DeclareTCBox {\myverbD}{ O{red} v !O{} }{my verb={#1}{#3}, before upper app={#2}}
\DeclareTCBox {\myverbE}{ O{red} v !O{} }{my verb={#1}{#3}, before upper app={foo #2 bar}}
\begin{document}
\begin{tcblisting}{sidebyside}
\Verb|\DeclareTCBox| \\
\myverbA{\LaTeX} \\
\Verb|\DeclareTotalCBox| \\
\myverbB{\LaTeX} \\
\myverbC{\LaTeX} \\
Simulate \Verb|\DeclareTotalCBox| \\
\myverbD{\LaTeX}{} \\
\myverbE{\LaTeX}{} \\
\end{tcblisting}
\end{document}
答案2
定义
手册中的定义tcolorbox
这两个命令分别是:
\DeclareTCBox[⟨init options⟩]{\⟨name⟩}{⟨specification⟩}{⟨options⟩}
\DeclareTotalTCBox[⟨init options⟩]{\⟨name⟩}{⟨specification⟩}{⟨options⟩}{⟨content⟩}
因此\DeclareTotalTCBox
允许您定义如何输入和使用内容,同时\DeclareTCBox
仅将最后的{...}
内容插入。
差异
\DeclareTotalTCBox
可以执行相同的操作DeclareTCBox
(使用m
规范中的最后一个参数并使用该参数作为内容):
\DeclareTotalTCBox[⟨init options⟩]{\⟨name⟩}{⟨specification⟩ m}{⟨options⟩}{#⟨last parameter⟩}
但它还可以做更多:
\DeclareTotalTCBox
在手册的示例中,内容应逐字逐句,这是通过规范来完成的v
(参见\myverbB
下面的 MWE),而这是不可能的\DeclareTCBox
(参见\myverbA
)。- 此外,还可以向内容中添加一些文本或命令(参见
\myverbC
)。
例子
这是一个 MWE(使用手册示例的一些代码):
\documentclass{article}
\usepackage[most]{tcolorbox}
\tcbuselibrary{xparse}
\begin{document}
\DeclareTCBox{\myverbA}{ O{red} }
{ fontupper=\ttfamily,nobeforeafter,tcbox raise base,arc=0pt,outer arc=0pt,
top=0pt,bottom=0pt,left=0mm,right=0mm,
leftrule=0pt,rightrule=0pt,toprule=0.3mm,bottomrule=0.3mm,boxsep=0.5mm,
colback=#1!10!white,colframe=#1!50!black}
Here is an example: \myverbA{\LaTeX}.
\bigskip
\DeclareTotalTCBox{\myverbB}{ O{red} v !O{} }
{ fontupper=\ttfamily,nobeforeafter,tcbox raise base,arc=0pt,outer arc=0pt,
top=0pt,bottom=0pt,left=0mm,right=0mm,
leftrule=0pt,rightrule=0pt,toprule=0.3mm,bottomrule=0.3mm,boxsep=0.5mm,
colback=#1!10!white,colframe=#1!50!black,#3}{#2}
Here is an example: \myverbB{\LaTeX}.
\bigskip
\DeclareTotalTCBox{\myverbC}{ O{red} v !O{} }
{ fontupper=\ttfamily,nobeforeafter,tcbox raise base,arc=0pt,outer arc=0pt,
top=0pt,bottom=0pt,left=0mm,right=0mm,
leftrule=0pt,rightrule=0pt,toprule=0.3mm,bottomrule=0.3mm,boxsep=0.5mm,
colback=#1!10!white,colframe=#1!50!black,#3}{foo #2 bar}
Here is an example: \myverbC{\LaTeX}.
\end{document}
结果
笔记
- 有关规格的更多信息,请参阅封装
xparse
和DeclareTotalTCBox 命令(tcolorbox 包)