基于不同 Texlive 版本构建的文档有不同的输出

基于不同 Texlive 版本构建的文档有不同的输出

通过这个最小的例子:

\documentclass{article}
\usepackage{parskip}
\usepackage{titlesec}

\titlespacing*{\section}{0pt}{1ex plus .2ex minus 0.1ex}{1ex plus .2ex minus 0.1ex}
\titlespacing*{\subsection}{0pt}{1ex plus .2ex minus 0.1ex}{1ex plus .2ex minus 0.1ex}

\begin{document}
\section{Foo}
Lorem.
\subsection{Foobar}
Ipsum.
\section{Bar}
Dolor.
\end{document}

使用两个不同的 Docker 镜像时,输出结果并不相同。使用一个构建时,标题前后的间距更大。我正在使用这两个 Docker 镜像。当我在本地生成 2 页文档时,我的 CI 生成了 3 页文档,我注意到了这个问题。

$ docker images --digests | grep nowox/latex
nowox/latex 1.0    sha256:4743340934972f31e0bbfaeafda1202c0c94f442251595c9c91f83a7aa02bd5f 2 weeks ago    1.9GB
nowox/latex <none> sha256:252e2811d18e8b69dbe036a789c109cbfa72e4a9397eaa84e07fb0cc12cdc10d 12 months ago  2.43GB

要运行 LaTeX,我使用:

docker run -v$(pwd)/home -w/home <image-id> xelatex test.tex

我设置间距的方式有问题吗?或者这些包有问题?

以下是\listfiles后一个版本:

$ docker run -v$(pwd):/home -w/home 019287608dc1 xelatex tutu.tex
This is XeTeX, Version 3.14159265-2.6-0.999991 (TeX Live 2019/Debian) 
 restricted \write18 enabled.
entering extended mode

LaTeX2e <2018-12-01>
...
 *File List*
 article.cls    2018/09/03 v1.4i Standard LaTeX document class
  size10.clo    2018/09/03 v1.4i Standard LaTeX file (size option)
titlesec.sty    2016/03/21 v2.10.2 Sectioning titles
 parskip.sty    2019-01-16 v2.0c non-zero parskip adjustments
kvoptions.sty    2016/05/16 v3.12 Key value format for package options (HO)
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
 ltxcmds.sty    2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
kvsetkeys.sty    2016/05/16 v1.17 Key value parser (HO)
infwarerr.sty    2016/05/16 v1.4 Providing info/warning/error messages (HO)
etexcmds.sty    2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
ifluatex.sty    2016/05/16 v1.4 Provides the ifluatex switch (HO)
etoolbox.sty    2018/08/19 v2.5f e-TeX tools for LaTeX (JAW)
 ***********

前者的输出:

$ docker run -v$(pwd):/home -w/home 2d2b58e23f53 xelatex tutu.tex
This is XeTeX, Version 3.14159265-2.6-0.99998 (TeX Live 2017/Debian) 
 restricted \write18 enabled.
entering extended mode

LaTeX2e <2017-04-15>
...    
 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
titlesec.sty    2016/03/21 v2.10.2 Sectioning titles
 parskip.sty    2001/04/09 non-zero parskip adjustments
 ***********

我意识到我对 Dockerfile 进行了更改但没有更改其标签,因此后一个版本有这个 Dockerfile:

FROM ubuntu:bionic
LABEL maintainer="Yves Chevallier <[email protected]>"

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y make
RUN apt-get install -y texlive-xetex
RUN apt-get install -y texlive-lang-french
RUN apt-get install -y texlive-fonts-extra
RUN apt-get install -y latexmk

RUN rm -rf /var/lib/apt/lists/*
ENV USER=latex

而且我认为前者应该仅在ubuntu使用的版本上有所不同。

答案1

从已加载软件包的版本可以看出,该parskip软件包最近已更新。它所做的一件事是删除了标题中的多余空格,这是上一个版本(可追溯到 2001 年)所做的。引用新文档中的一段话:

如果使用该包时没有任何选项或者只使用选项,parfill它的行为与早期版本类似,只是现在标题周围的间距也会调整(不添加额外的\parskip)。

您可以通过在加载包时指定明确的发布版本来使用新版本复制旧版本的行为:

\usepackage{parskip}[=v1]

您无法使用旧包复制新的行为,但您可以将新版本安装到texmf旧映像的本地文件夹中。

相关内容