如何创建这样的表格

如何创建这样的表格

我想创建这样的表格单元格来解决传输问题

在此处输入图片描述

我可以像这样创建,但不能在单元格中使用三个元素

    \documentclass[12pt,a4paper]{scrartcl}
    \usepackage[utf8]{inputenc}
    \usepackage[english,ukrainian]{babel}
    \usepackage{indentfirst}
    \usepackage{misccorr}
    \usepackage{graphicx}
    \usepackage{amsmath}
    \usepackage{multirow}
    \usepackage{array}

    \newcommand{\bottombox}[1]{\makebox[2em][r]{#1}\hspace*{\tabcolsep}\hspace*{2em}}%
    \newcommand{\innerbox}[2]{%
        \begin{tabular}[b]{cc}
           \rule{1em}{0pt}\rule[-2ex]{0pt}{5ex} & \makebox[1em]{#2} \\
           \multicolumn{2}{r}{{#1}\hspace*{1.5\tabcolsep}\hspace*{2em}\rule[-2ex]{0pt}{5ex}}
        \end{tabular}}
    \renewcommand{\arraystretch}{1.25}

    \begin{document}
        \begin{center} \begin{tabular}{|c|c|c|c|c|c|c|}
   \hline
   & $B_1$ & $B_2$ & $B_3$ & $B_4$ & $B_5$ & Запаси \\
   \hline
   $A_1$ & \innerbox{11}{17} & \innerbox{4}{20} & \innerbox{}{29} & \innerbox{}{26} & \innerbox{}{25} & 15   \\
   \hline
   $A_2$ & \innerbox{}{3} & \innerbox{7}{4} & \innerbox{8}{5} & \innerbox{}{15} & \innerbox{}{24} & 15   \\
    \hline
   $A_3$ & \innerbox{}{19} & \innerbox{}{2} & \innerbox{3}{22} & \innerbox{11}{4} & \innerbox{1}{13} & 15   \\
    \hline
   $A_4$ & \innerbox{}{20} & \innerbox{}{27} & \innerbox{}{1} & \innerbox{}{17} & \innerbox{15}{19} & 15   \\
   \hline
   Потреби & 11 & 11 & 11 & 11 & 16 & 60 \\
    \hline
   \end{tabular}
   \end{center}
    \end{document}

在此处输入图片描述

答案1

那么像这样的事情怎么办?

\documentclass{scrartcl}
\usepackage{makecell}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}

\begin{tabular}{c|P{1.5cm}|P{1.5cm}|P{1.5cm}|P{1.5cm}|P{1.5cm}}

 & $B_1$& $B_2$ & $B_3$ & $B_4$ & $B_5$\\
 $A_1$ & \makecell[r]{1} & \makecell[r]{4} & \makecell[r]{2} & \makecell[r]{5} & \makecell[r]{M}\\
  & 30 & 0 & 20 & 10 & 0\\
  & \makecell[l]{30} & \makecell[l]{10} & \makecell[l]{20} & \makecell[l]{10} & \makecell[l]{$\infty$}\\
\end{tabular}

\end{document}

在此处输入图片描述

在这个简短的例子中,我使用makecell包单独左对齐或右对齐单元格的内容。此外,我还定义了一种新的居中列类型P

答案2

填写缺失的数据:

\documentclass{article}

\newcommand{\threecell}[3]{% #1 = top, #2 = middle, #3 = bottom
  \renewcommand{\arraystretch}{1.2}%
  \begin{tabular}[t]{@{}c@{}}
  \makebox[2em][r]{#1}\\
  \makebox[2em][c]{#2}\\
  \makebox[2em][l]{#3}
  \end{tabular}
}

\begin{document}

\begin{tabular}{|*{6}{c|}}
\hline
& $B_1$ & $B_2$ & $B_3$ & $B_4$ & $B_5$ \\
\hline
\makebox[2em]{$A_1$} &
  \threecell{1}{30}{30} &
  \threecell{4}{0}{10} &
  \threecell{2}{20}{20} &
  \threecell{5}{10}{10} &
  \threecell{M}{0}{$\infty$} \\
\hline
\makebox[2em]{$A_2$} &
  \threecell{2}{0}{10} &
  \threecell{1}{10}{10} &
  \threecell{4}{10}{10} &
  \threecell{1}{10}{20} &
  \threecell{M}{0}{$\infty$} \\
\hline
\end{tabular}

\end{document}

在此处输入图片描述

答案3

以下是我想出的替代解决方案:

\documentclass{scrartcl}

\newcommand{\diagarraythree}[3]{$\begin{array}{ccc}  & & #1 \\%
                                                     & #2 & \\%
                                                     #3 & &  \end{array}$}

\begin{document}
\begin{tabular}{c|c|c|c|c|c}
 & $B_1$& $B_2$ & $B_3$ & $B_4$ & $B_5$\\
  $A_1$ & \diagarraythree{1}{30}{30} & \diagarraythree{4}{0}{10} & \diagarraythree{2}{20}{20} & \diagarraythree{5}{10}{10} & \diagarraythree{M}{0}{\infty} \\
\end{tabular}  
\end{document}

在此处输入图片描述

在这个解决方案中,我使用array环境来定位数字。为了简化代码,我定义了一个新命令diagarraythree,该命令将三个数字作为参数,并将它们打印在 3x3 矩阵的对角线上,如图所示。

这种方法的好处:

  • 减少打字
  • 无需猜测表格单元格的适当宽度
  • 可扩展到对齐四个或更多条目

该代码可轻松适应四个或更多条目的类似对齐,如以下示例所示:

\documentclass{scrartcl}

\newcommand{\diagarrayfour}[4]{$\begin{array}{cccc} & & & #1 \\%
                                                    & & #2 & \\%
                                                    & #3 & & \\
                                                    #4 & & &  \end{array}$}

\begin{document}
\begin{tabular}{c|c|c}
 & $B_1$& $B_2$ \\
  $A_1$ & \diagarrayfour{1}{30}{30}{5} & \diagarrayfour{4}{0}{10}{5}  \\
\end{tabular}
\end{document}

在此处输入图片描述

相关内容