禁忌包-垂直线中的间隙

禁忌包-垂直线中的间隙

我遇到一个不幸的情况,我必须在 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\Blocknicematrix

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 底层的子层)。

相关内容