我有几个表格是由统计软件包自动输出的,其中包含\cline
用于列标题组的命令。我将这些表格包含\input
在更大的文档中,我想将所有\cline
调用转换为更具吸引力的\cmidrule
。显然我可以手动更改它们,但如果我必须重新生成表格,这会变得很乏味。
我已尝试过\renewcommand{\cline}[1]{\cmidrule(lr){#1}}
,但是这会产生一些奇怪的效果。
\documentclass{article}
\usepackage{booktabs}
\renewcommand{\cline}[1]{\cmidrule{#1}}
\begin{document}
\begin{table}[!tbp]
{\centering
\begin{tabular}{lrrcrrcrr}
\toprule
\multicolumn{1}{l}{\bfseries }&\multicolumn{2}{c}{\bfseries Group1}&\multicolumn{1}{c}{\bfseries }&\multicolumn{2}{c}{\bfseries Group 2}&\multicolumn{1}{c}{\bfseries }&\multicolumn{2}{c}{\bfseries Group 3}\tabularnewline
\cline{2-3} \cline{5-6} \cline{8-9}
\multicolumn{1}{l}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}\tabularnewline
\midrule
\bottomrule
\end{tabular}}
\end{table}
\end{document}
我会注意到,创建额外的空列以在线条之间留出空间是统计包的一个产物,不幸的是,如果不做大量工作,我无法避免这种情况。
答案1
这些命令会提前检查同一行上的后续命令,因此您需要具有“预期”定义的命令\cmidrule
。使用\let
这里有效。
\documentclass{article}
\usepackage{booktabs}
\let\cline\cmidrule
\begin{document}
\begin{table}[!tbp]
{\centering
\begin{tabular}{lrrcrrcrr}
\toprule
\multicolumn{1}{l}{\bfseries }&\multicolumn{2}{c}{\bfseries Group1}&\multicolumn{1}{c}{\bfseries }&\multicolumn{2}{c}{\bfseries Group 2}&\multicolumn{1}{c}{\bfseries }&\multicolumn{2}{c}{\bfseries Group 3}\tabularnewline
\cline{2-3} \cline{5-6} \cline{8-9}
\multicolumn{1}{l}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}\tabularnewline
\midrule
\bottomrule
\end{tabular}
}
\end{table}
\end{document}
答案2
这是一个基于 LuaLaTeX 的解决方案。它没有重新定义宏\cline
,而是设置了一个 Lua 函数,该函数在处理的早期阶段(即在 TeX 开始正常工作之前)简单地将\cline
输入文件中的所有实例替换为\cmidrule(lr)
“动态”。
与该方法相比,该方法的优点\let\cline\cmidrule
是提高灵活性,例如,可以设置函数将所有出现的 替换为\cline
,\cmidrule(lr)
如下例所示。
\documentclass{article}
\usepackage{booktabs,luacode}
\begin{luacode}
function c2c ( s )
return ( string.gsub ( s , "\\cline" , "\\cmidrule(lr)" ))
end
luatexbase.add_to_callback ( "process_input_buffer" , c2c, "c2c" )
\end{luacode}
\begin{document}
\begin{table}[!tbp]
\centering
\begin{tabular}{lrr crr crr}
\toprule
&\multicolumn{2}{c}{\bfseries Group 1}&
&\multicolumn{2}{c}{\bfseries Group 2}&
&\multicolumn{2}{c}{\bfseries Group 3}\\
\cline{2-3} \cline{5-6} \cline{8-9}
&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name}&
&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}&
&\multicolumn{1}{c}{Name}&\multicolumn{1}{c}{Name (\$)}\\
\midrule
abc \\
\bottomrule
\end{tabular}
\end{table}
\end{document}