表格环境中自定义垂直对齐和/或行/规则的长度存在问题

表格环境中自定义垂直对齐和/或行/规则的长度存在问题

作为后续行动我之前的问题:在我的表格中,

  • \cline{1-1}给了我正确的垂直位置,但是不是正确的水平长度
  • 相反,\rule{\mycustomlength}{0.4pt}给了我正确的(水平)长度,但是不是在正确/期望的时间垂直位置

如何解决?如何微调?例如通过调整

  • 要么长度\cline
  • 或者垂直位置\rule (但没有进一步引入不均匀的行距!)

编辑

  • 不是想要改变表格的列宽。
  • 想要申请我的定制长度 源自a(随机选择)细绳,例如“blaaaaaa”。

这是一个通用/随机的 MWE:

\documentclass[a4paper]{article}

\newlength{\mycustomlength}
\settowidth\mycustomlength{blaaaaaaaaa}

%\usepackage{booktabs}

\begin{document}

\begin{tabular}{ccc}
aaaaaa &bbbb &ccc\\
 \cline{1-1}
%%%%%
% The full syntax of the command is
% \cmidrule[ wd ]( trim ){a–b}
% \cmidrule[\mylength]{1-1}
dddd &e &f \\
\rule{\mycustomlength}{0.4pt}
\\
dddd &e &f \\
\end{tabular}
\end{document}

答案1

您可以只使用 cline 的定义,但要进行修补以添加固定长度规则。

在此处输入图片描述

\documentclass[a4paper]{article}

\newlength{\mycustomlength}
\settowidth\mycustomlength{blaaaaaaaaa}

%\usepackage{booktabs}

\makeatletter
\def\mycline#1{\expandafter\my@cline\@cline#1\@nil}

\def\my@cline#1\leaders#2\hfill{%
#1\hfill\leaders#2\hskip\mycustomlength\hfill\kern\z@}
\makeatother

\begin{document}

\begin{tabular}{ccc}
aaaaaa &bbbb &ccc\\
 \cline{1-1}
dddd &e &f \\
\rule{\mycustomlength}{0.4pt}
\\
dddd &e &f \\
\mycline{1-1}
dddd &e &f \\
\end{tabular}

\end{document}

答案2

您可以在表格中创建一行任意高度设置\arraystretch命令。但是,您需要在表格的每一行中使用命令来使其高度正确0\begin{tabular}\strut

\documentclass[a4paper]{article}

\newlength{\mycustomlength}
\settowidth\mycustomlength{blaaaaaaaaa}

\begin{document}
    \renewcommand{\arraystretch}{0}
    \begin{tabular}{ccc}
        \strut aaaaaa &bbbb &ccc\\
        \hspace{-\arraycolsep}\rule{\mycustomlength}{0.4pt}\\
        \strut blaaaaaaaaa &e &f
    \end{tabular}
\end{document}

\hspace将行移至表格的左边界。但是,如果规则比列长,就会出现问题。为了避免这种情况,您可以使用multirow包将假行中的所有列合并为一列。

\documentclass[a4paper]{article}

\usepackage{multirow}

\newlength{\mycustomlength}
\settowidth\mycustomlength{blaaaaaaaaa}

\begin{document}
    \renewcommand{\arraystretch}{0}
    \begin{tabular}{ccc}
        \strut aaaaaa &bbbb &ccc\\
        \multicolumn{3}{@{}l@}{\rule{\mycustomlength}{0.4pt}}\\
        \strut dddd &e &f
    \end{tabular}
\end{document}

示例图片:

例子

示例 2

答案3

正如我在上面的问题中概述的那样,在解决这个问题的两种替代方法中,David 的解决方案解决了前者(调整长度\cline,而 egreg 为后者提供了关键成分(调整垂直位置\rule其他地方:

  • 使用分数\normalbaselineskip

不是\baselineskip,因为这个参数是归零在一个tabular环境中。

因为我希望间距均匀经过“规则干预”(将分数线高相加得到整数)之后,这似乎也很有希望并且可行。

谢谢 egreg!

:-)

答案4

您可以重新定义单元格的宽度。它\cline跨越列的长度,然后是其他长度。

首先,您可以尝试:

\documentclass[a4paper]{article}
\newlength{\mycustomlength}
\settowidth\mycustomlength{blaaaaaaaaa}
\begin{document}

\begin{tabular}{@{}c@{}cc}
aaaaaa & bbbb & ccc\\
 \cline{1-1}
blaaaaaaaaa & & \\
\end{tabular}

\end{document}

此处的\cline宽度正好等于表格中最宽列的宽度。但是,列之间没有缓冲区。与此形成对比:

\begin{tabular}{ccc}
aaaaaa & bbbb & ccc\\
 \cline{1-1}
blaaaaaaaaa & & \\
\end{tabular}

您可以看到,它\cline比列中最长的文本要宽一些。

如果您想要缓冲区,但又不想\cline超出当前列中最宽文本的宽度,那么您可以执行以下操作:

\begin{tabular}{ccc}
aaaaaa & bbbb & ccc\\
\cmidrule(lr){1-1}
blaaaaaaaaa & & \\
\end{tabular}

这三个选项如下所示, 在此处输入图片描述

请注意,这会增加一些没有的\cmidrule额外垂直间距。\cline

相关内容