我想创建这样的表格单元格来解决传输问题
我可以像这样创建,但不能在单元格中使用三个元素
\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}