latex3 / babel

The babel system for LaTeX, LuaLaTeX and XeLaTeX
LaTeX Project Public License v1.3c
124 stars 34 forks source link

`\selectlanguage` disturbs `\lastskip` #215

Closed LupinoTech closed 1 year ago

LupinoTech commented 1 year ago

When I have an environment with a vertical skip after and whose content starts with \selectlanguage, and another environment or macro after the first environment that utilizes \addvspace, spaces are added. I tested a bit and figured that \selectlanguage resets \lastskip to 0pt:

MWE:

\documentclass{article}
\parindent0mm
\author{}
\title{}
\usepackage[main=ngerman,french]{babel}
\newenvironment{mylist1}{\addvspace{1\baselineskip}}{\vskip1\baselineskip}
\newenvironment{mylist2}{\addvspace{1\baselineskip}}{\vskip1\baselineskip}

\begin{document}

Main Text main text

\begin{mylist1}\selectlanguage{french}
  mylist1 mylist1 mylist1 
\end{mylist1}

Main Text main text

\begin{mylist2}
mylist2 mylist2 mylist2 
\end{mylist2}

Main Text main text

\begin{mylist1}\selectlanguage{french}
mylist1 mylist1 mylist1 
\end{mylist1}

\begin{mylist2}
mylist2 mylist2 mylist2 
\end{mylist2}

Main Text main text

\end{document}

I got it fixed by adding the following to my preamble (using hyperref):

\makeatletter
\AtBeginDocument{%
  \let\ltx@bbl@pop@language\bbl@pop@language
  \def\bbl@pop@language{\Hy@SaveLastskip\ltx@bbl@pop@language\Hy@RestoreLastskip}
  \let\ltx@selectlanguage\selectlanguage
  \def\selectlanguage#1{\Hy@SaveLastskip\ltx@selectlanguage{#1}\Hy@RestoreLastskip}
}
\makeatother
jbezos commented 1 year ago

It’s a known issue. See the warning in section 1.7 of the babel manual and What’s new in babel 3.64.