Closed atxy-blip closed 2 years ago
通过 xtemplate 宏包定义元素对象时,一个很自然的期望是上一个元素的底部紧贴下一个元素的顶部,这样就能使 bottom-skip 成为一个绝对的度量值。然而,在仿制 \vspace* 后元素实例间仍会产生一定空隙,需要上移一定量。通过实验,这个量大约是 26pt:
xtemplate
bottom-skip
\vspace*
\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 的修改都不会影响结果。
调查结果是因为用了 \center 和 \endcenter 来实现居中。center 环境是用 list 实现的,可能前后加了 list 的 glue。
\center
\endcenter
center
\def\center{\trivlist \centering\item\relax} \def\endcenter{\endtrivlist}
换成 \centering 就好了。
\centering
通过
xtemplate
宏包定义元素对象时,一个很自然的期望是上一个元素的底部紧贴下一个元素的顶部,这样就能使bottom-skip
成为一个绝对的度量值。然而,在仿制\vspace*
后元素实例间仍会产生一定空隙,需要上移一定量。通过实验,这个量大约是 26pt:我尚不明白这个值从何而来。baselinskip 和 lineskip 的修改都不会影响结果。