\cline 等效于允许 `(lr)` 在任一侧修剪

\cline 等效于允许 `(lr)` 在任一侧修剪

我正在寻找\cline{1-1}不影响垂直间距的等效物,但可以选择应用诸如(lr)允许的修剪\cmidrule

下面的 MWE 产生:

在此处输入图片描述

我希望第三个表格与前两个表格垂直对齐,但带有短的“ \cmidrule(lr){1-1}”等效水平线。

代码:

\documentclass[border=5mm]{standalone}
\usepackage{booktabs}

\begin{document}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \hline
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cline{1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cmidrule(lr){1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
\end{document}

答案1

将 David Carlisle 的想法付诸实践,通过为s 添加两个新维度\abovecrulesep和,得到\belowcrulesep\cmidrule

在此处输入图片描述

\documentclass[border=5mm]{standalone}

\usepackage{booktabs}
\usepackage{etoolbox}

\newdimen\abovecrulesep
\newdimen\belowcrulesep
\abovecrulesep=0pt
\belowcrulesep=0pt
\makeatletter
\patchcmd{\@@@cmidrule}{\aboverulesep}{\abovecrulesep}{}{}
\patchcmd{\@xcmidrule}{\belowrulesep}{\belowcrulesep}{}{}
\makeatother

\begin{document}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \hline
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cline{1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cmidrule(lr){1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
\end{document}

要提供新命令,同时保留旧版本,\cmidrule可以执行以下操作

第二个示例

\documentclass[border=5mm]{standalone}

\usepackage{booktabs}
\usepackage{etoolbox}

\newdimen\myaboverulesep
\newdimen\mybelowrulesep
\newdimen\mycmidrulewidth
\myaboverulesep=0pt
\mybelowrulesep=0pt
\mycmidrulewidth=\cmidrulewidth

\makeatletter
\def\mycmidrule{\noalign{\ifnum0=`}\fi
    \@ifnextchar[{\@mycmidrule}{\@mycmidrule[\mycmidrulewidth]}}
\def\@mycmidrule[#1]{\@ifnextchar({\@@mycmidrule[#1]}{\@@mycmidrule[#1]()}}
\def\@@mycmidrule[#1](#2)#3{\@@@mycmidrule[#3]{#1}{#2}}
\let\@@@mycmidrule\@@@cmidrule
\let\@myxcmidrule\@xcmidrule
\patchcmd{\@@@mycmidrule}{\aboverulesep}{\myaboverulesep}{}{}
\patchcmd{\@@@mycmidrule}{\@xcmidrule}{\@myxcmidrule}{}{}
\patchcmd{\@myxcmidrule}{\belowrulesep}{\mybelowrulesep}{}{}
\makeatother

\begin{document}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \hline
    4 & 5 & 6 \\
    \cmidrule(lr){1-1}
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cline{1-1}
    4 & 5 & 6 \\
    \cmidrule(lr){1-1}
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
  \begin{tabular}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \mycmidrule(lr){1-1}
    4 & 5 & 6 \\
    \cmidrule(lr){1-1}
    7 & 8 & 9 \\
    \bottomrule
  \end{tabular}
\end{document}

这三个是引用版本的\def内部命令的副本。它们处理 的参数解析,并且非常短,因此很容易复制和修改代码。然后我们从 中复制另外两个内部命令并对其进行修补以使用我们的新命令和参数。这些定义较长,因此修补比重写更短。\cmidrule\my...\cmidrule\cmidrule\let

答案2

更容易使用的tblr环境tabularray包裹:

\documentclass[border=5mm]{standalone}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\SetTblrInner{rowsep=1pt}
\begin{document}
  \begin{tblr}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \hline
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tblr}
  \begin{tblr}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cline{1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tblr}
  \begin{tblr}{ l c r }
    \toprule
    1 & 2 & 3 \\
    \cmidrule[lr]{1-1}
    4 & 5 & 6 \\
    7 & 8 & 9 \\
    \bottomrule
  \end{tblr}
\end{document}

在此处输入图片描述

相关内容