文本中间的 \selectlanguage 会导致额外的垂直空间

文本中间的 \selectlanguage 会导致额外的垂直空间

请考虑以下示例:

\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/2388https://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}

在此处输入图片描述

相关内容