我需要这张表:
(每行和每列应具有相同的高度和长度,最后一个单元格应由对角线分隔)。我尝试了以下代码:
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{makecell}
\newcolumntype{x}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\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&\diaghead(-3,2){\hskip \hsize}{$a_i$}{$b_j$}\\ \hline
\end{tabular}
\end{document}
但最后一个单元格中的文本显示不正确,并且单元格不一样。
我怎样才能改变这一点?
答案1
编者注:下面的解决方案由于线宽而存在不准确性,请参阅https://tex.stackexchange.com/a/89840/250119进行修复。
精确解为TikZ
:
\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},minimum height=\baselineskip+\extrarowheight] (box) {};
\draw (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}
此外,它是的重新实现\diaghead
。
答案2
好吧,因为这似乎是所有重复最终都会链接到的问题,我想包括@Leo Liu 的解决方案这里这似乎是用最简单的方法解决问题。
简而言之:使用@Leo Liu 的包诊断框。
MWE(来自不同的背景并且并不准确回答这个问题)厚颜无耻地抄袭了 Leo 的回答(上面的链接):
\documentclass{article}
\usepackage{diagbox}
\begin{document}
\begin{tabular}{|l|c|c|}\hline
\diagbox[width=10em]{Diag\\Column Head I}{Diag Column\\Head II}&
Second & Third \\ \hline
& foo & bar \\ \hline
\end{tabular}
\end{document}
如果您喜欢这个解决方案,请务必继续并对 Leo 的原始答案表示喜爱。
不可否认的是,这个解决方案与提供的 MWE 配合得不是很好(开箱即用),但如果使用普通列类型而不是自定义列类型,就会得到非常好的结果:
\documentclass{standalone}
\usepackage{diagbox}
\begin{document}
\begin{tabular}{|c|c|c|c|c|}
\hline
& & & & 20 \\ \hline
& & & & 30 \\ \hline
& & & & 45 \\ \hline
15 & 12 & 18 & 50 & \diagbox{$a_i$}{$b_j$} \\ \hline
\end{tabular}
\end{document}
答案3
也许可以绘制一条正好适合表格单元格的对角线,但将整个表格绘制为图片可能更容易。
这是我尝试使用的tikz
。对于大型表格,每个单元格都需要节点,这可能需要付出很大努力,但对于较小的表格来说应该没问题。
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=.75cm,y=.5cm]
\draw (0,0) grid [step=1] (5,4);
\node at (0.5,0.5) {15};
\node at (1.5,0.5) {12};
\node at (2.5,0.5) {18};
\node at (3.5,0.5) {50};
\node at (4.5,3.5) {20};
\node at (4.5,2.5) {30};
\node at (4.5,1.5) {45};
\draw (4,1) -- (5,0);
\node at (5.0,1.0) [below left,inner sep=1pt] {\small$a_i$};
\node at (4.0,0.0) [above right,inner sep=1pt] {\small$b_j$};
\end{tikzpicture}
\end{document}
答案4
{NiceTabular}
带有 的解决方案nicematrix
具有内置命令\diagbox
。此外,您只需一个键 即可绘制所有规则hvlines
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\setlength{\extrarowheight}{1mm}
\begin{NiceTabular}{ccccc}[hvlines]
& & & & 20 \\
& & & & 30 \\
& & & & 45 \\
15 & 12 & 18 & 50 & \diagbox{$a_i$}{$b_j$} \\
\end{NiceTabular}
\end{document}