LaTex:在环境的开头启动一个命令,并在结束定义中结束它

时间:2010-02-28 01:05:42

标签: latex beamer

这可能是愚蠢或明显的,但我正在学习制作sty文件,我一直在修改beamerposter项目中的一些代码。无论如何,我有这个:

\def\postercolumn#1
{\begin{column}{#1\textwidth}
      \begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
        \begin{minipage}[T]{.95\textwidth}
            %\parbox[t][\columnheight]{\textwidth}
}

\def\endpostercolumn
{
        \end{minipage}
      \end{beamercolorbox}
    \end{column}
}

显然,\ parbox命令已被注释掉,但我希望它从那里开始并以结束块结束。实际上,我想要这个:

\def\postercolumn#1
{\begin{column}{#1\textwidth}
      \begin{beamercolorbox}[center,wd=\textwidth]{postercolumn}
        \begin{minipage}[T]{.95\textwidth}
            \parbox[t][\columnheight]{\textwidth}{
}

\def\endpostercolumn
{
        }
        \end{minipage}
      \end{beamercolorbox}
    \end{column}
}

但很自然,这不起作用,因为编译器感到困惑并认为\ endpostercolumn部分正在关闭。是否有一些明显的方法来解决这个问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试\bgroup\egroup代替{}。但不确定。

\bgroup \let{,因此它是隐式 {。因此,在进入TeX的“胃”之前,不应将其视为额外的分组命令。同样关于\egroup


编辑:我使用\parbox进行了尝试,似乎无法正常工作(因为\parbox似乎过早地扩展了令牌)。使用\vtop可以:

\documentclass{minimal}

\newlength\columnheight \columnheight=5cm % needed to define \columnheight,
                                          % don't have it here

\def\postercolumn{
    \leavevmode
    \vtop to \columnheight\bgroup
    \hsize.5\textwidth
    \noindent
    \ignorespaces
}

\def\endpostercolumn{
    \egroup
}


\begin{document}

\begin{postercolumn}
   hello world hello world hello world hello world
   hello world hello world hello world hello world
\end{postercolumn}

\end{document}

似乎这就是你需要的。


修改:当然,您需要\hsize\textwidth而不是\hsize.5\textwidth

答案 1 :(得分:0)

您可以使用\parbox环境:

,而不是使用minipage
\begin{minipage}[t]{\textwidth}
  % ...
\end{minipage}

% If you want to explicitly define the height:
\begin{minipage}[t][\columnheight]{\textwidth}
  % ...
\end{minipage}

minipage环境与\parbox命令具有相同的选项:

\begin{minipage}[pos][height][inner-pos]{width}
  % ... text ...
\end{minipage}

其中posctb之一(分别为中心,顶部和底部); height是所需的框高度,inner-posctbs之一(适用于中心,顶部) ,底部和拉伸,分别);并且width是所需的宽度。

如果为s值选择inner-pos,则会拉伸文本以填充框中的垂直空间(段落之间会添加额外的空格)。如果您选择不指定inner-pos,则会将其设置为与pos相同。

我没有用你的代码对它进行测试,但它应该可行。 (我之前在定义新环境时使用过它。)