当 \cref 使用 create-theorem 定义某些具有空名称的内容时,会出现奇怪的额外空格

当 \cref 使用 create-theorem 定义某些具有空名称的内容时,会出现奇怪的额外空格

考虑下面的例子,我从中复制了一些代码这个答案

\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\newskip\nonfill@parfillskip
\AtBeginDocument{%
  \setlength{\nonfill@parfillskip}{0pt plus \dimexpr\columnwidth-2\parindent}%
  \setlength{\parfillskip}{\nonfill@parfillskip}%
}
\patchcmd{\@trivlist}{\@flushglue}{\nonfill@parfillskip}{}{}
\makeatother

\usepackage{amsthm}
\usepackage{create-theorem}

\CreateTheorem{emptythm}{
    name = {
        heading = {EmptyTHM},
        crefname = {}{},
    }
}

\begin{document}

\begin{emptythm}\label{test}
    Test
\end{emptythm}

Text\cref{test}

Text \cref{test}

(\cref{test})

\end{document}

参考文献给出了以下结果,其中数字前有奇怪的额外空格:

在此处输入图片描述

如果有人注释掉修改的代码\parfillskip,结果就会变得正常:

在此处输入图片描述

我其实不打算对 做任何事情\parfillskip。只是我很好奇为什么会发生这种情况——也许我在包中做错了什么create-theorem。但是,我不知道如何在这种情况下进行调试:有没有办法知道在空白处附近发生了什么并找到相应的代码?

我问这个问题是因为我发现,与通常的引用不同,当尝试使用空的引用名称\cref定义某些东西create-theorem时,它之前的空格的行为并不像平常那​​样——有时会扩大,有时会缩小,非常难以预测,但我无法找出导致这种情况的原因

答案1

这是你软件包中的一个错误。你试图通过插入负跳过来撤消空格,但你忘记了拉伸和收缩部分。当它们保留时,它们会被拉伸以满足要求\parfillskip。你为什么不使用 simply\unskip来代替呢?

\documentclass{article}

\ExplSyntaxOn
% from \crefthe_empty_adjust:n
\newcommand\minusspace{\skip_horizontal:n { -\tex_fontdimen:D 2 \tex_font:D }}
\ExplSyntaxOff

\begin{document} 
\showoutput

Text \minusspace blub

\parfillskip=0pt plus \dimexpr\columnwidth-2\parindent\relax

Text \minusspace blub

\ExplSyntaxOn
\renewcommand\minusspace{\skip_horizontal:n { -\tex_fontdimen:D 2 \tex_font:D~plus -\tex_fontdimen:D 3 \tex_font:D~minus -\tex_fontdimen:D 4 \tex_font:D }}
\ExplSyntaxOff
Text \minusspace blub

Text \unskip blub

\end{document}

在此处输入图片描述

相关内容