根据列分隔符的位置放置表格

根据列分隔符的位置放置表格

我有一张表格,其中有两列,宽度不同。我想将表格放置在页面中,使两列之间的线位于页面的中心。

如果列的大小相同,那么这将是微不足道的,但事实并非如此。

答案1

您可以测量列宽(可能需要两次连续的编译),将整个表放入保存箱中进行计算,并在相应的移动后使用它。

注意:我添加了一个0.5\textwidthrule示例以供演示。

enter image description here

\documentclass{article}

\usepackage{environ}

\makeatletter
\NewEnviron{mtabular}[3][c]{%
  \begingroup
  \renewcommand{\multicolumn}[3]{\multispan{##1}##3}%
  \let\\\cr
  \setbox\tw@=\vbox{
    \ialign{&##\unskip\hfil\cr\BODY\crcr}%
    \get@widths{#3}%
  }%
  \endgroup
  \begin{tabular}[#1]{#2}\BODY\end{tabular}}

\def\get@widths#1{%
  \def\@temp{\else\@latex@warning{No such column}\fi}
  \setbox\z@=\lastbox
  \get@next@width
  \xdef#1##1{%
    \noexpand\ifcase##1\relax\unexpanded\expandafter{\@temp}%
  }%
}
\def\get@next@width{%
  \setbox\z@=\hbox{\unhbox\z@\unskip\global\setbox\@ne=\lastbox}%
  \ifvoid\@ne
  \else
    \edef\@temp{\noexpand\or\the\wd\@ne\unexpanded\expandafter{\@temp}}%
    \expandafter\get@next@width
  \fi
}
\makeatother

\newsavebox{\mybox}

\begin{document}

\noindent\rule{0.5\textwidth}{1pt} % demo only

\begin{lrbox}{\mybox}%
\begin{mtabular}{|l|c|r|}{\foo}%
alma bagoly & alma & bagoly \\\hline
BAGOLY & \multicolumn{2}{|c|}{alma bagoly alma} \\\hline
bagoly & bagoly & bagoly
\end{mtabular}%
\end{lrbox}

\noindent%
\hspace*{0.5\textwidth}%
\hspace*{-\foo{1}}%
\hspace*{-2\tabcolsep}%
\usebox{\mybox}

\end{document}

移动说明:向中间移动,向后移动第一列内容宽度,向后移动2个列分隔长度。

与测量列宽相关的内容: 测量表格的列宽

答案2

我不确定如何做到tabular这一点,但使用普通的 TeX 并不太难halign

$$\vbox{\halign{\hbox to 1in{\hss #}\ &\ \hbox to 1in{#\hss}\cr
Items on the left&Something on the right\cr
More on the left&With very long lines on the right too.\cr
}}$$

这个想法是使用两个固定宽度的框进行对齐,然后\hss分别使用忽略左侧和右侧的宽度。 \hss产生根据需要拉伸或收缩的粘合。您可以将框设置为任何合理的宽度,因为我们忽略了内容的宽度。如果它们的宽度相同,则间距将位于中间。如果您想以不同的比例拆分列,可以调整框的宽度。

一旦我们有了它,halign我们就将它包装在一个中vbox,然后在一个数学显示中,使它很好地位于页面的中心。

相关内容