循环运行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
。
$…$
这个问题似乎与您是否使用或作为数学分隔符无关\(…\)
。问题确实取决于编译器:使用lualatex
或xelatex
代替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}