表格的 \cline 超出单元格的边框

表格的 \cline 超出单元格的边框

以下代码创建了两个上下并列的 2×2 表格。在第一个表格中,一条水平线将第二列的两行分隔开,而在第二个表格中,一条水平线将第一列的两行分隔开。

\documentclass{article}
\usepackage{multirow}
\begin{document}
\begin{tabular}{ |c||c| }
\hline
A & B\\
\cline{2-2}
C & D\\
\hline
\end{tabular}

\vspace{.3cm}

\begin{tabular}{ |c||c| }
\hline
A & B\\
\cline{1-1}
C & D\\
\hline
\end{tabular}
\end{document}

当使用 进行编译时pdflatex,会产生以下输出。

在左侧和右侧使用时 cline 的行为不同

注意第一个和第二个表格之间的区别。在第一个表格中,水平分隔符包含在列的两个垂直边框之间,但在第二个表格中,水平分隔符超出了列的右边框,一直延伸到右列的左边框。

我希望第二个表格中的水平分隔符的行为方式与第一个表格中的水平分隔符类似。如何实现?

答案1

用于hhline此。另外,请注意上线和下线末端的区别。

\documentclass{article}
\usepackage{multirow}
\usepackage{hhline}

\begin{document}
\begin{tabular}{ |c||c| }
\hline
A & B\\
\cline{2-2}
C & D\\
\hline
\end{tabular}

\vspace{.3cm}

\begin{tabular}{ |c||c| }
\hhline{|--|}
A & B\\
\hhline{|~||-|}
C & D\\
\hhline{|--|}
\end{tabular}
\end{document} 

在此处输入图片描述

答案2

tblr环境可能的解决方案tabularray包。版本中有hlines 和 clines 的leftpos选项(已经在 CTAN 中,需要几天时间才能到达 TeXLive 或 MiKTeX)。rightpos2021N

leftpos/rightpos有值时0,hline/cline 将触及第一条 vline;当leftpos/rightpos有值时1,hline/cline 将触及所有 vline。

\documentclass{article}

\usepackage{tabularray}

\begin{tblr}{ |c||c| }
\hline
A & B\\
\cline[leftpos=0]{2-2}
C & D\\
\hline
\end{tblr}

\vspace{.3cm}

\begin{tblr}{ |c||c| }
\hline
A & B\\
\cline[rightpos=0]{1-1}
C & D\\
\hline
\end{tblr}

\end{document}

在此处输入图片描述

答案3

环境(目前)没有修剪命令{NiceTabular}的选项(也许在未来的版本中)。nicematrix\cline

然而,这个答案想要表明nicematrix提供工具来编程这样的命令无需使用内部nicematrix

实际上,环境{NiceTabular}在表格的单元格、行和列下创建 PGF/Tikz 节点,并向用户提供对这些节点的访问。

在下面的程序中,该命令\mycline有一个带星号的版本\mycline*,可以修剪右侧的规则。

\documentclass{article}
\usepackage{nicematrix,tikz}


\ExplSyntaxOn
\makeatletter

\NewDocumentCommand { \mycline } { s m }
  { \__aad_mycline:nw {#1}#2 \q_stop \ignorespaces }

\cs_new_protected:Npn \__aad_mycline:nw #1#2-#3\q_stop
  {  
    \tl_gput_right:Nx \g_nicematrix_code_after_tl
      {
        \__aad_mycline:nnnn
          { \int_use:c { c@iRow } }  
          { #2 }
          { \int_eval:n { #3 + 1 } }
          { 
            \bool_if:nTF { #1 } 
              { \dim_eval:n { \arrayrulewidth + \doublerulesep } }
              { 0 pt }
          }
      }
  }

% #1 is the number of row
% #2 is the number of the first column of the \mycline
% #3 is the number of the last column of the \mycline
% #4 is the length to trim on the *right* side
\cs_new_protected:Nn \__aad_mycline:nnnn 
  { \tikz \draw (#1-|#2) -- ([xshift=-#4]#1-|#3) ; }

\makeatother
\ExplSyntaxOff

\begin{document}

\begin{NiceTabular}{|c||c|}
\hline
A & B\\
\mycline{1-1}
C & D\\
\hline
\end{NiceTabular}

\bigskip
\begin{NiceTabular}{|c||c|}
\hline
A & B\\
\mycline*{1-1}
C & D\\
\hline
\end{NiceTabular}

\end{document}

上述代码的输出

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

相关内容