当使用 \footnoterule 的奇怪重新定义时,自定义 longtable 会永远挂起

当使用 \footnoterule 的奇怪重新定义时,自定义 longtable 会永远挂起

拜托,没人问我为什么我有这个代码....

以下 MNWE 无法编译。它没有给出错误。它只是一直挂起,直到我中断该过程。因为这是 pdfTeX 而不是 XeTeX,所以我可以中断它而不是杀死它,但这在实际意义上没有多大用处。

重新定义脚注规则和特定使用xxxtable会导致问题。如果我删除其中任何一个,它都会编译通过。我不确定这意味着它会以其他方式工作,但至少这么多可以编译通过。

\renewcommand\footnoterule{\vspace*{-0.18mm}\setlength\leftskip{0pt}\setlength\rightskip{0pt plus 1fil}\noindent{\rule{0.25\columnwidth}{0.18mm}}\vspace*{1.01mm}}

我觉得这很奇怪。我没有写过它,我不相信它,也不知道该怎么办。

现在我可以看到我在发帖前寻找的相关问题,我试过了

\renewcommand\footnoterule{\vspace*{-0.18mm}\setlength\leftskip{0pt}\setlength\rightskip{0pt plus 1fil}\noindent\hrule width 0.25\columnwidth height 0.18mm\vspace*{1.01mm}}

但意识到我实际上不知道原始定义的目的是什么,即使与相关问题的答案中纠正的错误定义相比,这看起来也很奇怪。

\NewDocumentEnvironment{xxxtable}{ m }
{%
  \makegapedcells
  \begin{longtable}{!{\vrule width \xlineht}#1}
    \Xhline{\xlineht}\endhead
    \Xhline{\xlineht}\endfoot
}{%
  \end{longtable}%
}

我觉得这有点奇怪。我确实写了它,但我并不完全相信它,而且我不确定这不是问题所在。

当我中断编译时,我得到

 \unvbox 
l.228  \end{xxxtable}

就像它永远被困在试图做的事情一样。

\documentclass[a4paper]{article}
\usepackage{array,makecell,longtable,calc,xparse,geometry,kantlipsum}
\newlength\xlineht
\newlength\mlineht
\setlength\xlineht{1.2pt}
\setlength\mlineht{.8pt}
\newcolumntype{P}[1]{p{#1}}
\newcolumntype{F}[1]{p{#1}!{\vrule width \xlineht}}
\setcellgapes{3pt}
\renewcommand\cellalign{cc}
\NewDocumentEnvironment{xxxtable}{ m }
{%
  \makegapedcells
  \begin{longtable}{!{\vrule width \xlineht}#1}
    \Xhline{\xlineht}\endhead
    \Xhline{\xlineht}\endfoot
}{%
  \end{longtable}%
}
\geometry{top=25.4mm,left=25.4mm,height=234.29mm,width=158.21mm,footskip=24.82mm,headheight=0pt,headsep=0pt,marginparwidth=0pt,marginparsep=0pt,showframe}
\renewcommand\footnoterule{\vspace*{-0.18mm}\setlength\leftskip{0pt}\setlength\rightskip{0pt plus 1fil}\noindent{\rule{0.25\columnwidth}{0.18mm}}\vspace*{1.01mm}}
\renewcommand\arraystretch{1.3}
\begin{document}

\kant[1]

\begin{flushleft}
  \begin{xxxtable}{>{\bfseries\arraybackslash}P{54.85mm}|F{\textwidth-54.85mm-4\tabcolsep-2\xlineht}}
    xxxx: &  \\\hline
    xxxxxxx: & xxxxxxxxxxxx xxxxxxxx\\\hline
    xxxxxx/xxxxxxxxxx/xxxxxxxxx: & xxxxxxxxxx xxx xxxxxxxxxxxx xxxxxxxxx\\\hline
    xxxx xx xxxxxxxx: & xx xxxx xxxxx\\\hline
    xxxx xx xxxxxx: &  \\
  \end{xxxtable}
\end{flushleft}

\bigskip

\textbf{xxxxxxx x - xxxx xxxxxx}

\textit{xxx xxxxxxx xxxxxx xx xxxxxxxxx xx xxx xxxxxxxx xx xxxxxxx xx xxx xxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxx
  xxxxxxxxxx}\footnote{ \textrm{xxx xxxxxx xxxxxxx xxxxx xx xxxxxx xx xxxxx xxx/xx xxxxx, xxx xx xxxxx xxx xxxx xxxxxx xxxx xxxxx xxxxxxx xxxx xxxx xx xxxx xxxxxxxxxx, x xxxxxxxx xxxxxxxxxxx xx xxxx xxxxxx xx xxxx.}}\textit{ xxxx xxxx xxxxxxxx/xxxx xxxxxxx.}

\textit{xxxxxxxxxxx xxxxxxxx xxxxxx xxxxxx xx xxx xxxxxx xxxxxx xxxx -- xxxx}


\begin{flushleft}
  \begin{xxxtable}{>{\bfseries\arraybackslash}P{26.77mm}|P{\textwidth-63.89mm-6\tabcolsep-2\xlineht}|>{\bfseries\arraybackslash}F{37.12mm}}
    xxxxxxxxx & xx xxxxxx xxx xxxxx x xxxxxx xxxxxxx xx xxxxxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\\hline
    xxxxxxxxx & xx xxxxxxx xxxxxx xxxxxxxxxx xx xxxxx xx x xxxxx xxxxxxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\\hline
    xxxxxxxxx & xx xxxxxx xxxxxxxxxxx xxxxx xx xxxxxxxxxx (xxxxxxxx xxxx xx xxxxx 80\% xx xxxxxxxx xxxxxxx xxxxxxxxxx), xxxx xxxxxxx xxxx xxxxx xxx'x xxxxxxx xxxxxxx xxxxxxxx, xxx xx xxxxxxx xxxxxxxx xxxx xxxxxxxx xx xxxxx xxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\\hline
    xxxxxxxxx & xx xxxxx xxx xxxxxx xxxxxxxxxx, xxxxxxxxx xxxxxxxxxxxx xxxxxxx xxxxxxxx; xxxxxxxxxx xx xxx xxxxxxxx xxxxxx xxx xxxxxxxx; xxx xxxxxxxxxxxx xxxxx xxx xxxxxxxxx xxx xxxxxxxxxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\\hline
    xxxxxxxxx & xx xxxxx xxx x xxxxxxxx xxxx xxx xxxxxxxx, xxx xxxxxxxx xxxxxxxxx xxxx xx xxx xxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\\hline
    xxxxxxxxx & xx xxxxxx xxx xxxxxx xxxxxxxxx, xxxxxxxxx xxxxxxx xx xxxxxxx xxxx, xx xxxxxxxxxx xxx xxxxxxxxxxxx xxxxxxxxx xx xxxx xx xxxxxxxx xxxxx xxx xxxxxx xxx xxxxx.  & xxxxxx\\\hline
    xxxxxxx & & \\
 \end{xxxtable}
\end{flushleft}
\end{document}

答案1

您需要确保脚注规则是垂直构造

\renewcommand\footnoterule{%
  \endgraf\vspace*{-0.18mm}%
  \setlength\leftskip{0pt}%
  \setlength\rightskip{0pt plus 1fil}%
  \noindent{\rule{0.25\columnwidth}{0.18mm}}\vspace*{1.01mm}%
 \endgraf}

相关内容