仅将表格单元格中的部分内容居中

仅将表格单元格中的部分内容居中

我有一张表格,我想将部分内容置于单元格的中心,其余内容则根据此进行调整。最小(非)工作示例:

\documentclass{standalone}
\begin{document}
\begin{tabular}{c}
Reference \\
CenterThisPartButNotThisPart
\end{tabular}
\end{document}

在这个特定的例子中,我想要实现的是让“CenterThisPart”居中,就像它是唯一的内容一样,而让其余文本(“ButNotThisPart”)继续向右。

为了提供一些背景信息,我想尝试这样做:我将数字放在一个表中,其中一些数字带有星号以表示显著的 p 值。我希望所有数字都排成一行,无论它们是否带有星号。

答案1

编辑:@Wipet 的答案结构更好,并且可以在更复杂的情况中发挥作用。此解决方案不考虑相邻单元格的内容。


那么,如果只制作一个不占用水平空间的星号怎么样?

代码:

\documentclass{article}

\newcommand{\rhangstar}{\makebox[0pt][r]{*}}
\newcommand{\lhangstar}{\makebox[0pt][l]{*}}

\begin{document}
\begin{tabular}{c}
1234567890\lhangstar \\
12347890\lhangstar \\
0654321 \\
321645789\lhangstar \\
\rhangstar321645789
\end{tabular}
\end{document}

输出:

在此处输入图片描述

这可以很容易地实现为宏来处理(我猜)任何类型的文本。

代码:

\documentclass{article}

\newcommand{\rhang}[1]{\makebox[0pt][r]{#1}}
\newcommand{\lhang}[1]{\makebox[0pt][l]{#1}}

\begin{document}
\begin{tabular}{c}
CenterThisPart\lhang{ButNotThisPart} \\
CenterThis\lhang{ButNotThis} \\
0654321 \\
321645789CenterThisPart\lhang{ButNotThisPart} \\
\rhang{ThisPart}321645789
\end{tabular}
\end{document}

输出: 在此处输入图片描述

答案2

从一般角度来看,这是一个非常有趣的问题(即使您的应用程序中可能不需要这样的通用解决方案)。

我们需要的是:表格中的居中列,有时在项目的右侧有一个智能\rlap(在我的示例中)。当项目居中时(即忽略其宽度),这表现正常,但在创建表格的下一列时,不能忽略其宽度。\rl\rl\rlap

我们不能将最大的\rl数据视为相关数据(这是在此处的另一个答案中完成的),因为这个最大的数据\rl可能用于非常小的中心项目上下文中。有两种情况:

|  CCxxxxxx|                          |  CCxxx | 
|CCCCCCxx  | ... first line wins      |CCCCCCxx|  ... second line wins

问题是,在排版表格项时,我们不知道哪一行获胜。只有在创建表格的最后一行后才知道这一点。因此,我们需要在表格的最后一行进行一些框计算。\fin在我的示例中,这是通过宏完成的。

\newbox\boxA \newbox\boxB \newbox\boxC
\def\addbox#1#2{\global\setbox#1=\vbox{\unvbox#1\lastbox\box#2}}
\def\fin{\splittopskip=10pt plus 2pt \setbox0=\vsplit\boxA to0pt \setbox0=\vsplit\boxB to0pt
   \setbox\boxC=\vbox{}\dimen0=\wd\boxA
   \loop
      \setbox0=\vsplit\boxA to\baselineskip
      \dimen1=\dimen0 \advance\dimen1 by-\wd0 \divide\dimen1 by2
      \setbox\boxC=\vbox{\unvbox\boxC\hbox{\kern\dimen1\box0 \vsplit\boxB to\baselineskip}}%
      \unless\ifvoid\boxA \repeat
   \advance\dimen0 by-\wd\boxC
   \kern-\dimen0
}
\def\rl#1{\rlap{#1}\global\setbox\boxC=\hbox{#1}} 

\setbox\boxA=\vbox{\penalty-10000} \setbox\boxB=\vbox{\penalty-10000}   
\setbox\boxC=\hbox{}
\halign{#\unskip
   &\hfil\global\setbox\boxC=\hbox{}\setbox0=\hbox{#\unskip}\copy0\addbox\boxA0\hfil
   &\addbox\boxB\boxC#\unskip\hfil&#\unskip\cr
%
  L & Reference                              &&     R \cr
  L & CenterThisPart\rl{*ButNot}             &&     R \cr
  L & CenterThis\rl{*ButNotThisPartPartPart} &&     R \cr
  L & CenterThisP\rl{*ButNotThisPart}        &&     R \cr
  L & CenterThisPa\rl{*ButNotThisPart}       &\fin& R \cr
}
\bye

L和列R在这里只是为了确保我们的列的总尺寸计算正确。您可以使用此示例进行实验(pdftex test当然,使用命令)。例如,您可以更改此示例中居中或 r 搭接部分的字符串长度。

工作原理:创建表格后,其\rl行为类似于\rlap,但居中部分复制到\boxA,而右搭接部分复制到\boxB。在最后一行和下面的空列中,我们使用\fin宏开始框计算。\boxA\boxB重新框定,以模拟居中列的情况,但具有\rl零件的实际尺寸。结果保存到\boxC。最后,我们执行\kern d,其中是和的d宽度之差。\boxA\boxC

编辑请注意,接受的解决方案(分配了 250 分)不能解决原始任务。这里使用的是简单的\llap和,而不是智能的,。当您尝试时,您会看到不良影响:\rlap\llap\rlap

\documentclass{article}

\newcommand{\rhang}[1]{\makebox[0pt][r]{#1}}
\newcommand{\lhang}[1]{\makebox[0pt][l]{#1}}

\begin{document}
\begin{tabular}{c|c|c}
L&CenterThisPart\lhang{ButNotThisPart} & R \\
L&CenterThis\lhang{ButNotThis} & R \\
L&0654321 & R \\
L&321645789CenterThisPart\lhang{ButNotThisPart} & R \\
L&\rhang{thisthisThisPart}321645789 & R
\end{tabular}
\end{document}

答案3

也许是这样的?

\documentclass{standalone}
\begin{document}

\newlength\mylength
\settowidth\mylength{ButNotThisPart}% longest "ButNotThisPart"

\begin{tabular}{c@{}p{\mylength}}
  Reference & \\
  CenterThisPart\makebox[0pt][l]{ButNotThisPart}\\
  CenterThisPart\makebox[0pt][l]{ButNot}\\
  Center\makebox[0pt][l]{ButNotThisPart}\\
  Center\makebox[0pt][l]{ButNot}\\
\end{tabular}

\end{document}

请注意&后面的参考。

在此处输入图片描述

答案4

您可以使用 将星号括起来,\lefteqn这样它的宽度为零。

\documentclass{article}
\begin{document}
\begin{tabular}{c}
Reference \\
.1234\lefteqn{{}^*}\\
.1234\\
CenterThisPart\lefteqn{\mbox{ButNotThisPart}}
\end{tabular}
\end{document}

这就是你所想的吗?

在此处输入图片描述

相关内容