为什么这个长表中的线条错位了?

为什么这个长表中的线条错位了?

latexmk -pdfxe在这个 MWE 上运行

\documentclass[landscape]{article}
\pagestyle{plain}
\usepackage[hmargin=1cm, vmargin=2cm]{geometry}

\usepackage{longtable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{threeparttable}
\usepackage[referable]{threeparttablex}
\usepackage{arydshln}

\LTpre0pt\LTpost0pt
\LTleft1em\LTright1em
\newlength\tabcolwidth
\newlength\firstcoltext
\newlength\rowheight
\setlength{\footskip}{0pt}
\setlength{\rowheight}{13ex}
\newcolumntype{y}[1]{>{\raggedright\arraybackslash}p{#1}}

\begin{document}
\centering\large
\LTcapwidth=\textwidth
\settowidth\firstcoltext{longest~}
\setlength\tabcolwidth{\dimexpr.5\textwidth-\firstcoltext-\tabcolsep-10pt}
\begin{ThreePartTable}
  % \renewcommand\TPTminimum{\textwidth}
  \begin{TableNotes}
    \item[a] \label{tn:a} foo
    \item[b] \label{tn:b} bar
    % \unskip\strut\par
  \end{TableNotes}
  \begin{longtable}{%
      @{\extracolsep{\fill}}ry{\tabcolwidth}:y{\tabcolwidth}@{}}
      \caption{Please fill in this table.}\\
      \toprule
      \multicolumn{1}{r}{~}
      & \multicolumn{1}{y{\tabcolwidth}}{A}
      & \multicolumn{1}{y{\tabcolwidth}}{B} \\
    \midrule
    \endhead
    \cmidrule{3-3}
    \multicolumn{3}{r}{\raggedleft\textit{continued \ldots}}
    \endfoot
    \bottomrule
    \insertTableNotes\\
    \endlastfoot
    \multicolumn{1}{r:}{foo} & & \\[\rowheight]\cdashline{2-3}
    longest\tnotex{tn:a} & & \\[\rowheight]\cline{1-3}
    foo & & \\[\rowheight]\cdashline{2-3}
    bar\tnotex{tn:b} & & \\[\rowheight]\cdashline{2-3}
    baz & & \\[\rowheight]
  \end{longtable}
\end{ThreePartTable}
\end{document}

结果是

在此处输入图片描述

如何正确对齐线条?我知道这似乎类似于这个问题


编辑: 采用 Herbert 的解决方案回答,我现在完全排除了 booktabs。我尝试使用\Xhline\Xcline来自makecell包,其中第一个定义如下:

\newcommand\Xhline[1]{\noalign{\ifnum0=‘}\fi\arrayrulewidth#1%
\ifx\hline\LT@hline\let\@xhline\LT@@hline\fi
\hrule\@height\arrayrulewidth\futurelet\reserved@a\@xhline}

但是规则看起来比预期的要粗,因为显然还包含另一行\hline。请尝试取消注释 arrayrulewidth 行。(或者更改为\multicolumn{1}{X@{}}{A}导致表格溢出的行。)相交垂直虚线的问题也\Xhline与 booktabs 的问题类似\midrule(我已将其从大约 2pt 处改正到头部)。最后,我还希望页脚显示在页面最后一行“之后”。

\documentclass[landscape,a5paper]{article}
\pagenumbering{gobble}
\pagestyle{plain}
\usepackage[hmargin=1cm, top=2cm, bottom=4cm]{geometry}
\usepackage{array}     % \firsthline \lasthline
\usepackage{makecell}  % \Xhline \Xcline
\usepackage{xltabular}
\usepackage{ragged2e}
\usepackage{arydshln}  % \firsthdashline \lasthdashline
\renewcommand{\arraystretch}{1.5}
\newlength\heavyrulewidth
\newlength\lightrulewidth
\newlength\rowheight
\renewcommand\tabularxcolumn[1]{>{\RaggedRight}p{#1}}
\usepackage{etoolbox}
\AtBeginEnvironment{xltabular}{\hfuzz1pt}
\begin{document}
  \centering\small
  % lengths from booktabs.sty
  \setlength\heavyrulewidth{0.08em}
  \setlength\lightrulewidth{0.05em}
  % \setlength\arrayrulewidth{0pt}   % <-- uncomment
  \setlength\tabcolsep{1em}
  \setlength\rowheight{6ex}
  \LTcapwidth=\textwidth
  \noindent
  \begin{xltabular}{\linewidth}{@{} r X : X @{}}
    \caption{Please fill in this table.}\\\Xhline{\heavyrulewidth}
    % \rule[-1.25ex]{0pt}{4ex}
    & \multicolumn{1}{X}{A}
    & \multicolumn{1}{X}{B}\\[-2pt]\Xhline{\lightrulewidth}
    \endhead
    \Xcline{3-3}{\lightrulewidth}
    \multicolumn{3}{r}{\raggedleft\textit{continued \ldots}}
    \endfoot
    \Xhline{\heavyrulewidth}
    \endlastfoot
    foo & & \\[\rowheight]\cdashline{2-3}
    bar\footnote{bar} & & \\[\rowheight]\cdashline{2-3}
    foo & & \\[\rowheight]\cdashline{2-3}
    test a footnote\footnote{foo} & & \\[\rowheight]\cline{1-3}
    foo & & \\[\rowheight]\cdashline{2-3}
    foo & & \\[\rowheight]\cdashline{2-3}
    foo & & \\[\rowheight]
  \end{xltabular}
\end{document}

这是第一页:

长桌子有一些对齐问题

编辑:(2018年5月27日)

我已经创建要点附有一张表格,说明应用和垂直线的原因。\hlines但我希望顶部和底部有不同的厚度。

答案1

使用 会存在一个问题,booktabs即在水平线前后插入一些垂直空间。使用 simple\hlines并拉伸第一行。我使用的xltabular几乎与 相同threeparttable。重要的是:

 \caption{Please fill in this table.}\\\hline
    \rule[-1.25ex]{0pt}{4ex} & A & B \\\hline

这是我的完整示例:

\documentclass[landscape]{article}
\pagestyle{plain}
\usepackage[hmargin=1cm, vmargin=2cm]{geometry}    
\usepackage{booktabs}
\usepackage{xltabular,ragged2e}
\usepackage{arydshln}

\newlength\rowheight
\setlength{\rowheight}{13ex}
\renewcommand\tabularxcolumn[1]{>{\RaggedRight}p{#1}}

\begin{document}
\centering\large
\LTcapwidth=\textwidth

\noindent
\begin{xltabular}{\linewidth}{@{} r X : X @{}}
\caption{Please fill in this table.}\\\hline
  \rule[-1.25ex]{0pt}{4ex} & A & B \\\hline
\endhead
\cmidrule{3-3}
\multicolumn{3}{r}{\raggedleft\textit{continued \ldots}}
\endfoot
\bottomrule
\endlastfoot
\multicolumn{1}{@{}r:}{foo} & & \\[\rowheight]\cdashline{2-3}
            longest\footnote{foo} & & \\[\rowheight]\cline{1-3}
            foo & & \\[\rowheight]\cdashline{2-3}
            bar\footnote{bar} & & \\[\rowheight]\cdashline{2-3}
            baz & & \\[\rowheight]
\end{xltabular}
\end{document}

在此处输入图片描述

相关内容