考虑下面的例子,我从中复制了一些代码这个答案。
\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}