SUSTech-CRA / sustech-master-thesis

南方科技大学研究生学位论文LaTeX模板
LaTeX Project Public License v1.3c
203 stars 50 forks source link

关于图表距离的修复 #56

Closed liziwl closed 1 year ago

liziwl commented 2 years ago

54 这个依旧没有正确修复,似乎是patchcmd没有应用

liziwl commented 2 years ago

一些参考资料

liziwl commented 2 years ago

@iydon 继续在这边讨论吧。

转发讨论: 有一个疑问,“图题在图之下,段前空 6 磅,段后空 12 磅”,其中的段前是否指图题与图之间间隔 6 磅,与下面正文间隔 12 磅;相应地,表题与表之间间隔 6 磅,与上面正文间隔 12 磅。

如果是这样理解的话,清华模板文档中的 \captionsetup{skip=6bp} 才能和表述对应上,因为 skip 选项用来修改标题与图或表之间的间距的,而与上下文空 12 磅按理说对应着修改 intextsep=12bp 即可(浮动体为 h 时),源码中则用到了 \p@ (pt, 1bp=1.00374pt) 加伸缩距离,应该为了一些极端情况排起来不突兀。

\captionsetup{skip=6bp} 可以简单等价于 \captionsetup[figure]{aboveskip=6bp} 与 \captionsetup[table]{aboveskip=6bp},其中 aboveskip 不是字面意思,可以理解为标题与图或表之间的间距,相应地 \belowskip 就是标题与另一个方向“盒子”之间的间距;\intextsep 则是浮动体与上下“盒子”之间的间距。最后,经过实验,我还是没有找到控制浮动体与下面正文之间额外间距的距离变量,不过有以下暂时的方案:

方案1

\captionsetup[figure]{belowskip=-12bp} % 表格与下文的额外距离不明显

方案2

  \AfterEndEnvironment{figure}{\vskip-12bp}
  \AfterEndEnvironment{table}{\vskip-6bp}

image

liziwl commented 2 years ago

方案2

  \AfterEndEnvironment{figure}{\vskip-12bp}
  \AfterEndEnvironment{table}{\vskip-6bp}

这个问题是,如果参数不为 h 就会出现一下情况。

image

使用 \nointerlineskip 一样会有类似的问题。

iydon commented 2 years ago

https://github.com/SUSTech-CRA/sustech-master-thesis/blob/d1fcf36b2fedd5f90f63eb44e3c0337fd3b6590e/sustech-setup.tex#L145

问题来自于 minted 宏包中导入了 lineno 宏包,lineno 宏包中貌似对 penalty 的修改挺多的,但是涉及到 TeX primitives,所以具体是哪些行还没有找出来(debug 思路就是明面上的代码没问题,那么问题可能是引入的宏包带来的,所以依次检查 RequirePackage 与 usepackage)。

清华的模板中使用 minted 宏包依然会有浮动体上下间隔不一致的情况,以下为通过简单遍历后发现的导入了 lineno 的文类或者宏包。未完善的遍历脚本见 gist

BMSTU-IU8.cls
aastex631.cls
ametsoc.cls
ascelike.cls
asmeconf.cls
asmejour.cls
beilstein.cls
buctthesis.cls
cc.cls
cje.cls
einfart.cls
gammas.cls
grant.cls
hepthesis.cls
hithesis.cls
hitszthesis.cls
iwhdp.cls
langscibook.cls
lectures.cls
legislation.cls
lyluatexbase.cls
minimart.cls
minimbook.cls
pdfArticle.cls
revtex4-1.cls
revtex4-2.cls
simplivre.cls
simurgh-doc.cls
skdoc.cls
uothesis.cls
verifica.cls

10-IU8-titlepage.sty
cclayout.sty
dline-shipunov.sty
dtx-style.sty
edcntwd0.sty
ednotes.sty
edtable.sty
ekdosis.sty
feupphdteses.sty
ffcode.sty
fvextra.sty
linenoamsmath.sty
local.sty
mftinc.sty
mindflow.sty
minimalist.sty
minorrevision.sty
minted.sty
nucleardata.sty
plantuml.sty
puyotikz.sty
pythontex.sty
runcode.sty
stdpage.sty
ver-doc.sty
vertbars.sty
vplref.sty
iydon commented 2 years ago

lineno 中致使图表位置不正确的代码片段(简化后)如下,我目前还理解不了原理(output routine),所以没找到解决方案。

\let\@tempa\output
\newtoks\output
\output=\expandafter{\the\@tempa}
\@tempa={\the\output}
liziwl commented 2 years ago

lineno 中致使图表位置不正确的代码片段(简化后)如下,我目前还理解不了原理(output routine),所以没找到解决方案。

\let\@tempa\output
\newtoks\output
\output=\expandafter{\the\@tempa}
\@tempa={\the\output}

lineno 包已经17年没更新了,太久了。如果修复方式不太容易的话,可以可以给 minted 提需求要他们修算了。替代的 listings 除了代码高亮要自己配其实都还好。

https://github.com/latex-lineno/lineno/issues/1#issuecomment-1035886003 目前 lineno 的维护也看不懂历史代码了。

liziwl commented 2 years ago

https://tex.stackexchange.com/questions/40863/parskip-inserts-extra-space-after-floats-and-listings/40896#40896 看来这个问题有点历史了,大佬也没好的解决方式。

liziwl commented 1 year ago

补充一下向上游提的问题 https://github.com/tuna/thuthesis/issues/614 ,也没有很好的解决方式。 目前的解决方式是建议使用 listings 而不是用有兼容性问题的 minted 格式化代码,并针对 minted 包的引入警告。