因此,我一直在寻找扩展以下代码的方法(一种在使用超大数字时不弄乱边距的技巧):
\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 像对低级装箱命令那样扩展内容,则只能使用\bgroup
and\egroup
来替代{
and ,但当它正在寻找宏参数时则不能。宏将内容读取为参数而不是框,因此您的尝试不起作用。我使用我的另一个包编写了一个包,它提供了所有将内容读取为真实框的宏的变体。只需加载并使用即可:}
\makebox
realboxes
\...box
collectbox
realboxes
\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
。