我正在尝试将 xcoffins 用作轻量级 tcolorbox,如下所示:
这在定义可以包装内容的命令时非常有用,但是我需要使此行为可以通过环境访问,即而不是\test{hi}
,
\begin{test}
hi
\end{test}
我知道 environ 包,但想让它尽可能轻量。我希望有人知道如何使用 xcoffins 或纯 LaTeX 来实现这一点。
平均能量损失
\documentclass{article}
\usepackage{xcolor}
\usepackage{xcoffins}
\NewCoffin\Content
\NewCoffin\SideRule
\newcommand{\test}[1]{%
\SetVerticalCoffin\Content{\linewidth}{\noindent#1}
\SetHorizontalCoffin\SideRule{\color{blue!70!green!70!black}\rule{1pt}{\CoffinTotalHeight\Content}}
\JoinCoffins*\Content[l,t]\SideRule[l,t](-0.5em,0pt)
\noindent\TypesetCoffin\Content
\vspace*{\CoffinTotalHeight\Content}\bigskip
}
\begin{document}
\test{Hey\\there}
\end{document}
答案1
您可以\vcoffin_set:Nnw
从编程层使用l3coffins
(xcoffins
只是 的一个薄包装l3coffins
)。 \SetVerticalCoffin
仅提供对 的访问\vcoffin_set:Nnn
(请注意n
末尾的 ),这意味着必须将内容作为参数抓取。该:Nnw
版本正是在这种情况下使用的。
\documentclass{article}
\usepackage{xcolor}
\usepackage{xcoffins}
\NewCoffin\Content
\NewCoffin\SideRule
\ExplSyntaxOn
\NewDocumentEnvironment {test} { }
{
\vcoffin_set:Nnw \Content { \linewidth }
\noindent \ignorespaces
}
{
\vcoffin_set_end:
\SetHorizontalCoffin\SideRule{\color{blue!70!green!70!black}\rule{1pt}{\CoffinTotalHeight\Content}}
\JoinCoffins*\Content[l,t]\SideRule[l,t](-0.5em,0pt)
\noindent\TypesetCoffin\Content
\vspace*{\CoffinTotalHeight\Content}\bigskip
}
\ExplSyntaxOff
\begin{document}
\begin{test}
Hey\\there
\end{test}
\end{document}
您还可以使用\NewDocumentEnvironment { test } { b }
, 来获取环境主体(它内置于 LaTeX 中,因此不需要任何包),但我认为\vcoffin_set:Nnw
这是一个更好的选择。