将 `\cline` 与双垂直线对齐

将 `\cline` 与双垂直线对齐

考虑以下 MWE:

\documentclass{scrbook}

\usepackage{array}

\begin{document}

\renewcommand{\tabcolsep}{2pt}
\begin{tabular}{|c||c|c|c||c|}
    \firsthline
    1&2&3&4&5\\\hline
    \multicolumn{1}{c||}{}&6&7&8&\multicolumn{1}{c}{}\\
    \cline{2-4}
\end{tabular}

\end{document}

结果如下:

在此处输入图片描述

如何使最后一条水平线与底部中间的单元格完美对齐?

PS 有时我认为使用 tikz 手动在 LaTeX 中绘制表格会更容易。

答案1

{NiceTabular}这是使用 的解决方案nicematrix。该环境类似于经典{tabular}的 ,array但在单元格、行和列下创建 PGF/Tikz 节点。然后,您可以使用 Tikz 绘制您想要的任何规则。

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

\begin{document}
\setlength{\tabcolsep}{2pt}
\begin{NiceTabular}{c||c|c|c||c}[t]
    \hline
    1&2&3&4&5\\
    \hline
    &6&7&8&\\
\CodeAfter 
\tikz \draw (1-|1) -- (2-|1) ;
\tikz \draw (1-|6) -- (2-|6) ;
\tikz \draw ([xshift=-\doublerulesep-\arrayrulewidth]3-|2) -- (3-|5) ;
\end{NiceTabular}
\end{document}

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

上述代码的输出

答案2

一种快速而优雅的方式,具有以下优点nicematrix

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{nicematrix}
\begin{document}
\setlength{\tabcolsep}{2pt}
\begin{NiceTabular}{*{7}c}[hvlines,corners,cell-space-top-limit=3pt]
    1 & & 2 & 3 & 4 & & 5 \\
      & \makebox[0.1pt]{} & 6 & 7 & 8 & \makebox[0.1pt]{}& \\
\end{NiceTabular}
\end{document}

在此处输入图片描述

...您可以使用以下命令创建命令\makebox[0.1pt]{}

答案3

您可以安排一个空列,以便您可以控制\cline开始,或者您可以使用\hhline,但您需要一个版本b.此处表示),它不会强制将双规则宽度输入到行中。

在此处输入图片描述

\documentclass{scrbook}

\usepackage{array}

\usepackage{hhline}

\makeatletter 
% add . like b but singleline
\def\HH@loop{%
  \ifx\@tempb`\def\next##1{\the\toks@\cr}\else\let\next\HH@let
  \ifx\@tempb|\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
          \HH@add{\@tempc\vline\@tempc}\else
  \ifx\@tempb:\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
      \HH@add{\@tempc\HH@box\arrayrulewidth\arrayrulewidth\@tempc}\else
  \ifx\@tempb##\if@tempswa\HH@add{\hskip\doublerulesep}\fi\@tempswatrue
         \HH@add{\@tempc\vline\@tempc\copy\@ne\@tempc\vline\@tempc}\else
  \ifx\@tempb~\@tempswafalse
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \HH@add{\hfil}\else
  \ifx\@tempb-\@tempswafalse
           \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
              \HH@add{\leaders\hrule\@height\arrayrulewidth\hfil}\else
  \ifx\@tempb=\@tempswafalse
       \if@firstamp\@firstampfalse\else\HH@add{&\omit}\fi
       \HH@add
          {\rlap{\copy\@ne}\leaders\copy\@ne\hfil\llap{\copy\@ne}}\else
  \ifx\@tempb t\HH@add{\rlap{\HH@box\doublerulesep\z@}}\else
  \ifx\@tempb b\HH@add{\rlap{\HH@box\z@\doublerulesep}}\else
  \ifx\@tempb .\HH@add{\smash{\rlap{\HH@box\z@\doublerulesep}}}\else
  \ifx\@tempb\@sptoken\let\next\HH@spacelet\else
  \PackageWarning{hhline}%
      {\meaning\@tempb\space ignored in \noexpand\hhline argument%
       \MessageBreak}%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  \next}
\makeatother

\begin{document}

\renewcommand{\tabcolsep}{2pt}
\begin{tabular}{|c||c|c|c||c|}
    \firsthline
    1&2&3&4&5\\\hline
    \multicolumn{1}{c||}{}&6&7&8&\multicolumn{1}{c}{}\\
    \cline{2-4}
\end{tabular}


\bigskip

\begin{tabular}{|c@{}c@{}||c|c|c||c|}
    \firsthline
     \multicolumn{1}{|c}{1}&&2&3&4&5\\\hline
    \multicolumn{1}{@{}c@{}}{}&&6&7&8&\multicolumn{1}{c}{}\\
    \cline{2-5}
\end{tabular}

\bigskip

\begin{tabular}{|c||c|c|c||c|}
    \firsthline
    1&2&3&4&5\\\hline
    \multicolumn{1}{c||}{}&6&7&8&\multicolumn{1}{c}{}\\
    \hhline{~|.|---|.|}
\end{tabular}



\end{document}

相关内容