polyglossia icon indicating copy to clipboard operation
polyglossia copied to clipboard

\selectlanguage is processed in the .toc file

Open pcdi opened this issue 1 year ago • 16 comments

Compilation is significantly slower in a document with many language switches and a table of contents.

This issue is very likely connected to #593 or latex3/latex2e/issues/1078. I might be mistaken, but I fear that 98ba2e022b671dffc1ae73fb03935b658ab81d45 might only have shifted the problem to another place, namely the .toc file (although I am not sure if this is something that should be handled by TeX or by polyglossia).

Consider the following example file. I have copy-pasted the contents of https://github.com/latex3/latex2e/issues/1078#issue-1732291867 multiple times to make the difference more noticeable.

Example.tex
\documentclass{article}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguage{english}

\begin{document}
\tableofcontents
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%

\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%

\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%

\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\chapter{Chapter Title}
\begin{english}[variant=american]%
\noindent{\small\textbf{The Adventure of the Empty House}}{\small}\\
{\small by Sir Arthur Conan Doyle}{\small\par}

{\small It was in the spring of the year 1894 that all London was interested,
which was only withdrawn upon the third of last month.}{\small\par}

\end{english}%

Voici un exemple

\begin{english}[variant=american]%
{\footnotesize It can be imagined that my close intimacy with Sherlock
they were known to the public at the conclusion of the inquest.}

\end{english}%
Vous pouvez avoir jusqu'à 10 colonnes si vous le désirez, mais ça
risque de ne pas être agréable à la lecture.

\begin{english}[variant=american]%
\end{english}%

Pour ajouter un texte en préface pour plusieurs colonnes, positionnez

\begin{english}[variant=american]%

