考虑以下 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}