babel+newtx+superiours+stmaryrd+LS1+LS2+biblatex+biber+\cite+\mathsf+\mathit+\mathbf+\printbibliography = 数学模式后吞噬的空间

babel+newtx+superiours+stmaryrd+LS1+LS2+biblatex+biber+\cite+\mathsf+\mathit+\mathbf+\printbibliography = 数学模式后吞噬的空间

循环运行pdflatex+直至稳定biber

\documentclass[USenglish]{article}
\pagestyle{empty}% only to omit the page number
\usepackage{babel}
\usepackage{newtx}
\usepackage{superiors}
\usepackage{stmaryrd}
\DeclareFontEncoding{LS1}{}{}
\DeclareFontSubstitution{LS1}{stix}{m}{n}
\DeclareSymbolFont{stixsymbols2}{LS1}{stixfrak}{m}{n}% for \typecolon ⦂ (U+2982)
\DeclareSymbolFont{stixletters}{LS1}{stix}{m}{it}% for \nvDash ⊭ (U+22AD)
\usepackage[backend=biber,autolang=other]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{B,
    author={M. B.},
    title={Title},
    langid={USenglish}}
@online{W,
    author={Eric Wolfgang Weisstein},
    title={5-smooth numbers, i.e., numbers whose prime divisors are all $\le$ 5}}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareFontEncoding{LS2}{}{}% for white parens, braces with vertical bar, curved angle brackets, wiggly fences, double wiggly fences, pullback, pushout.
\DeclareFontSubstitution{LS2}{stix}{m}{n}
\DeclareSymbolFont{stixlargesymbols}{LS2}{stixex}{m}{n}
\begin{document}
\cite{B,W}
$\mathsf{}\mathit{}\mathbf{}$
\printbibliography
\end{document}

产量

输出

错误:输入中的空格$\le$ 5在输出中被吞没:≤5

$…$这个问题似乎与您是否使用或作为数学分隔符无关\(…\)。问题确实取决于编译器:使用lualatexxelatex代替pdflatex,错误就会消失。

这个例子很简单,删除任何一行都会\pagestyle{empty}导致编译错误,或者不会暴露错误。为了保持示例的简洁,许多有意义的内容(从星火、以无格式、斜体和粗体排版数学字母以及某些书目数据)已被删除。

出现此错误的当前版本:

  • pdfTeX 3.141592653-2.6-1.40.25 (TeX Live 2023)

  • 文章 2023/05/17 v1.4n

  • babel 2024/02/07 v24.2

  • USenglish 2017/06/06 v3.3

  • newtx 2024/02/24 v1.739

  • 上级 2024/01/07 - 2.0上级

  • stmaryrd 1994/03/03

  • ls1stix.fd 2015/04/17 v1.1.2-latex

  • ls2stix.fd 2015/04/17 v1.1.2-latex

  • biblatex 2023/03/05 v3.19

  • 比伯 2.19

在稍旧的 Debian TeX Live 发行版中,不会发生此错误;版本如下:

  • pdfTeX 3.141592653-2.6-1.40.25(TeX Live 2023/Debian)

  • 文章 2023/05/17 v1.4n

  • babel 2023/09/29 v3.95

  • USenglish 2017/06/06 v3.3r

  • newtx 2023/08/20 v1.724

  • 上级 2019/08/18 - 1.06

  • stmaryrd 1994/03/03

  • ls1stix.fd 2015/04/17 v1.1.2-latex

  • ls2stix.fd 2015/04/17 v1.1.2-latex

  • biblatex 2023/03/05 v3.19

  • 比伯 2.19

应该责怪谁并要求谁修复错误?尽管 TeX Live、newtx 和 babel 的维护者是自然的嫌疑人,但你永远不知道(因为错误可能一直存在,可能刚刚由于其他地方的变化而被揭露)...

更新(2024-03-24):从 biblatex 3.20 和 biber 2.20 开始,出现了空格,因此该错误至少目前已经消失。

答案1

babel使用等效于的定义来\ingnorespacesafterend忽略后面的空格\end{otherlanguage},但是如果有人(或某个包)\endotherlanguage直接调用,则忽略标志可能会对文档的其余部分全局设置为 true。

(第一个版本,不太正确)

\def\endotherlanguage{\ignorespaces}

\ignorespaces如果不作为环境使用,可以修改定义以仅使用。

\makeatletter
\def\endotherlanguage{%
  \ifx\@currenvir\otherlanguage@env\ignorespacesafterend\fi
  \ignorespaces}
\def\otherlanguage@env{otherlanguage}
\makeatother

可以放置在前导部分(babel加载后的任何位置)

Babel 最初的定义是

\long\def\endotherlanguage{%
  \global\@ignoretrue\ignorespaces}

相关内容