请考虑以下示例:
\documentclass{article}
\usepackage[french]{babel}
\usepackage{amsthm}
\begin{document}
Some text
\begin{proof}
\end{proof}
\begin{proof}
\end{proof}
Some text
\begin{proof}
\end{proof}
\selectlanguage{french}%
\begin{proof}
\end{proof}
Some text
\end{document}
结果是:
\selectlanguage{French}
可以看出,在两个环境中间使用proof
会导致一些额外的空格。我认为这可能是因为%
的定义中缺少一些内容\selectlanguage
,但我该如何解决这个问题呢?
答案1
它不是由虚假空格触发的——如果您\selectlanguage
在单词之间使用,您会发现它不会产生空格——,问题是\selectlanguage
包含 \write 命令,这是一个 whatsits 并改变间距。您可以获得类似的效果,例如使用\addcontentsline
。
hyperref 也创建了很多内容,其中包含一些用于保存和恢复间距的代码,另请参阅https://tex.stackexchange.com/a/578793/2388和https://github.com/latex3/babel/issues/114。
\documentclass{article}
\usepackage[french]{babel}
\usepackage{amsthm}
\usepackage{hyperref}
\begin{document}
Some text
\begin{proof}
\end{proof}
\begin{proof}
\end{proof}
Some text
\begin{proof}
\end{proof}
%
\makeatletter
\Hy@SaveLastskip
\selectlanguage{french}%
\Hy@RestoreLastskip
\makeatother
\begin{proof}
\end{proof}
\end{document}