我想要将两列tabular
环境居中,使得第一列文本块末尾和列分隔符之间的空白量与列分隔符和第二列文本块开头之间的空白量相同。
换句话说,在下面的 MWE 中,红线应恰好位于两列之间,并且不与第二列的开头对齐,以便文本在其周围保持平衡。但是,两列都应左对齐。
我尝试过使用@{}
表达式,但无济于事。我查看了tabulary
和tabularx
。也许array
提供了解决方案的基础,但我还没有弄清楚哪种列规范可以让我做到这一点。似乎\newline
使问题更加复杂,但我不知道如何解决它们,因为左列中的每一行都对应于右列中可变数量的行。
\documentclass{memoir}
\usepackage{tikz}
\begin{document}
\newcommand{\jury}{%
Président du jury et \newline examinateur interne & Nom du professeur \newline Institution \\%
Examinateur externe & Nom du professeur \newline Faculté ou département \newline Institution \\%
Examinateur interne & Nom du professeur \newline Institution \\%
Directeur de recherche & Jean-Claude Van Damme \newline ULB \\%
Codirecteur de recherche & Steve McQueen \newline USCFA \newline
}
\thispagestyle{empty}
\newlength{\centeradjust}
\calccentering{\centeradjust} % Calculate center length and stores in centeradjust
\begin{adjustwidth*}{\centeradjust}{-\centeradjust} % Adjust center
\begin{adjustwidth}{-1cm}{-1cm}
\begin{tikzpicture}[remember picture,overlay]
\draw[red] (current page.north) -- (current page.south);
\end{tikzpicture}
\begin{center}
\begin{OnehalfSpace}
\vspace*{3\baselineskip}
{\Large Centered page using adjustwidth (as per the \texttt{memoir} manual)}
\vfill
The following table is not centered the way I want it to be.\\[1cm]
\renewcommand{\arraystretch}{2}
\begin{tabular}{p{5cm}@{}p{5cm}@{}}
\jury
\end{tabular}
\vspace*{3\baselineskip}
\end{OnehalfSpace}
\end{center}
\end{adjustwidth}
\end{adjustwidth*}
\end{document}
答案1
无需猜测最宽的条目:
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{xcolor}
\newcommand{\juryitem}[2]{}
\newlength{\jurywidth}
\newcommand{\printjury}{%
\begin{center}
% this just prints the divider line (remove in the final version)
\makebox[\textwidth]{%
\smash{\vrule width 0.1pt depth \textheight height 0pt}%
}
%%% end part to remove
\sbox0{%
\def\juryitem##1##2{\begin{tabular}{@{}l@{}}##1\end{tabular}}%
\begin{tabular}{@{}l@{}}\jury\end{tabular}%
}%
\setlength{\jurywidth}{\wd0}%
\sbox0{%
\def\juryitem##1##2{\begin{tabular}{@{}l@{}}##2\end{tabular}}%
\begin{tabular}{@{}l@{}}\jury\end{tabular}%
}%
\ifdim\wd0>\jurywidth \setlength{\jurywidth}{\wd0}\fi
\renewcommand{\arraystretch}{3}%
\def\juryitem##1##2{%
\renewcommand\arraystretch{1}%
\begin{tabular}[t]{@{}l@{}}##1\end{tabular}
&
\renewcommand\arraystretch{1}%
\begin{tabular}[t]{@{}l@{}}##2\end{tabular}
}%
\begin{tabular}{@{}p{\jurywidth}@{\hspace{2cm}}p{\jurywidth}@{}}
\jury
\end{tabular}%
\end{center}
\thispagestyle{empty}
\clearpage
}
\begin{document}
\newcommand{\jury}{%
\juryitem
{Président du jury et \\ examinateur interne}
{Nom du professeur \\ Institution}
\\
\juryitem
{Examinateur externe}
{Nom du professeur \\ Faculté ou département \\ Institution}
\\
\juryitem
{Examinateur interne}
{Nom du professeur \\ Institution}
\\
\juryitem
{Directeur de recherche}
{Jean-Claude Van Damme \\ ULB}
\\
\juryitem
{Codirecteur de recherche}
{Steve McQueen \\ USCFA}
\\
\juryitem
{Codirecteur de recherche}
{Steven Seagal \\ Texas Rangers}
}
\printjury
\end{document}
定义里的2cm是柱子之间的间距,随意调整。
记得去掉打印分割线的部分。
由于显而易见的原因,我必须加入史蒂文·西格尔和查克·诺里斯。
这个想法是以一种方便以各种方式使用的方式输入陪审团成员。所以我用它来测量左列,忽略右列,然后测量右列并将最宽的长度保存在参数中。然后使用给定的线宽排版列表。
答案2
为了确保两列都 100% 填充,请抓取最长的条目并将列宽设置为其长度。使用包\widthof
中的命令,这很容易calc
。
\documentclass{memoir}
\usepackage{tikz}
\usepackage{calc}
\begin{document}
\newcommand{\jury}{%
Président du jury et\newline examinateur interne & Nom du professeur\newline Institution \\%
Examinateur externe & Nom du professeur\newline Faculté ou département\newline Institution\\%
Examinateur interne & Nom du professeur\newline Institution \\%
Directeur de recherche & Jean-Claude Van Damme\newline ULB \\%
Codirecteur de recherche & Steve McQueen\newline USCFA
}
\thispagestyle{empty}
\newlength{\centeradjust}
\calccentering{\centeradjust} % Calculate center length and stores in centeradjust
\begin{adjustwidth*}{\centeradjust}{-\centeradjust} % Adjust center
\begin{adjustwidth}{-1cm}{-1cm}
\begin{tikzpicture}[remember picture,overlay]
\draw[red] (current page.north) -- (current page.south);
\end{tikzpicture}
\begin{center}
\begin{OnehalfSpace}
\vspace*{3\baselineskip}
{\Large Centered page using adjustwidth (as per the \texttt{memoir} manual)}
\vfill
The following table is not centered the way I want it to be.\\[1cm]
\renewcommand{\arraystretch}{2}
\begin{tabular}{ p{\widthof{Codirecteur de recherche}} @{\hspace{2em}} p{\widthof{Jean-Claude Van Damme}} @{}}
\jury
\end{tabular}
\vspace*{3\baselineskip}
\end{OnehalfSpace}
\end{center}
\end{adjustwidth}
\end{adjustwidth*}
\end{document}
答案3
请注意,在没有的\newline
地方添加空格。\linebreak
\documentclass{memoir}
\usepackage{array}
\usepackage{tikz}
\begin{document}
\newcommand{\jury}{%
Président du jury et\linebreak examinateur interne & Nom du professeur \newline Institution \\%
Examinateur externe & Nom du professeur \newline Faculté ou département \newline Institution \\%
Examinateur interne & Nom du professeur \newline Institution \\%
Directeur de recherche & Jean-Claude Van Damme \newline ULB \\%
Codirecteur de recherche & Steve McQueen \newline USCFA \newline
}
\thispagestyle{empty}
\newlength{\centeradjust}
\calccentering{\centeradjust} % Calculate center length and stores in centeradjust
\begin{adjustwidth*}{\centeradjust}{-\centeradjust} % Adjust center
\begin{adjustwidth}{-1cm}{-1cm}
\begin{tikzpicture}[remember picture,overlay]
\draw[red] (current page.north) -- (current page.south);
\end{tikzpicture}
\begin{center}
\begin{OnehalfSpace}
\vspace*{3\baselineskip}
{\Large Centered page using adjustwidth (as per the \texttt{memoir} manual)}
\vfill
The following table is not centered the way I want it to be.\\[1cm]
\renewcommand{\arraystretch}{2}%
\begin{tabular}{>{\raggedleft}p{5cm}|p{5cm}}
\jury
\end{tabular}% Note, without this comment or a \linebreak the center would be 1/2 space off.
\vspace*{3\baselineskip}
\end{OnehalfSpace}
\end{center}
\end{adjustwidth}
\end{adjustwidth*}
\end{document}