全局分配棺材

全局分配棺材

没有宏\vcoffin_gset:Nnw。我怎样才能实现该结果?

平均能量损失

\documentclass{article}
\usepackage{expl3}\ExplSyntaxOn
\usepackage{mwe}

\newcommand\typesetit {\coffin_typeset:Nnnnn\l_tmpa_coffin{l}{T}{0pt}{0pt}}
\newenvironment{test} {\vcoffin_set:Nnw\l_tmpa_coffin{4in}}{\vcoffin_set_end:}
\newenvironment{test2}{\vcoffin_set:Nnw\l_tmpa_coffin{4in}}{\vcoffin_set_end:\typesetit}

\begin{document}

\begin{test}
  \lipsum[1]
\end{test}
\typesetit % empty :(

\begin{test2}
  \lipsum[1]
\end{test2}
\end{document}

答案1

经过一番考虑,特别是关于 box 范围的考虑,团队将expl3在下一个版本中添加对全局 coffins 的支持(2019-01-24)。(代码是在https://github.com/latex3/latex3/pull/525)全局棺材遵循与其他数据结构相同的模式,例如

\hcoffin_gset:Nn \g_my_coffin { Tokens }

答案2

我已经摆弄了 LaTeX3 棺材,但因为没有 而感到沮丧\vcoffin_gset:Nnw。为此,我找到了这个有点怪异的解决方法。它的工作原理是将TypesetCoffin<\your coffin>一个全球的 lrbox(见下面的代码)。坦白说,我没想到这会起作用,但是,瞧!它似乎起作用了。这里的目标是创建一个棺材并使用其中的内容外部环境或群体。可能存在一些我所不知道的限制。

\documentclass{article}

\usepackage{xparse,xcoffins}
\usepackage{etoolbox}
\usepackage{lipsum}

\NewCoffin\MyTestCoffin
\newsavebox{\testingbox}

%% Thanks to egreg, makes glrbox global (requires etoolbox.sty):
%% https://tex.stackexchange.com/questions/43046/beamer-content-in-box-register-does-not-survive-endframe/43063#43063
\cslet{glrbox}\lrbox
\expandafter\patchcmd\csname glrbox\endcsname{\setbox}{\global\setbox}{}{}
\cslet{endglrbox}\endlrbox

\ExplSyntaxOn 

\newcommand\typesetit{\usebox{\testingbox}}% <<- Redifined.

\newenvironment{test} {%
    \vcoffin_set:Nnw\l_tmpa_coffin{4in}
}{%
    \vcoffin_set_end:
    \begin{glrbox}{\testingbox}{\TypesetCoffin\l_tmpa_coffin}\end{glrbox}%
}

\newenvironment{testi}{%
    \vcoffin_set:Nnw\l_tmpa_coffin{4in}
}{%
    \vcoffin_set_end:
    \coffin_typeset:Nnnnn\l_tmpa_coffin{l}{T}{0pt}{0pt}%
}

\ExplSyntaxOff

\begin{document}

\begin{test}
    This is the first one.
    \lipsum[1]
\end{test}

\typesetit % Not empty :)

\bigskip

\begin{testi}
    Blabla bla.
    \lipsum[1]
\end{testi}

\end{document}

欢迎评论。

在此处输入图片描述

相关内容