我尝试采用这个解决方案 如何正确地对角线划分表格单元格? 满足我的需要。
但是我的宽度有问题1\tabcolsep
就是太短,但是任何长一点的都太长了,应该是2\tabcolsep
。
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{tabularx}
\usepackage{ragged2e}
\newcolumntype{C}[1]{>{\Centering}p{#1}}
\usepackage{tikz}
\newcommand\Tdiag[4]{%
\multicolumn{1}{|p{#2}|}{\hskip-\tabcolsep
\begin{tikzpicture}[%
baseline={(0,-.25\baselineskip)},
every node/.style={outer sep=0pt,inner sep=#1}]
\node[minimum width={#2+1\tabcolsep-\pgflinewidth},
minimum height=2\baselineskip-\pgflinewidth+\extrarowheight,
use as bounding box] (box) {};
\draw[line cap=round] (box.north west) -- (box.south east);
\node[anchor=south west,text width=.75*#2,align=left] at (box.south west) {#3};
\node[anchor=north east,text width=.75*#2,align=right] at (box.north east) {#4};
\end{tikzpicture}\hskip-\tabcolsep}}
\begin{document}
\begin{tabular}{|C{1.2cm}*{3}{|c}|}\hline
\Tdiag{.2em}{1.2cm}{\^Age}{Sexe}&
Féminin & Masculin & Totaux \\\hline
15 ans&&1&\\\hline
16 ans & 16 & & \\\hline
17 ans & 3 & & \\\hline
Totaux & & & 36 \\\hline
\end{tabular}
\end{document}
答案1
你不需要 TikZ 来实现这一点。一个简单的diagbox
包就可以解决问题:
\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{diagbox}
\begin{document}
\begin{table}\centering\setlength\tabcolsep{3.5pt}\renewcommand\arraystretch{1.25}
\noindent\makebox[\textwidth]{%
\begin{tabular}{|l|*{3}{c|}}
\hline
\diagbox[width=\dimexpr \textwidth/8+2\tabcolsep\relax, height=1cm]{ Âge }{Sexe}
& Féminin & Masculin & Totaux \\
\hline
15 ans & & 1 & \\
\hline
16 ans & 16 & & \\
\hline17 ans & 3 & & \\
\hline
Totaux & & & 36 \\
\hline
\end{tabular}
}%
\end{table}
\end{document}
答案2
确实有很多重复。我尝试在这里构建全面的答案。请随意编辑并添加更多选项。以下是我找到的所有选项,大致按最推荐的顺序排列:
- 使用包
nicematrix
、其环境{NiceTabular}
及其命令\diagbox
:答案 1 答案2。对角线规则由 PGF/Tikz 绘制。由于 PGF/Tikz 节点太多,因此需要多次编译。这个答案还展示了如何在行之间添加一些水平空间。 以下是详细讨论放大角落以获得完美的线条结尾。 - 使用包
diagbox
:答案 1 答案2。 - 这里
longtabu
是关于包的环境的讨论tabu
。 - 使用包
makecell
,\diaghead
但是看到这里的限制。 - 使用额外的表格线作为第二个标题,参见这个答案。
slashbox
是一个较旧的软件包(已被 diagbox 取代),如果仍要使用它,请参阅这个答案附有小费。- 你可能会
tikz
用这个答案。 - 甚至在 tikz 中绘制整个表格:答案 1 答案2 答案 3。
答案3
我不是建议你使用 Ti钾Z 对此,你应该使用\diagbox
或利用上面提到的其他包之一。但既然问题来了,为什么使用 Ti 时事情不能按预期工作钾Z,我想添加这种方法,据我所知,它不包含在上面的链接中。
关键是你需要\tabcolsep
从你想要放置 Ti 的单元格中移除钾Z 注意。您可以在列定义中使用相关列类型之前和之后来执行此操作@{}
。然后,您无需移动,tikzpicture
并且可以安全地2\tabcolsep
在节点宽度计算中使用:
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{tikz}
\newcolumntype{C}[1]{>{\Centering}p{#1}}
\newcommand\Tdiag[4]{%
\multicolumn{1}{|@{}p{#2}@{}|}{
\begin{tikzpicture}[
baseline={(0,-.25\baselineskip)},
every node/.style={outer sep=0pt, inner sep=#1}
]
\node[
minimum width={#2+2\tabcolsep-\pgflinewidth},
minimum height=2\baselineskip-\pgflinewidth+\extrarowheight,
use as bounding box] (box) {};
\draw[line cap=round] (box.north west) -- (box.south east);
\node[anchor=south west, text width=.75*#2, align=left]
at (box.south west) {#3};
\node[anchor=north east, text width=.75*#2, align=right]
at (box.north east) {#4};
\end{tikzpicture}%
}%
}
\begin{document}
\begin{tabular}{|C{1.2cm}*{3}{|c}|} \hline
\Tdiag{.2em}{1.2cm}{\^Age}{Sexe} &
Féminin & Masculin & Totaux \\ \hline
15 ans & & 1 & \\ \hline
16 ans & 16 & & \\ \hline
17 ans & 3 & & \\ \hline
Totaux & & & 36 \\ \hline
\end{tabular}
\end{document}
答案4
slashbox.sty
还有一个更简单的方法是使用MWE
:
\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{slashbox}
\begin{document}
\begin{table}\centering\setlength\tabcolsep{3.5pt}\renewcommand\arraystretch{1.25}
\noindent\makebox[\textwidth]{%
\begin{tabular}{|l|*{3}{c|}}
\hline
\backslashbox{ Âge }{Sexe}
& Féminin & Masculin & Totaux \\
\hline
15 ans & & 1 & \\
\hline
16 ans & 16 & & \\
\hline17 ans & 3 & & \\
\hline
Totaux & & & 36 \\
\hline
\end{tabular}
}%
\end{table}
\end{document}