我正在寻找\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}