表格单元格中的对角线

表格单元格中的对角线

我需要这张表:

桌子

(每行和每列应具有相同的高度和长度,最后一个单元格应由对角线分隔)。我尝试了以下代码:

\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}

导致
MWE 的汇编结果

如果您喜欢这个解决方案,请务必继续并对 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}

结果是
MWE2 的编译结果

答案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}

上述代码的输出

相关内容