使用 environ 的 BODY 周围的 savebox

使用 environ 的 BODY 周围的 savebox

我尝试在 的宏\savebox周围使用。我能以某种方式保留换行符吗(在 MWE 中它们消失了)?\BODY\NewEnviron

\documentclass{article}

\usepackage{environ}

\newsavebox{\mybox}

\NewEnviron{myenv}{%
    \savebox{\mybox}{\BODY}
    \usebox{\mybox}
}

\begin{document}

\begin{myenv}
A

B
\end{myenv}

\end{document}

该问题可能与environ包无关,但这就是我正在尝试使用的。

或者:有没有办法确定的垂直和水平尺寸\BODY

答案1

在构建段落时,没有文本“自然宽度”的概念:TeX 将使用您指定的宽度,或者\linewidth在您未指定的情况下使用。

然而,有一个varwidth环境可以提供帮助:

\documentclass{article}
\usepackage{environ,varwidth}

\newsavebox{\mybox}

\NewEnviron{myenv}{%
  \sbox{\mybox}{\begin{varwidth}{\linewidth}\BODY\end{varwidth}}%
  The box is \texttt{\the\wd\mybox} wide
  and \texttt{\the\dimexpr\ht\mybox+\dp\mybox} high.
}

\begin{document}

\begin{myenv}
A

B
\end{myenv}

\end{document}

如何处理这些尺寸取决于你。

在此处输入图片描述

\NewEnviron无需使用:

\documentclass{article}
\usepackage{varwidth}

\newsavebox{\mybox}

\newenvironment{myenv}
 {\begin{lrbox}{\mybox}
  \begin{varwidth}{\linewidth}}
 {\end{varwidth}%
  \end{lrbox}%
  The box is \texttt{\the\wd\mybox} wide and
  \texttt{\the\dimexpr\ht\mybox+\dp\mybox} high.
}

\begin{document}

\begin{myenv}
A

B
\end{myenv}

\end{document}

相关内容