我正在尝试用 LaTeX 制作交通图表。我想要的图表如下所示。
答案1
似乎有一个部分解决方案表格单元格中的对角线。那里的示例使用 TikZ 来生成对角线。但是,我发现在 TikZ 中构建整个表格有点太繁琐了。我的解决方案是嵌套表格环境并定义一种新的列类型(以避免行中出现难看的断行)。这是我的代码——希望它不会太笨重。我省略了对角线:有关此内容,请参阅上面的链接。
\documentclass{article}
\usepackage{array}
\newcolumntype{C}{@{}c@{}}
\newcommand{\bottombox}[1]{\makebox[2em][r]{#1}\hspace*{\tabcolsep}\hspace*{2em}}%
\newcommand{\innerbox}[2]{%
\begin{tabular}[b]{c|c}
\rule{2em}{0pt}\rule[-2ex]{0pt}{5ex} & \makebox[2em]{#2} \\\cline{2-2}
\multicolumn{2}{r}{{#1}\hspace*{1.5\tabcolsep}\hspace*{2em}\rule[-2ex]{0pt}{5ex}}
\end{tabular}}
\renewcommand{\arraystretch}{1.25}
\begin{document}
\begin{tabular}{c|C|C|C|r}\hline
& A & B & C & Supply \\\hline
1 & \innerbox{}{12} & \innerbox{}{10} & \innerbox{600}{6} & 600 \\\hline
2 & \innerbox{400}{4} & \innerbox{}{15} & \innerbox{}{3} & 400 \\\hline
3 & \innerbox{300}{9} & \innerbox{}{7} & \innerbox{}{M} & 300 \\\hline
4 & \innerbox{}{11} & \innerbox{500}{8} & \innerbox{300}{6} & 800 \\\hline
Dummy & \innerbox{200}{0} & \innerbox{}{0} & \innerbox{}{0} & 200 \\\hline
Demand & \bottombox{900} & \bottombox{500} & \bottombox{900} & 2,300 \\\hline
\end{tabular}
\end{document}
答案2
看起来这可以用蒂克兹。 你可以
matrix of nodes
为所有条目构建。这里我指的是位于矩阵中的小条目,而不是大单元格。矩阵中的每个单元格都可用于绘制线条。因此,即使目前还没有自动化的方法,您也可以自己在节点之间用蓝色绘制所有线条,并根据需要进行锚定。
为了更清晰的代码和可重用性,定义样式,例如节点样式(某些数字的斜体字体、其他条目的粗体字体、框架条目、节点中的文本对齐)。
如果您能更新您的问题,展示您在决定如何解决问题后所做的努力,我们就能更好地帮助您。
答案3
我添加了对角线部分(至/从)。谢谢 Ellett
\documentclass{article}
\usepackage{array}
\usepackage{tikz}
\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},minimum height=\baselineskip+\extrarowheight] (box) {};
\draw (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}}
\newcolumntype{C}{@{}c@{}}
\newcommand{\bottombox}[1]{\makebox[2em][r]{#1}\hspace*{\tabcolsep}\hspace*{2em}}%
\newcommand{\innerbox}[2]{%
\begin{tabular}[b]{c|c}
\rule{2em}{0pt}\rule[-2ex]{0pt}{5ex} & \makebox[2em]{#2} \\\cline{2-2}
\multicolumn{2}{r}{{#1}\hspace*{1.5\tabcolsep}\hspace*{2em}\rule[-2ex]{0pt}{5ex}}
\end{tabular}}
\renewcommand{\arraystretch}{1.25}
\begin{document}
\begin{tabular}{c|C|C|C|r}\hline
\diag{.1em}{1.5cm}{From}{To}& A & B & C & Supply \\\hline
1 & \innerbox{}{12} & \innerbox{}{10} & \innerbox{600}{6} & 600 \\\hline
2 & \innerbox{400}{4} & \innerbox{}{15} & \innerbox{}{3} & 400 \\\hline
3 & \innerbox{300}{9} & \innerbox{}{7} & \innerbox{}{M} & 300 \\\hline
4 & \innerbox{}{11} & \innerbox{500}{8} & \innerbox{300}{6} & 800 \\\hline
Dummy & \innerbox{200}{0} & \innerbox{}{0} & \innerbox{}{0} & 200 \\\hline
Demand & \bottombox{900} & \bottombox{500} & \bottombox{900} & 2,300 \\\hline
\end{tabular}
\end{document}