如何水平居中 vbox

如何水平居中 vbox

我正在使用MIT 论文模板撰写我的论文。我根据版本创建了自己的文档类(反映了我所就读大学的需求)mitthesis.cls。由于可以有多个主管,MIT 类实现了一个vbox用于存储主管列表和一个添加他们的命令。我遇到的主要问题是,我不知道如何水平居中vbox包含主管列表的文档。它始终与左边距对齐显示。下面的代码是我正在使用的代码。

\supervisor{First Supervisor}   <= add 1st supervisor
\supervisor{Second Supervisor}  <= add 2nd supervisor
[...]
% store the supervisor list in a box
\newbox\@titlesupervisor
% since there can be more than one supervisor,
% we build the box for the titlepage
% as the user makes multiple calls
% to \supervisor
\def\supervisor#1{\setbox\@titlesupervisor\vbox
  {\unvbox\@titlesupervisor \vskip 10pt
   \def\baselinestretch{1}\large
   {#1}
  }
}
[...]
% Print the supervisor list after the heading, author, etc.
\textbf{Supervisor(s)}\par
\unvbox\@titlesupervisor
\vfill

我不完全明白这\unvbox是怎么回事,但我认为这与垂直边距扩展以适合文本有关,因为如果我删除最后一个\unvbox,第一个主管就会消失在 pdf 中。

我遇到的另一个问题是,我不知道如何确定主管列表中的条目数,以便我可以决定是打印单个还是多个“主管”? 我是否需要在添加命令中实现计数器,或者我可以从主管#1或titlesupervisor变量中以某种方式获取数字?

答案1

我会采取不同的策略:

\let\@titlesupervisor\@empty % initialize
\newif\if@supervisors
\def\supervisor#1{%
  \ifx\@titlesupervisor\@empty
    % do nothing, it's the first
  \else
    \@supervisorstrue % more than one supervisor
  \fi
  \g@addto@macro\@titlesupervisor{#1\\}%
}

[...]
% Print the supervisor list after the heading, author, etc.
\begin{center}
  \if@supervisors
    \textbf{Supervisors}
  \else
    \textbf{Supervisor}
  \fi
  \begin{tabular}{@{}l@{}}
  \@titlesupervisor
  \end{tabular}
\end{center}

相关内容