曾经有许多讨论解决方案的帖子在表格单元格中绘制对角线的任务。还有两个包可以执行此操作,并且使用命令slashbox
看起来更好。显然,看起来更好并不意味着好看。我刚刚从其中一个线程中偷了一个 MWE:makecell
\diaghead
https://tex.stackexchange.com/a/11694/13450
\documentclass{standalone}
\usepackage{makecell}
\begin{document}
\begin{tabular}{|l|c|c|}\hline
\diaghead{\theadfont Diag ColumnmnHead II}%
{Diag\\Column Head I}{Diag Column\\Head II}&
\thead{Second\\column}&\thead{Third\\column}\\
\hline
& foo & bar \\
\hline
\end{tabular}
\end{document}
结果是:
在这种低分辨率下乍一看还算不错(顺便说一下,情况并非总是如此),但在更高的分辨率下,右下角看起来有些尴尬:
这些东西甚至在打印时也显示出来,而且看起来不像只偏离一个像素,所以它可能不仅仅是一个渲染问题。
有谁知道为什么会发生这种情况以及如何防止它?(最好不要像建议的那样将整个表格绘制为 TikZ 图片。)
针对约瑟夫的回答进行编辑:
Leo Liu 的 TikZ 解决方案也存在类似问题https://tex.stackexchange.com/a/17748
看起来它也相当手动,所以也许这只是一个校准问题。但是,每次更改“对角线单元格”(找不到更好的词)的内容时,真的有必要在 Adobe Reader 中降低到 6400% 级别来微调参数吗?
答案1
tikz 解决方案给出表格单元格中的对角线由 Leo Liu 提出的问题可以通过考虑节点边框的宽度来修复(即使没有绘制这些边框)。
以下 MWE 给出了正确的结果:
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{makecell}
\newcolumntype{x}[1]{>{\centering\arraybackslash}p{#1}}
\usepackage{tikz}
\newcommand\diag[4]{%
\multicolumn{1}{p{#2}|}{\hskip-\tabcolsep
$\vcenter{\begin{tikzpicture}[baseline=0,anchor=south west,inner sep=#1]
\path[use as bounding box] (0,0) rectangle (#2+2\tabcolsep,\baselineskip);
\node[minimum width={#2+2\tabcolsep-\pgflinewidth},
minimum height=\baselineskip+\extrarowheight-\pgflinewidth] (box) {};
\draw[line cap=round] (box.north west) -- (box.south east);
\node[anchor=south west] at (box.south west) {#3};
\node[anchor=north east] at (box.north east) {#4};
\end{tikzpicture}}$\hskip-\tabcolsep}}
\begin{document}
\setlength{\extrarowheight}{0.1cm}
\begin{tabular}{|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|}\hline
&&&&20\\ \hline
&&&&30\\ \hline
&&&&45\\ \hline
15&12&18&50&\diag{.1em}{.5cm}{$a_i$}{$b_j$}\\ \hline
\end{tabular}
\end{document}
细节:
答案2
该makecell
软件包使用 LaTeXpicture
环境进行绘图。它不使用特殊字体,而是使用存储在适当字体中的预绘制图形元素。但是,这种方法只能提供固定范围的线条斜率(还有其他限制)。这里似乎发生的情况是,它makecell
使用最接近的高度/宽度,但这意味着宽度可能会超出一定量,这取决于实际高度/宽度比和最接近的可用线条斜率之间的差异。
具体来说,\diaghead
有一个可选的 ratio 参数,用于设置高宽比,但这必须是整数值(尝试)。因此,即使有更多扩展支持(例如包) \diaghead(5,-2.5)
,代码也不允许我们绕过可用的固定比率。picture
eepic
使用 TikZ 可以避免这个问题,因为线条随后会被绘制成特殊形状,可以是任意角度。(特殊形状的限制取决于驱动程序,而不是可用的字体)。还值得注意的是,TikZ 从一开始就假设浮点值,因此可以正确处理计算。
解决这个问题的方法有很多种表格单元格中的对角线(特别参见Leo Liu 的回答,它只使用 TikZ 来处理分裂细胞)。diagbox
包也可用:它使用pict2e
来实现分箱。
答案3
使用{NiceTabular}
及其nicematrix
内置命令\diagbox
,您将获得完美的输出,因为对角线规则是由 PGF/Tikz 绘制的。
\documentclass{standalone}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{|w{l}{4cm}|c|c|}\hline
\rule[-5mm]{15mm}{0cm}
\diagbox{Diag\\ Column Head I}{Diag Column\\Head II}&
\Block{}{Second\\column}&\Block{}{Third\\column}\\
\hline
& foo & bar \\
\hline
\end{NiceTabular}
\end{document}
由于 PGF/Tikz 节点,您需要进行多次编译。
使用缩放: