我是 LaTeX 新手,我想制作一个表格,其中元素垂直和水平居中。我搜索过这个问题,似乎大多数人都试图做比这更复杂的事情,结果得到了我无法理解的复杂答案。下面的表格已经水平居中,但元素与单元格顶部对齐,而不是中心对齐。我该如何解决这个问题?
\begin{tabular}{*{5}{|c}|}
\hline
$p$ & $q$ & $p \land q$ & $p \lor q$ & $p \to q$\\
\hline
T & T & T & T & T\\
\hline
T & F & F & T & F\\
\hline
F & T & F & T & T\\
\hline
F & F & F & F & T\\
\hline
\end{tabular}
答案1
常规文本中从基线到基线的垂直跳跃由 给出\baselineskip
。在 内tabular
,这是0pt
但它仍然可以作为 访问。使用您的示例作为参考,可以清楚地看到,在绘制高度为 的垂直规则\normalbaselineskip
时,垂直基线跳跃仍然成立:1pt
\normalbaselineskip
\documentclass{article}
\begin{document}
\begin{tabular}{*{5}{|c}|}
\hline
$p$ & $q$ & $p \land q$ & $p \lor q$ & $p \to q$\\
\hline
T & T & T\smash{\rule{1pt}{\normalbaselineskip}} & T & T\\
\hline
T & F & F & T & F\\
\hline
F & T & $f$ & T & T\\
\hline
F & F & F & F & T\\
\hline
\end{tabular}
\end{document}
如果您有一个非常特殊的表格(例如示例中的表格),其中基线对齐似乎不够充分,您可以尝试添加垂直“支柱”,如以下示例所示:
\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\begin{document}
\newlength{\mylen}\settowidth{\mylen}{$p \to q$}% Widest element
\begin{tabular}{*{5}{|>{\centering\arraybackslash\rule{0pt}{1.05em}}m{\mylen}}|}
\hline
$p$ & $q$ & $p \land q$ & $p \lor q$ & $p \to q$\\
\hline
T & T & T & T & T\\
\hline
T & F & F & T & F\\
\hline
F & T & F & T & T\\
\hline
F & F & F & F & T\\
\hline
\end{tabular}
\end{document}
使用array
包裹<stuff>
,它允许您使用 在每个表列条目前插入>{<stuff>}
。使用m{<width>}
列规范,我已固定了列宽(我认为这样看起来更干净)并恢复为c
-columns 提供的居中。
虽然这可能是基于个人偏好的争论点,但可以考虑使用booktabs
包裹排版表格:
\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\usepackage{booktabs}% http://ctan.org/pkg/booktabs
\begin{document}
\newlength{\mylen}\settowidth{\mylen}{$p \to q$}% Widest element
\begin{tabular}{*{5}{>{\centering\arraybackslash}m{\mylen}}}
\toprule
$p$ & $q$ & $p \land q$ & $p \lor q$ & $p \to q$ \\
\midrule
T & T & T & T & T \\
T & F & F & T & F \\
F & T & F & T & T \\
F & F & F & F & T \\
\bottomrule
\end{tabular}
\end{document}