设置 \cmidrule 或 \cline 的宽度

设置 \cmidrule 或 \cline 的宽度

我想准备一份损益表,因此我在这个网站上找到并修改了一个模板,给出了以下 MWE:

\documentclass[a4paper,12pt]{article}
        
\usepackage{textcomp}
\usepackage{tgschola}
\usepackage{tabularx}
\usepackage{icomma}
\usepackage{booktabs}

\newcolumntype{I}{@{}X<{\xdotfill}}
\newcolumntype{R}{>{\qq}r<{\qq}}

\makeatletter
        
\newcommand{\xdotfill}{\leavevmode\leaders\hb@[email protected]{\hss.\hss}\hfill\hskip-\tabcolsep\kern\z@}
\makeatother
\newcommand\qq{\quad}
\newcommand\tablesec[1]{\multicolumn{1}{@{}l}{#1}&&\\}
\newcommand\tabletitle[1]{\multicolumn{1}{@{}c|}{\SEPx{2}#1}}
\newcommand\SEPx[1]{\vrule width 0pt height \dimexpr\fontcharht\font`A+2ex depth #1ex\relax}
\newcommand\SEP{\SEPx{0}}
\newcommand\?{\hphantom{0}}

\begin{document}

\renewcommand{\arraystretch}{1.2}
\noindent
\begin{tabularx}{\linewidth}{IRR}
\tablesec{Revenue:}
\qq Revenue 1 & & $5,00$ \\
\qq Revenue 2 & & $1247,50$ \\
\qq Revenue 3 & & $24,00$ \\

\tablesec{Expenses:}
\qq Cost 1 & $392,00$ \\
\qq Cost 2 & $206,82$ \\
\qq Cost 3 & $21,51$ \\
\cmidrule{2-2}
\qq Total cost & & $620,33$ \\
\cmidrule{3-3}
Net income & & $656,17$ \\
\cmidrule{3-3}\morecmidrules\cmidrule{3-3}
\end{tabularx}

\end{document}

问题出在这里:总计下的 cmidrule 太宽,它填满了整个单元格,我需要它更窄一些,像这样(参见红线): cmidru 太宽

另外,请注意红色星号:我正在使用的 booktabs 包允许我在最后一个 tabularx 规则中获得“双重倾斜”,但这也导致使用它的地方的行距更大。

也许有人知道解决办法:)

提前致谢,尼诺

答案1

我建议您加载该siunitx包并使用其S列类型来对齐第 2 列和第 3 列中的数字。分别对\cmidrule第 2 列中的 s 进行左修剪和右修剪,对第 3 列中的 s 进行左修剪\cmidrule。很久很久以前,在一个遥远的星系里,我似乎记得规则应该与相应列中最宽的数字一样宽。这是通过应用规则的左修剪和右修剪来实现的。

在此处输入图片描述

\documentclass[a4paper,12pt]{article}

\usepackage{tgschola}
\usepackage{booktabs}

\usepackage[output-decimal-marker={,},
            group-minimum-digits=4     % optional
           ]{siunitx}

\makeatletter
\newcommand{\xdotfill}{\leavevmode\leaders\hb@[email protected]{\hss.\hss}\hfill\hskip-\tabcolsep\kern\z@}
\makeatother

\usepackage{tabularx}
\newcolumntype{I}{@{}X<{\xdotfill}}

\newcommand\qq{\quad}
\newcommand\tablesec[1]{\multicolumn{1}{@{}l}{#1}&&\\}
\newcommand\tabletitle[1]{\multicolumn{1}{@{}c|}{\SEPx{2}#1}}
\newcommand\SEPx[1]{\vrule width 0pt height \dimexpr\fontcharht\font`A+2ex depth #1ex\relax}
\newcommand\SEP{\SEPx{0}}
\newcommand\?{\hphantom{0}}

\begin{document}

\renewcommand{\arraystretch}{1.2}
\noindent
\begin{tabularx}{\linewidth}{I *{2}{S[table-format=4.2]} @{}}
\tablesec{Revenue}
\qq Revenue 1 &    5,00 \\
\qq Revenue 2 & 1247,50 \\
\qq Revenue 3 &   24,00 \\
\cmidrule(lr){2-2}
\qq Total income & & 1276.50 \\[1ex]
\tablesec{Expenses}
\qq Cost 1    & 392,00 \\
\qq Cost 2    & 206,82 \\
\qq Cost 3    &  21,51 \\
\cmidrule(lr){2-2}
\qq Total cost   & & 620,33 \\
\cmidrule(l){3-3}
Net income       & & 656,17 \\
\cmidrule(l){3-3}\morecmidrules\cmidrule(l){3-3}
\end{tabularx}

\end{document}

相关内容