{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
exemple, la commande

\begin{english}[variant=american]%

\end{english}%
crée une sous-section.

\begin{english}[variant=american]%
{\small A minute examination of the circumstances served only to make
yards of the house. No one had heard a shot.}

\end{english}%

\begin{english}[variant=american]%
{\small On the evening of the crime, he returned from the club exactly
bullet, but no weapon of any sort was to be found in the room.}

\end{english}%
\end{document}

First run:

> time lualatex Example.tex
This is LuaHBTeX, Version 1.18.0 (TeX Live 2024) 
 restricted system commands enabled.
(./Example.tex
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-03-14>
[…]
No file Example.aux.
[…]
No file Example.toc.
[1{/usr/local/texlive/2024/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
[2] [3] [4] [5] [6] (./Example.aux))
 439 words of node memory still in use:
   3 hlist, 1 vlist, 1 rule, 3 glue, 4 kern, 1 penalty, 1 glyph, 7 attribute, 5
0 glue_spec, 5 attribute_list, 1 write nodes
   avail lists: 1:6,2:481,3:201,4:4,5:237,6:53,7:4263,9:145,10:3,11:182
[…]
Output written on Example.pdf (6 pages, 31334 bytes).
Transcript written on Example.log.
lualatex Example.tex  1,47s user 0,04s system 98% cpu 1,537 total

Second run:

time lualatex Example.tex              
This is LuaHBTeX, Version 1.18.0 (TeX Live 2024) 
 restricted system commands enabled.
(./Example.tex
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-03-14>
[…]
(./Example.aux)
[…]
(./Example.toc) [1{/usr/local/texlive/2024/texmf-var/fonts/map/pdftex/upd
map/pdftex.map}] [2] [3] [4] [5] [6] (./Example.aux))
 434 words of node memory still in use:
   3 hlist, 1 vlist, 1 rule, 3 glue, 4 kern, 1 penalty, 1 glyph, 7 attribute, 4
9 glue_spec, 5 attribute_list, 1 write nodes
   avail lists: 1:3,2:477,3:195,4:12,5:235,6:52,7:4202,9:173,10:3,11:180
[…]
Output written on Example.pdf (6 pages, 34794 bytes).
Transcript written on Example.log.
lualatex Example.tex  2,58s user 0,05s system 97% cpu 2,690 total

The compilation process notably slows down at (./Example.toc and it takes a while before ) is printed.

If you remove \tableofcontents from Example.tex, compilation time stays constant on subsequent runs:

lualatex Example.tex  1,45s user 0,05s system 96% cpu 1,562 total

On a larger document with around 50 pages, many language switches, glossary, and bibliography (if run from scratch):

Without \tableofcontents:

latexmk Document.tex  170,59s user 4,62s system 104% cpu 2:47,76 total

With \tableofcontents:

latexmk Document.tex  243,48s user 5,06s system 101% cpu 4:03,67 total

In this case, it notably hangs at (./Document.toc and also after [1] (when it reaches the page where the ToC is typeset). Document.toc has 1760 lines. Of these, only 54 are \contentslines, the rest of them are \selectlanguage commands.

pcdi avatar May 14 '24 14:05 pcdi

The example file does not compile (\chapter is not defined in article), did you mean to use the book document class?

Udi-Fogiel avatar May 14 '24 15:05 Udi-Fogiel

I'm sorry, that should be \sections in Example.tex above. Either way, this makes no difference: The times I list above were with tested article/section; now I also tried with book/chapter:

First run (with \tableofcontents):

lualatex Example.tex  1,97s user 0,05s system 98% cpu 2,058 total

Second run (with \tableofcontents):

lualatex Example.tex  3,46s user 0,05s system 98% cpu 3,546 total

Without \tableofcontents, both the first and second runs are compiling in the same amount of time.

pcdi avatar May 14 '24 16:05 pcdi

What do you propose? We need those language switches to have correct language markup in the TOC.

jspitz avatar May 17 '24 03:05 jspitz

There are several things we can do. I don't think all the stuff that is currently written to the .toc file is needed, here is the .toc from the example:

\selectlanguage *[]{french}
\contentsline {section}{\numberline {1}Chapter Title}{1}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {2}Chapter Title}{2}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {3}Chapter Title}{2}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {4}Chapter Title}{3}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {5}Chapter Title}{3}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {6}Chapter Title}{4}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {7}Chapter Title}{4}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {8}Chapter Title}{5}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {9}Chapter Title}{5}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {10}Chapter Title}{6}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\contentsline {section}{\numberline {11}Chapter Title}{6}{}%
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}
\selectlanguage *[variant=american]{english}
\selectlanguage *[variant=french,autospacing=true,thincolonspace=false,autospaceguillemets=true,autospacetypewriter=false,frenchfootnote=false,frenchitemlabels=false,itemlabels=\TU \textemdash ,itemlabeli=\TU \textemdash ,itemlabelii=\TU \textemdash ,itemlabeliii=\TU \textemdash ,itemlabeliv=\TU \textemdash ]{french}
\selectlanguage *[]{french}

notice how the french language is selected twice, and with different options. Instead of passing all of the current active options we can precompile the defualt values, this way we would not need to pass them each time which be faster. I believe using an innser command instead of wo variants of \selectlanguage would be better as well, as it will not need to read ahead and check for a star, or a square bracket.

Udi-Fogiel avatar May 17 '24 13:05 Udi-Fogiel

The otherlanguage environment is writing to the .toc file twice to restore the former language in the .toc at the end of the group. Once with the \aftergroup from \selectlanguage (or with \group_insert_after:N \xpg_pop_language: to be precise) https://github.com/reutenauer/polyglossia/blob/6a883958ca2af11b3314c5451b599dda012d9160/tex/polyglossia.sty#L2070-L2097 and once from its definition (specifically with \__xpg_unstack_language:n{xpg_set_language_only_aux:nn}) https://github.com/reutenauer/polyglossia/blob/6a883958ca2af11b3314c5451b599dda012d9160/tex/polyglossia.sty#L2526-L2543

Udi-Fogiel avatar May 17 '24 14:05 Udi-Fogiel

@pcdi I've just pushed a commit to master that should speed things up, can you test it?

Udi-Fogiel avatar May 17 '24 16:05 Udi-Fogiel

