将 xcoffin 放在环境内容周围

将 xcoffin 放在环境内容周围

我正在尝试将 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从编程层使用l3coffinsxcoffins只是 的一个薄包装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这是一个更好的选择。

相关内容