2010-02-28 5 views
3

Это может быть немым или очевидным, но я учусь создавать файлы стилей, и я модифицировал код из проекта beamerposter. Во всяком случае, у меня есть это:LaTex: начать команду в начале среды и завершить ее в определении конца

\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

Вы можете попробовать \bgroup и \egroup вместо { и }. Не уверен, однако.

\bgroup является \let к {, так что это неявное{. Таким образом, это не следует рассматривать как дополнительную команду группировки, пока не попадет в «желудок» TeX. То же самое о \egroup.


Edit: Я попробовал его с \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} 

Кажется, что это то, что вам нужно.


Edit: Конечно, вы должны были бы \hsize\textwidth вместо \hsize.5\textwidth

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} 

, где pos является одним из c, t или b (для центра, сверху и снизу соответственно); height - желаемая высота коробки, inner-pos - одна из c, t, b, или s (для центра, сверху, снизу и растяжения соответственно); и width - желаемая ширина коробки.

Если вы выберете s для значения inner-pos, текст растягивается, чтобы заполнить вертикальное пространство в поле (дополнительное пространство будет добавлено между абзацами). Если вы решите не указывать inner-pos, он будет установлен в значение pos.

Я не тестировал это с помощью вашего кода, но он должен работать. (Я использовал его при определении новых сред раньше.)