I suppose you have checked whether the bugs we had fixed with these writings (such as #309) haven't come back?

jspitz avatar May 17 '24 17:05 jspitz

I suppose you have checked whether the bugs we had fixed with these writings (such as #309) haven't come back?

Yes, the problem was that we did not use the default settings for each use of \selectlanguage, this is also the problem discussed at https://github.com/reutenauer/polyglossia/issues/610#issuecomment-1868319218, but we also need to consider the values of keys in initialization time from the gloss.

I just need to consider keys of inherited glosses and I'm done, but the following fails in the released version:

\documentclass{article}

\usepackage{polyglossia}
\setdefaultlanguage{acadien}

\stop

what should happen here?

Udi-Fogiel avatar May 17 '24 18:05 Udi-Fogiel

Apart from the unclear and already existing problem, it seems to work (also tested the problem at #320)

Udi-Fogiel avatar May 17 '24 18:05 Udi-Fogiel

Shouldn't that be acadian?

Udi-Fogiel avatar May 17 '24 18:05 Udi-Fogiel

Shouldn't that be acadian?

Yes, acadien is wrong.

jspitz avatar May 18 '24 08:05 jspitz

Name fixed at 01f0c714a1c511.

jspitz avatar May 18 '24 10:05 jspitz

I also updated the test files, but not the logs which are being compared.

jspitz avatar May 18 '24 10:05 jspitz

On a larger document with around 50 pages, many language switches, glossary, and bibliography (if run from scratch):

Without \tableofcontents:

latexmk Document.tex  170,59s user 4,62s system 104% cpu 2:47,76 total

With \tableofcontents:

latexmk Document.tex  243,48s user 5,06s system 101% cpu 4:03,67 total

In this case, it notably hangs at (./Document.toc and also after [1] (when it reaches the page where the ToC is typeset). Document.toc has 1760 lines. Of these, only 54 are \contentslines, the rest of them are \selectlanguage commands.

@pcdi Hopefully 964ba56 should speed things even more, especially with documents with many language switches, or many glosses loaded.

Udi-Fogiel avatar May 21 '24 15:05 Udi-Fogiel

How do I test this correctly with the dev version?

pcdi avatar May 21 '24 16:05 pcdi

You can install the development version by cloning the repository and run l3build install from your local clone.

Udi-Fogiel avatar May 21 '24 16:05 Udi-Fogiel

In release version 2.3 (2024/09/23), there is a tremendous improvement, thanks a lot!

Without table of contents:

> latexmk -C && time latexmk Document
'lualatex': time = 28.56
'cusdep aux glstex Document': time = 6.64
'biber Document': time = 2.51
'lualatex': time = 37.46
'cusdep aux glstex Document': time = 6.56
'biber Document': time = 2.50
'lualatex': time = 37.79
'cusdep aux glstex Document': time = 6.80
'biber Document': time = 2.51
'lualatex': time = 37.94
'cusdep aux glstex Document': time = 6.82
'lualatex': time = 37.72
Processing time = 217.53, of which invoked processes = 213.81, other = 3.72.
Elapsed clock time = 205.13.
Number of rules run = 12

latexmk Document  211,27s user 6,40s system 106% cpu 3:25,24 total

With table of contents:

> latexmk -C && time latexmk Document
'lualatex': time = 28.93
'cusdep aux glstex Document': time = 5.46
'biber Document': time = 2.48
'lualatex': time = 48.80
'cusdep aux glstex Document': time = 6.98
'biber Document': time = 2.50
'lualatex': time = 53.62
'cusdep aux glstex Document': time = 6.36
'biber Document': time = 2.50
'lualatex': time = 53.64
'cusdep aux glstex Document': time = 7.05
'lualatex': time = 54.22
'cusdep aux glstex Document': time = 6.67
Processing time = 283.52, of which invoked processes = 279.21, other = 4.31.
Elapsed clock time = 272.14.
Number of rules run = 13

latexmk Document  276,60s user 7,03s system 104% cpu 4:32,25 total

pcdi avatar Dec 19 '24 12:12 pcdi