# Globally assigning a coffin

There is no macro \vcoffin_gset:Nnw. How can I achieve that result?

### MWE

\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}


After some consideration, particularly in relation to box scope, the team will be adding support for global coffins to expl3 in the next release (2019-01-24). (The code was added in https://github.com/latex3/latex3/pull/525.) Global coffins follow the same pattern as for other data structures, e.g.

\hcoffin_gset:Nn \g_my_coffin { Tokens }


I have fiddled around with LaTeX3 coffins to the point that I have become frustrated with the absence of \vcoffin_gset:Nnw. To that end, I have arrived at this somewhat baroque workaround. It works by putting TypesetCoffin<\your coffin> in a global lrbox (see the code below). Frankly, I didn't think this would work, but, Lo!, and, Behold! it seems to. The object here is to create a coffin and use its contents outside an environment or group. There are probably limitations of which I am unaware.

\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}