我尝试使用 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
\diagbox
nicematrix
hvlines
\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}
答案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}