reutenauer / polyglossia

An alternative to Babel for XeLaTeX and LuaLaTeX
http://www.ctan.org/pkg/polyglossia
MIT License
185 stars 52 forks source link

\selectlanguage is processed in the .toc file #641

Open pcdi opened 1 month ago

pcdi commented 1 month ago

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 ```latex \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.

Udi-Fogiel commented 1 month ago

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

pcdi commented 1 month ago

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.

jspitz commented 1 month ago

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

Udi-Fogiel commented 1 month ago

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 commented 1 month ago

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 commented 1 month ago

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

jspitz commented 1 month ago

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

Udi-Fogiel commented 1 month ago

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 commented 1 month ago

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

Udi-Fogiel commented 1 month ago

Shouldn't that be acadian?

jspitz commented 1 month ago

Shouldn't that be acadian?

Yes, acadien is wrong.

jspitz commented 1 month ago

Name fixed at 01f0c714a1c511.

jspitz commented 1 month ago

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

Udi-Fogiel commented 1 month ago

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.

pcdi commented 1 month ago

How do I test this correctly with the dev version?

Udi-Fogiel commented 1 month ago

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