将整个文档中的 \cline 替换为 \cmidrule

将整个文档中的 \cline 替换为 \cmidrule

我有几个表格是由统计软件包自动输出的,其中包含\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}

相关内容