改编的 \hline (\nobreakhline) 的 Longtable 行为

改编的 \hline (\nobreakhline) 的 Longtable 行为

我使用长表和 \nobreakhline 变通方法。如果两行应该接在一起,那么变通方法实际上并不像真正的 \hline 那样有效。因此,我希望使用 \hline\hline 获得与第一个表相同的外观,但使用 \nobreakhline。

\documentclass{article}
\usepackage{longtable}

\makeatletter
\def\nobreakhline{%
\multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\penalty10000}}
\makeatother

\begin{document}

\begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
    \caption{Blabla} \\
    \hline\hline
    8,8 &85,3 &1,4 \\\hline
    8,8 &85,3 &1,4 \\\hline
    \hline
\end{longtable}

\begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
\caption{Blabla} \\
\nobreakhline\nobreakhline
8,8 &85,3 &1,4 \\*\nobreakhline
8,8 &85,3 &1,4 \\*\nobreakhline
\nobreakhline
\end{longtable}

\end{document}

如何实现这一点? `longtable` 中 \hline\hline 之间的空格

答案1

展望未来,make \hline\hline是 hline 迄今为止最复杂的部分,它可以复制到 nobreakhline,但如果你想支持类似的事情,情况\hline\nobreakhline会变得更糟,所以我只需定义第二个命令来制定双重规则,比如

\def\nobreakhhline{%
\multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\penalty10000\vskip\doublerulesp}%
\multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\penalty10000}%
}

答案2

这就是你要找的东西吗?@DavidCarlisle 已经给出了解决方案。https://tex.stackexchange.com/a/107566/197451

在此处输入图片描述

\documentclass{article}
\usepackage{color}

\makeatletter
\let\xx@begindocumenthook\@begindocumenthook
\let\xxhline\hline
\let\xx@xhline\@xhline

\usepackage{colortbl}
\let\hline\xxhline
\let\@xhline\xx@xhline
\let\@begindocumenthook\xx@begindocumenthook
\makeatother

\usepackage{longtable}

\begin{document}
\begin{longtable}{|l|l|l|l|c|r|r|r|}
        \caption{{ABD}}
        \label{tab:SO}\\
\hline
        \multicolumn{1}{|l|}{{SO} - 01} & \multicolumn{7}{ c| }{AD}\\
    \hline\hline
        \multicolumn{4}{|l|}{Popis} & M J & AD & AD & CD\\
    \hline
        \multicolumn{4}{|l|}{AD }& $3$ & 37000 & 0,32& 11\,800   \\
    \hline
\end{longtable} 
\begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
    \caption{Blabla} \\
    \hline\hline
    8,8 &85,3 &1,4 \\\hline
    8,8 &85,3 &1,4 \\\hline
    \hline
\end{longtable}
\begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
\caption{Blabla} \\
\hline\hline
8,8 &85,3 &1,4 \\*\hline
8,8 &85,3 &1,4 \\*\hline
\hline
\end{longtable}
\end{document}

答案3

在 David Carlisle 的帮助下解决此问题:

\documentclass{article}
\usepackage{longtable}

\makeatletter
\def\nobreakhline{%
\multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
    \noalign{\penalty10000}}
\makeatother

\makeatletter
\def\nobreakhlinedouble{%
    \multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
    \noalign{\penalty10000\vskip\doublerulesep}
    \multispan\LT@cols\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
    \noalign{\penalty10000}}
\makeatother

\begin{document}

    \begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
        \caption{Blabla} \\
        \hline\hline
        8,8 &85,3 &1,4 \\\hline
        8,8 &85,3 &1,4 \\\hline
        \hline
    \end{longtable}

    \begin{longtable}{p{2cm}|p{3cm}|p{3cm}}
        \caption{Blabla} \\
        \nobreakhlinedouble
        8,8 &85,3 &1,4 \\*\nobreakhline
        8,8 &85,3 &1,4 \\*\nobreakhline
        \nobreakhlinedouble
    \end{longtable}

\end{document}

最后,它会在一行中生成双线,然后在另一行中生成双线。这对于编码行输入来说更好。

相关内容