\bgroup 和 \egroup?

\bgroup 和 \egroup?

因此,我一直在寻找扩展以下代码的方法(一种在使用超大数字时不弄乱边距的技巧):

\noindent\makebox[\textwidth]{%
\begin{tabularx}{1.5\textwidth}{XX}
  \blindtext & \blindtext
\end{tabularx}
}

我想将其变成一个环境,因此考虑执行以下操作:

\newenvironment{figurehack}{\noindent\makebox[\textwidth]\bgroup}{\egroup}

这引发了问题,LaTeX 决定插入“缺失”的括号。因此,为了查看这是否是新环境的怪癖,我尝试了以下代码:

\noindent\makebox[\textwidth]\bgroup%
\begin{tabularx}{1.5\textwidth}{XX}
  \blindtext & \blindtext
\end{tabularx}
\egroup

LaTeX 再次尝试插入“缺失”的括号。有什么建议可以解决此问题吗?

答案1

如果 LaTeX 像对低级装箱命令那样扩展内容,则只能使用\bgroupand\egroup来替代{and ,但当它正在寻找宏参数时则不能。宏将内容读取为参数而不是框,因此您的尝试不起作用。我使用我的另一个包编写了一个包,它提供了所有将内容读取为真实框的宏的变体。只需加载并使用即可:}\makeboxrealboxes\...boxcollectboxrealboxes\Makebox

\newenvironment{figurehack}{\noindent\Makebox[\textwidth]\bgroup}{\egroup}

还可以看看我的adjustbox包,它提供了\adjustbox宏和adjustbox环境。它还允许\bgroup/\egroup并提供了许多可以轻松组合的选项。\makebox[\textwidth]可以使用 来完成(默认情况下将内容居中)\adjustbox{center=\textwidth}\textwidth已经是默认值,所以\adjustbox{center}就足够了。

答案2

您可以使用以下方式轻松收集从\<myenv>到的信息\<endmyenv>environ包裹。环境的内容随后包含在\BODY宏中,使您可以将其作为参数提供给另一个宏或环境。不确定这是否能满足您的需求,但这里有一个模型:

\documentclass{article}
\usepackage[english]{babel}%
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\usepackage{blindtext}% http://ctan.org/pkg/blindtext
\usepackage{environ}% http://ctan.org/pkg/environ
\NewEnviron​{mybox}[1][\textwidth]{% \begin{mybox}[..] ... \end{mybox}
  \noindent\makebox[#1]{%
    \BODY% Typeset contents
  }
}%
\begin{document}

\begin{mybox}
  \begin{tabularx}{1.5\textwidth}{XX}
    \blindtext & \blindtext
  \end{tabularx}
\end{mybox}

\end{document}

在上面的例子中,如果没有指定可选参数,则默认值为\textwidth

在此处输入图片描述

相关内容