nju-lug / NJUThesis

南京大学学位论文模板
https://ctan.org/pkg/njuthesis
LaTeX Project Public License v1.3c
463 stars 63 forks source link

[Bug]: 关于 `xtemplate` 的元素间距 #156

Closed atxy-blip closed 2 years ago

atxy-blip commented 2 years ago

通过 xtemplate 宏包定义元素对象时,一个很自然的期望是上一个元素的底部紧贴下一个元素的顶部,这样就能使 bottom-skip 成为一个绝对的度量值。然而,在仿制 \vspace* 后元素实例间仍会产生一定空隙,需要上移一定量。通过实验,这个量大约是 26pt:

\documentclass[draft]{njuthesis}
\makeatletter
\ExplSyntaxOn
\cs_set_protected:Npn \__nju_vskip:N #1
  {
    \tex_hrule:D \@height \c_zero_dim \scan_stop:
    \tex_penalty:D \@M
    \skip_vertical:n { -26 pt } % ??????
    \skip_vertical:N #1
    \skip_vertical:N \c_zero_dim
  }
\ExplSyntaxOff
\makeatother
\DeclareInstance{nju}{test}{element}{
  content={
    \begin{tikzpicture}
      \draw (-5,-1) rectangle (5,1);
    \end{tikzpicture}
  },
  bottom-skip=0pt
}
\begin{document}
\mainmatter
\baselineskip=100pt
\lineskip=0pt
\parskip=0pt
\UseInstance{nju}{test}
\UseInstance{nju}{test}
\UseInstance{nju}{test}
\end{document}

我尚不明白这个值从何而来。baselinskip 和 lineskip 的修改都不会影响结果。

atxy-blip commented 2 years ago

调查结果是因为用了 \center\endcenter 来实现居中。center 环境是用 list 实现的,可能前后加了 list 的 glue。

\def\center{\trivlist \centering\item\relax}
\def\endcenter{\endtrivlist}

换成 \centering 就好了。