tcolorbox 包中 \DeclareTCBox 和 \DeclareTotalTCBox 之间的区别

tcolorbox 包中 \DeclareTCBox 和 \DeclareTotalTCBox 之间的区别

包装中的\DeclareTCBox和有什么区别?\DeclareTotalTCBoxtcolorbox

我已经阅读了包的手册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 appafter upper prehooks\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}

结果

在此处输入图片描述

笔记

相关内容