表格单元格中 tikz 图片的垂直对齐

表格单元格中 tikz 图片的垂直对齐

我提前为问一个之前被问过的问题道歉。我读过 SE 上关于垂直对齐的其他帖子,但我对 Latex 很陌生,很难理解它们。我有一张两列表。一列是文本,另一列是 tikz 图片。下面是一个简化的示例。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tabular}{|p{0.5\textwidth}|c|}
\hline
Hello World &
\begin{tikzpicture}
\draw (-3, -3) rectangle (3,3);
\draw (-3,-3) -- (3,3);
\draw (-3,3)  -- (3,-3);
\end{tikzpicture} \\
\hline
\end{tabular}
\end{document}

当我在 Crunchbang (debian) 上使用 texlive 中的 pdflatex 进行编译时,Hello World 与第一个单元格的底部对齐。我认为在我的列参数中使用 p{...} 可以实现顶部对齐。有人能解释一下为什么这不起作用以及正确的方法吗?

答案1

此问题是由于左侧的文本被 tikzpicture 向下推造成的。可以使用以下方法解决adjustbox包裹:

\documentclass{article}
\usepackage{tikz}
\usepackage{adjustbox}

\begin{document}
\begin{tabular}{|p{0.5\textwidth}|c|}
\hline
Hello World &
\adjustbox{valign=t}{\begin{tikzpicture}
\draw (-3, -3) rectangle (3,3);
\draw (-3,-3) -- (3,3);
\draw (-3,3)  -- (3,-3);
\end{tikzpicture}}\\
\hline
\end{tabular}
\end{document}

编辑:好的,这里针对您遇到的问题的性质再做一些解释。

在 LaTeX 中,tabular环境会将相邻单元格的内容对齐,使它们的参考点位于同一水平线上。该选项的作用p{width}是用 包围列的内容\parbox[t]{...}。另一方面,默认情况下,由 生成的图片tikz的基线位于底部。这就是为什么您的示例中左侧的文本被图片向下推的原因。

baseline=0pt的参数通过tikz将 x 轴的位置强制到基线上来调整这一点。或者,您也可以使用baseline=(current bounding box.north)将图片的上端放在参考线上(或用 围绕图片\raisebox{-171.11646pt}{...},虽然我不太清楚为什么 参数不-6cm等于,但它可能与默认线宽-170.07874pt有关系)。此外,开头的 所做的是将单元格的参考点移动到该位置,这就是您似乎实现顶部对齐的原因。PGF0.4pt\vspace{0pt}

baseline下面是一张图片,展示了 tikzpicture 的三个选项(不带、带baseline和带)之间的区别baseline=(current bounding box.north),注意每种情况下参考点的位置(使用layouts包标记):

在此处输入图片描述

现在让我们回到我的答案。adjustboxwith 选项的valign=T作用与 基本相同baseline=(current bounding box.north),它将基线移动到图片的顶部。尽管如此,它还是valign=t将基线0.7\baselineskip从顶部移开,因此您可以获得更好的对齐效果(adjustboxwith 也适用tabularx):

在此处输入图片描述

答案2

发帖后,我发现我的问题实际上与 tikzpicture 的垂直对齐有关。如果我用多行文本替换上述代码的那部分,我就会得到我想要的对齐方式。沿着这些思路搜索,我在 SE 上发现了几个答案,我可以将它们结合起来解决我的问题。我还切换到 tabularx,因为我更喜欢 X 语法而不是 p{...}。

\documentclass{article}

\usepackage{tikz}
\usepackage{tabularx}

\begin{document}
\begin{tabularx}{\textwidth}{|c|X|}
\hline
Hello World &
\vspace{0pt}
\begin{tikzpicture}[baseline]
\draw (-3, -3) rectangle (3,3);
\draw (-3,-3) -- (3,3);
\draw (-3,3)  -- (3,-3);
\end{tikzpicture}
\\
\hline
\end{tabularx}
\end{document}

有两个键:一个是将 [baseline](默认为 0pt)添加到 tikzpicture。如果我只这样做,我会将文本大致对齐到图片的中间。有人建议使用 \vspace{0pt},我尝试了一下,发现它可以将文本移动到顶部。我不清楚为什么这个解决方案有效,但确实有效。

相关内容