单元格中缺少垂直线

单元格中缺少垂直线

我尝试使用 Tikz 在下表的第一个单元格中绘制一条对角线。但其左侧的垂直边框丢失了。我该如何修复它?代码如下:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{makecell}

\newcolumntype{x}[1]{>{\rule[-2.5mm]{0pt}{5.5mm}%
                     \centering\arraybackslash}p{#1}}
\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.2cm}
    \begin{tabular}{|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|}\hline
    \diag{.1em}{.5cm}{$X$}{$Y$}&12&18&50&16\\ \hline
    &&&&20\\ \hline
    &&&&30\\ \hline
    &&&&45\\ \hline
    15&12&18&50&32\\ \hline
    \end{tabular}

    \end{document}

输出为:

在此处输入图片描述

编辑:我使用了代码

\documentclass{article}

\usepackage{makecell}
\newcolumntype{x}[1]{>{\centering\arraybackslash}p{#1}}

\begin{document}

\begin{table}[tbp]
 \begin{center}
  \setcellgapes{5pt} \makegapedcells \setlength\extrarowheight{1pt}
  \begin{tabular}{|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|}\hline
        \diaghead(-1,1){XX}{$X$}{$Y$}   & 0 & 1 & 2 & 3\\ \hline
        0 & $\frac{1}{20}$ & $\frac{2}{20}$ & $\frac{1}{20}$ & $\frac{1}{20}$\\ \hline
        1 & $\frac{2}{20}$ & $\frac{3}{20}$ & $0$&$\frac{1}{20}$\\ \hline
        2 & $\frac{3}{20}$ & $0$ & $\frac{4}{20}$ & $\frac{2}{20}$\\ \hline
   \end{tabular}
 \end{center}
\end{table}

\end{document}

我如何调整对角线以正确链接第一个单元格中的角?

答案1

使用(≥ 4.0),您可以像之前一样绘制表格,并且您有一个命令(仅在 环境中可用)可以绘制问题中要求的内容。此外,{NiceTabular}您可以使用绘制所有规则的键来简化代码。nicematrix\diagboxnicematrixhvlines

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\setlength{\extrarowheight}{2mm}
\begin{NiceTabular}{ccccc}[columns-width=5mm,hvlines]
\diagbox{$X$}{$Y$}&12&18&50&16\\ 
&&&&20\\ 
&&&&30\\ 
&&&&45\\ 
15&12&18&50&32
\end{NiceTabular}

\end{document}

上述代码的结果

如果要垂直居中单元格内容,可以使用{tabular}的所有技术array。也许更简单的方法是添加带有 的支柱\rule

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\setlength{\extrarowheight}{2mm}
\begin{NiceTabular}{>{\rule[-2.5mm]{0pt}{5.5mm}}ccccc}[columns-width=5mm,hvlines]
\diagbox{$X$}{$Y$}&12&18&50&16\\ 
&&&&20\\ 
&&&&30\\ 
&&&&45\\ 
15&12&18&50&32
\end{NiceTabular}

\end{document}

第二次 MWE 的结果

答案2

\multicolumn{1}...不仅可以覆盖单元格的水平对齐,还可以删除/添加该单元格两侧的垂直线。

在该命令的原始定义中\diag,您使用了\multicolumn{1}{p{#2}|}在单元格右侧添加垂直线的命令。将其更改为在\multicolumn{1}{|p{#2}|}.|前添加一个额外的右侧,p...以便在单元格的左侧也添加垂直线。

答案3

由于您加载makecell我将使用它的宏\diaghead

该包根据图片环境的可能性提供宏。

\diaghead(<H ratio,V ratioi>){<Text set for column
> width>}% {<First head>}{<Second head>} 

其中 () 设置比率,就像 \line 命令中一样(数字从 1 到 6)。此参数是可选的,默认比率(\line 方向)定义为 (5,-2)。

\documentclass{article}
\usepackage{makecell}
\newcolumntype{x}[1]{>{\centering\arraybackslash}p{#1}}


\begin{document}
    \begin{table}[ht]
    \setcellgapes{5pt}
    \makegapedcells
\begin{tabular}{|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|x{0.5cm}|}\hline
\diaghead(-1,1){XX}{$Y$}{$X$}   & 12 & 18 & 50 & 16 \\ \hline
                                &    &    &    & 20 \\ \hline
                                &    &    &    & 30 \\ \hline
                                &    &    &    & 45 \\ \hline
                            15  &12  & 18 & 50 & 32 \\ \hline
\end{tabular}
    \end{table}
\end{document}

在此处输入图片描述

相关内容