如何对角线划分表格单元格...适应?

如何对角线划分表格单元格...适应?

我尝试采用这个解决方案 如何正确地对角线划分表格单元格? 满足我的需要。

但是我的宽度有问题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

我不是建议你使用 TiZ 对此,你应该使用\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} 

在此处输入图片描述

相关内容