什么原因导致在 .dtx 文件中处理的代码出现 Underfull 和 Overfull \hbox 警告,但在独立的 .tex 文件中没有出现?

什么原因导致在 .dtx 文件中处理的代码出现 Underfull 和 Overfull \hbox 警告,但在独立的 .tex 文件中没有出现?

我在 macOS Catalina 上运行 TeX Live 2021,并应用了所有可用的软件包和系统更新(再次应用了所有可用的更新)。我正在编辑上次于 2021 年 12 月 5 日处理的软件包文档,LuaLaTeX突然看到 12 月 5 日并不存在的许多Underfull \hbox警告Overfull \hbox。一些tcolorbox环境现在显示换行符,而以前没有换行符,脚注的排版不同,一些逐字文本的排版不正确。文档被分成三个.dtx文件,从第一个文件开始处理,显然提供所有这些代码是不可行的,所以我将一些具体的示例提取到一个独立mwe.tex文件中,它的处理方式与 12 月 5 日完全一样。我很困惑为什么.dtx文件中的相同代码现在会产生警告。在今天之前,该代码自 2021 年 12 月 5 日以来就没有被触碰过。当然,CTAN 的所有可用更新都已照常应用tlmgr

我检查了这些.log文件,发现的唯一区别是,在文件内部处理代码时出现了 8 个Overfull \hbox警告和 1 个警告。在处理时没有出现这些警告,12 月 5 日也没有出现这些警告。Underfull \hbox.dtxmwe.tex

我知道这两者tcolorbox,并且fontspec最近都进行了更新,但如果它们是问题的根源,那么它就会出现在mwe.tex文档中。

.dtx处理自 12 月 5 日以来发生变化的文件中的代码会有什么不同?

更新:显然,我不能在这里发布三个.dtx文件和文件,.log否则我会被告知将其缩减为 MWE,而这正是我在这里尝试做的。整个项目可以在https://github.com/heafnerj/mandi/tree/dev以防有人想进一步调查。

我提供了一个 mwe 和屏幕截图,展示了 2021 年 12 月 5 日和今天(2022 年 1 月 22 日)的排版输出。

这是mwe.tex文件。

% !TEX program = lualatexmk
% !TEX encoding = UTF-8 Unicode

\documentclass{article}
\PassOptionsToPackage{listings,documentation}{tcolorbox} % prevent option clash
\usepackage{mandi}                                       % load mandi.sty
\usepackage{mandistudent}                                % load mandistudent.sty
\usepackage{mandiexp}                                    % load mandiexp.sty
\usepackage[left = 1.00in,%                              %
            right = 1.00in,%                             %
            marginparwidth = 0.70in]{geometry}           % main documentation
\usepackage[listings,documentation]{tcolorbox}           % workhorse package
\tcbset{%                                                % tcolorbox options
  index german settings,%
  index colorize = false,%
  lefthand ratio = 0.50,%
  color hyperlink = blue,%
  color command = purple,%
  color environment = purple!65!black,%
  doc left = 0.5in,%
  doc marginnote = {colframe = blue!50!white,colback = blue!5!white},%
  doc head command = {interior style = {fill,left color = blue!15!white}},%
  doc head environment = {interior style = {fill,left color = blue!15!white}},%
  doc head key = {interior style = {fill,left color = blue!15!white}},%
  docexample/.style = {%
      colback = gray!10!white,sidebyside,lefthand ratio = 0.5,center},%
  listing style = vpython,%
}%
% We need a new command for in-line listings to prevent overfull boxes.
% Anything in |...| will be in small plain text.
% Previously used !...! but that conflicts with colors.
\hypersetup{colorlinks=true}                      % colored links; no borders
\lstMakeShortInline[basicstyle=\normalfont\ttfamily\small]|
\listfiles
\begin{document}
 The \textsf{mandi} \footnote{The bundle name can be pronounced either with two 
 syllables, to rhyme with \emph{candy}, or with three syllables, as 
 \emph{M and I}.} bundle consists of three packages: \textsf{mandi}, 
 \textsf{mandistudent}, and \textsf{mandiexp}.

\begin{dispExample*}{lefthand ratio = 0.80}
  \( \vec{p} \) or \( \vec*{p} \)                                         \\
  \( \vec{p}_{\symup{final}} \) or \( \vec*{p}_{\symup{final}} \)         \\
  \( \magnitude{\vec{p}} \) or \( \magnitude*{\vec{p}_{\symup{final}}} \) \\
  \( \dirvec{p} \) or \( \dirvec*{p} \)                                   \\
  \( \changein \vec{p} \) or \( \changein t \)                            \\
  \( \zerovec \) or \( \zerovec* \)                                       \\
  \( 6.02\timestento{-19} \)
\end{dispExample*}

 Commands that include the name of a physical quantity typeset units, so 
 they shouldn't be used for algebraic or symbolic values of components.
 For example, one shouldn't use |\vectormomentum{mv_x,mv_y,mv_z}| but
 instead the generic |\mivector{mv_x,mv_y,mv_z}| instead.
\end{document}

下面是一个屏幕截图,显示了dispExample* tcolorbox12 月 5 日文件中.dtx和今天mwe.tex文件中正确排版的环境。

在 mwe.tex 中正确排版 dispExample* 环境

这里是完全相同的代码今天从文件内部排版.dtx

dtx 文件中错误地排版了 dispExample* 环境

这是一个正确排版的段落,包含 12 月 5 日.dtx文件中以及今天mwe.tex文件中的一些逐字文本。

在 mwe.tex 中正确排版段落

这里是完全相同的代码今天从文件内部排版.dtx

dtx 文件中的段落排版错误

.dtx最后,这是 12 月 5 日文件中和今天文件中正确排版的脚注mwe.tex

在 mwe.tex 中正确排版脚注

这是完全相同的代码今天从文件内部排版.dtx

dtx 文件中的段落排版错误

答案1

您展示的两种布局是

\documentclass{article}

\documentclass[a4paper]{article}

你没有提供代码,但我猜你正在使用ltxdoc类,并且(现在)正在选择ltxdoc.cfg哪个

\PassOptionsToClass{a4paper}{article}

因此,您可能希望明确强制使用信纸尺寸

答案2

(我不太愿意回答自己的问题,但我这样做主要是为了为初学者提供问题及其解决方案的详细记录。我不会接受我自己的,而是接受大卫卡莱尔的,因为他确实提供了解决方案。)

David Carlisle 提到,会拾取将默认纸张尺寸设置为的ltxdoc.cls配置文件。果然,我查看了一下,文件的新时间戳为 2021/12/07,而软件包的文档文件显示的日期为 2021 年 12 月 6 日。ltxdoc.cfga4paper/usr/local/texlive/2021/texmf-dist/tex/latex-dev/base/ltxdoc.cfgdoc

所以确实发生了一些变化!我将此文件直接复制到我的工作目录并注释掉该行\PassOptionsToClass{a4paper}{article},现在一切都像 2021 年 12 月 5 日一样正常。CTAN 显示LaTeX基础发行版的某些部分显然已于 2021 年 12 月 6 日更新,这解释了差异。

在软件包的文档中,doc有一个解决方案可以避免拾取,那就是在文件中ltxdoc.cfg替换为\documentclass{ltxdoc}.dtx

documentclass[options]{article}
\usepackage{doc}

我根本不知道这种区别的存在并且想让初学者了解它。

相关内容