我遇到一个不幸的情况,我必须在 LaTeX 中制作一个带有粗垂直线的表格。由于在默认的表格环境中似乎无法做到这一点,因此我选择了 tabu 包。我知道大约一年前有人讨论过它的进一步可用性,但我没有发现其他可能性,所以我决定尝试一下。
它对我来说效果很好,但是我的布局中有一条水平线,只有一半是粗的,因此垂直线对于细的部分来说结束得太早,留下了难看的缝隙。
布局如下:
这就是我目前得到的:
由此代码生成:
%文档类别 \documentclass[横向]{字母} %包 \usepackage[景观]{几何} \usepackage[utf8] {输入框} \usepackage {多行} \使用包 {禁忌} %格式化 \pagestyle{empty} %删除编号 \开始{文档} \begin{tabu}{ |[1pt] l | ll | l | l |[1pt] } \tabucline[1 分]{1-5} \multicolumn{2}{ |[1pt] l }{ } & \multicolumn{3}{ |[1pt] l |[1pt]}{ } \\ \hline & & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\ \hline & & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\ \tabucline[1 pt]{3-5} \hline & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \tabucline[1 pt]{1-5} \结束{禁忌} \结束{文档}
除了必须进行一些大小调整之外,您还可以看到第一列和第二列中第三行的间隙。
我还没有找到任何解决方案。这个问题可以用 tabu 解决吗?还有其他可用于此目的的软件包吗?
答案1
\tabucline
一种方法是使用向上移动跳跃至中间高度之前\\[-1pt]
。请参阅下面的第二种方法。
%Dokumentclass
\documentclass[landscape]{letter}
%Packages
\usepackage[landscape]{geometry}
\usepackage[utf8] {inputenc}
\usepackage {multirow}
\usepackage {tabu}
%Formatting
\pagestyle{empty} %Remove numbering
\begin{document}
\begin{tabu}{ |[1pt] l | l l | l | l |[1pt] }
\tabucline[1 pt]{1-5}
\multicolumn{2}{ |[1pt] l }{ } & \multicolumn{3}{ |[1pt] l |[1pt]}{ } \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\ \hline
y & & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\[-1pt] \tabucline[1 pt]{3-5}
\hline
x & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \tabucline[1 pt]{1-5}
\end{tabu}
\end{document}
或者,如果您想让细线平分粗线,那么这种方法:\\[-1pt] \tabucline[1 pt]{3-5}\\[-12.5pt]\hline
有效。
%Dokumentclass
\documentclass[landscape]{letter}
%Packages
\usepackage[landscape]{geometry}
\usepackage[utf8] {inputenc}
\usepackage {multirow}
\usepackage {tabu}
%Formatting
\pagestyle{empty} %Remove numbering
\begin{document}
\begin{tabu}{ |[1pt] l | l l | l | l |[1pt] }
\tabucline[1 pt]{1-5}
\multicolumn{2}{ |[1pt] l }{ } & \multicolumn{3}{ |[1pt] l |[1pt]}{ } \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\ \hline
y & & \multicolumn{1}{ |[1pt] l | }{ } & \multicolumn{2}{ l |[1pt] }{ } \\[-1pt] \tabucline[1 pt]{3-5}\\[-12.5pt]
\hline
x & & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \hline
& & \multicolumn{1}{ |[1pt] l | }{ } & & \\ \tabucline[1 pt]{1-5}
\end{tabu}
\end{document}
答案2
您可以使用{NiceTabular}
of来实现这一点nicematrix
。在该环境下,密钥将绘制由和hvlines
创建的块中除此以外的所有规则(本例中未使用of 命令)。\multicolumn
\Block
nicematrix
nicematrix
在数组的单元格、行和列下创建 PGF/Tikz 节点。可以将这些节点与 Tikz 一起使用来绘制您想要的任何规则。在下面的代码中,我使用 Tikz 绘制了粗规则。
\documentclass{article}
\usepackage{nicematrix,tikz}
\pagestyle{empty}
\begin{document}
\begin{NiceTabular}{lllll}[hvlines]
\Block{1-2}{ } && \Block{1-3}{} \\
& & & \Block{1-2}{} \\
y & & & \Block{1-2}{} \\
x & & & & \\
\\
\\
\\
\CodeAfter
\begin{tikzpicture}
\draw [line width = 1pt]
(1-|1) rectangle (8-|6)
(1-|3) -- (8-|3)
(4-|3) -- (4-|6) ;
\end{tikzpicture}
\end{NiceTabular}
\end{document}
您需要多次编译,因为 PGF/Tikz 节点写在aux
文件中。
也可以使用指令来绘制粗线\Block
(使用键draw
绘制框架并line-width
指定线的粗细)。
\documentclass{article}
\usepackage{nicematrix}
\pagestyle{empty}
\NewDocumentCommand{\ThickFrame}{}{\Block[transparent,draw,line-width=1pt]}
\begin{document}
\begin{NiceTabular}{lllll}[hvlines]
\ThickFrame{*-2}{}
\Block{1-2}{ } && \ThickFrame{3-*}{}
\Block{1-3}{} \\
& & & \Block{1-2}{} & \\
y & & & \Block{1-2}{} \\
x & & \ThickFrame{*-*}{} \\
\\
\\
\\
\end{NiceTabular}
\end{document}
使用该技术,您就不需要使用 TikZ(尽管nicematrix
使用 PGF,即 TikZ 底层的子层)。