From 2328328e473107d8bfe42ef7f2fcff96ce50c6f4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 10 Feb 2022 21:19:07 +0000 Subject: crefthe (10feb22) git-svn-id: svn://tug.org/texlive/trunk@61970 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/doc/latex/crefthe/crefthe-doc.pdf | Bin 110051 -> 111955 bytes .../texmf-dist/doc/latex/crefthe/crefthe-doc.tex | 34 +- Master/texmf-dist/tex/latex/crefthe/crefthe.sty | 475 ++++++++++----------- 3 files changed, 239 insertions(+), 270 deletions(-) (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.pdf b/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.pdf index 7175c64abc7..5cf5715d5c1 100644 Binary files a/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.pdf and b/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.tex b/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.tex index 39d53e76b00..718672f8968 100644 --- a/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.tex +++ b/Master/texmf-dist/doc/latex/crefthe/crefthe-doc.tex @@ -64,10 +64,10 @@ fonttitle = \sffamily, attach boxed title to top left = {yshift=-\tcboxedtitleheight/2, xshift=.5cm}, boxed title style = {boxrule=0pt, colframe=paper}, - before skip = 0.3cm, - after skip = 0.3cm, - top = 3mm, - bottom = 3mm, + before skip = 3mm, + after skip = 3mm, + top = 2.5mm, + bottom = 1.5mm, title={\scshape\sffamily #1}]% }{\end{tcolorbox}\ResumeLineNumbers} @@ -89,7 +89,7 @@ \title{\crefthepackage{} - cross referencing with proper definite articles} \author{Jinwen XU} -\thanks{Corresponding to: \texttt{\crefthepackage{} 2022/02/04}} +\thanks{Corresponding to: \texttt{\crefthepackage{} 2022/02/10}} \date{February 2022, in Paris} \maketitle @@ -156,9 +156,9 @@ Before everything, you need to define the names, which can be done with \lstinli \crefthename{theorem}[le]{théorème}[les]{théorèmes} \end{code} -% \begin{tip} -% The \lstinline|\crefthename|s should be placed in your preamble. -% \end{tip} +\begin{tip} + The \lstinline|\crefthename|s should be placed in your preamble, otherwise the \lstinline|\cref| formats will not be set. These names can, however, be reset within the document body. +\end{tip} Then you can use the command \lstinline|\crefthe| as follows: \begin{itemize} @@ -207,7 +207,7 @@ which would result in (provided that you have done \lstinline|\selectlanguage{fr Voilà ! -\section{Regarding the cases} +\section{Regarding the upper and lower cases} The commands also have correspoding uppercased version: \lstinline|\Crefthename| and \lstinline|\Crefthe|, similar to \textsf{cleveref}'s \lstinline|\Crefname| and \lstinline|\Cref|, reserved for use at the beginning of a sentence. \lstinline|\Crefthe| can handle case changing automatically: for example, with \lstinline|\Crefthe[À]{thm1,thm2,prop3}|, you will get something like @@ -222,22 +222,22 @@ Of course you will have to define the \lstinline|\Crefthename|s separately, for \Crefthename{proposition}[La]{proposition}[Les]{propositions} \end{code} -\section{Relationship with \textsf{cleveref}} +\section{For writing multi-language documents} -\crefthepackage{} loads \textsf{cleveref} automatically and pass all the options to it. All its commands, used without optional arguments, degenerate to those in \textsf{cleveref}. For example, \lstinline|\crefthe{...}| is the same as \lstinline|\cref{...}|, and \lstinline|\crefthename| is the same as \lstinline|\crefname| if the definite articles are not specified. That said, you can safely use the command \lstinline|\crefthe| everywhere in your document without causing extra trouble. +To place hyperlinks at the right place, \lstinline|\crefthename| touches the corresponding \lstinline|\crefformat| internally, which makes the format language-dependent. If you are writing multi-language documents, you may consider putting \lstinline|\crefthename| inside your language configuration so as to reset it each time you select a new language. -With the option \texttt{overwrite}, user commands in \textsf{cleveref} will be replaced by those offered here, thus you can simply write \lstinline|\cref| for \lstinline|\crefthe| -- and similarly for \lstinline|\Cref|, \lstinline|\crefname| and \lstinline|\Crefname|. -\section{For multi-language documents} +\section{The relationship with \textsf{cleveref}} + +\crefthepackage{} loads \textsf{cleveref} automatically and pass all the options to it. All its commands, used without optional arguments, degenerate to those in \textsf{cleveref}. For example, \lstinline|\crefthe{...}| is the same as \lstinline|\cref{...}|, and \lstinline|\crefthename| is the same as \lstinline|\crefname| if the definite articles are not specified. That said, you can safely use the command \lstinline|\crefthe| everywhere in your document without causing extra trouble. + +With the option \texttt{overwrite}, user commands in \textsf{cleveref} will be replaced by those offered here, thus you can simply write \lstinline|\cref| for \lstinline|\crefthe| -- and similarly with \lstinline|\Cref|, \lstinline|\crefname| and \lstinline|\Crefname|. -To place hyperlinks at the right place, \lstinline|\crefthename| touches the corresponding \lstinline|\crefformat| internally, which makes the format language-dependent. If you are writing multi-language documents, you may consider putting \lstinline|\crefthename| inside your language configuration so as to reset it each time you select a new language. \section{Known issues} \begin{itemize} \item \crefthepackage{} currently works for French, Italian, Portuguese (European and Brazilian) and Spanish, certainly more would be added to this list. - \item The current mechanism does not work for German. The author plans to adopt a more refined approach in later versions in order to support the various situations in German. - \item For now, the automatic case changing mechanism only works properly under Unicode based engines. If you are using pdf\LaTeX{} or typing accented letters with text commands, \lstinline|\Crefthe| may not work as expected. - % \item In case that the initial letter of \meta{prep} is capitalized, \crefthepackage{} cannot yet handle the case changes automatically. However, this should be a rare occurrence. + \item The current mechanism does not work for German. The author plans to adopt a more refined approach in later versions in order to support the various situations in German. Meanwhile, you may consider the package \textsf{zref-clever}, which has a much more powerful and sophisticated interface for configure cross referencing. \item The names of theorem-like environments are not provided --- for the moment you need to define them all by yourself. However, users are encouraged to use the \ProjLib{} toolkit, which already handles everything for you. \end{itemize} diff --git a/Master/texmf-dist/tex/latex/crefthe/crefthe.sty b/Master/texmf-dist/tex/latex/crefthe/crefthe.sty index 2da17143342..27fbe01122a 100644 --- a/Master/texmf-dist/tex/latex/crefthe/crefthe.sty +++ b/Master/texmf-dist/tex/latex/crefthe/crefthe.sty @@ -1,6 +1,6 @@ %% %% Copyright (C) 2021-2022 by Jinwen XU -%% ------------------------------- +%% ------------------------------------ %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3c of this license @@ -13,323 +13,292 @@ \RequirePackage{l3keys2e} \ProvidesExplPackage {crefthe} - {2022/02/04} {} + {2022/02/10} {} {Cross referencing with proper definite articles} -\keys_define:nn {crefthe} +\keys_define:nn { crefthe } { , overwrite .bool_set:N = \l__crefthe_overwrite_bool - , overwrite .initial:n = { false } - , unknown .code:n = - { - \PassOptionsToPackage { \CurrentOption } {cleveref} - } + , overwrite .initial:n = { false } + , unknown .code:n = + { \PassOptionsToPackage { \CurrentOption } { cleveref } } } -\ProcessKeysOptions{crefthe} +\ProcessKeysOptions { crefthe } -\RequirePackage{cleveref} +\RequirePackage { cleveref } -\cs_set_eq:cc {crefthe_cref_original:n} {cref} -\cs_set_eq:cc {crefthe_Cref_original:n} {Cref} -\cs_set_eq:cc {crefthe_crefname_original:n} {crefname} -\cs_set_eq:cc {crefthe_Crefname_original:n} {Crefname} +\NewCommandCopy \crefthe_cref_original:w \cref +\NewCommandCopy \crefthe_Cref_original:w \Cref +\NewCommandCopy \crefthe_crefname_original:w \crefname +\NewCommandCopy \crefthe_Crefname_original:w \Crefname -\bool_if:NT \l__crefthe_overwrite_bool - { - \hook_gput_next_code:nn {package/crefthe/after} - { - \cs_set_eq:cc {cref} {crefthe} - \cs_set_eq:cc {Cref} {Crefthe} - \cs_set_eq:cc {crefname} {crefthename} - \cs_set_eq:cc {Crefname} {Crefthename} - } - } - -\tl_new:N \g__crefthe_prep_once_tl -\tl_new:N \g__crefthe_prep_each_tl +\str_new:N \l__crefthe_tmpa_str -\tl_new:N \l__crefthe_prep_mode_tl +% \l__crefthe_prep_once_tl is for the "-" mode, +% that only passes the preposition to the first definite article; +% \l__crefthe_prep_each_tl is for the "+" mode, +% that passes the preposition to every definite article. +\tl_new:N \l__crefthe_prep_once_tl +\tl_new:N \l__crefthe_prep_each_tl -\cs_new:Nn \crefthe_case:n { #1 } -\cs_new:Nn \crefthe_nochange:n { #1 } +\bool_new:N \l__crefthe_uppercase_bool \NewDocumentCommand \crefthe { s t- t+ O{} m } { - \bool_if:nTF { #2 } - { - \tl_gset:Nn \g__crefthe_prep_once_tl { #4 } - } - { - \bool_if:nTF { #3 } - { - \tl_gset:Nn \g__crefthe_prep_each_tl { #4 } - } - { - \exp_args:Nx \str_case:nn \l__crefthe_prep_mode_tl - { - { - } { \tl_gset:Nn \g__crefthe_prep_once_tl { #4 } } - { + } { \tl_gset:Nn \g__crefthe_prep_each_tl { #4 } } - } - } - } - \bool_if:nTF { #1 } { \crefthe_cref_original:n * { #5 } } { \crefthe_cref_original:n { #5 } } - \tl_gset:Nn \g__crefthe_prep_each_tl {} + \bool_set_false:N \l__crefthe_uppercase_bool + \__crefthe_cref_general:NNNnnN #1 #2 #3 { #4 } { #5 } \crefthe_cref_original:w } - \NewDocumentCommand \Crefthe { s t- t+ O{} m } { - \cs_gset:Npn \crefthe_case:n ##1 { \text_titlecase:n {##1} } - \bool_if:nTF { #2 } - { - \tl_gset:Nn \g__crefthe_prep_once_tl { #4 } - } + \bool_set_true:N \l__crefthe_uppercase_bool + \__crefthe_cref_general:NNNnnN #1 #2 #3 { #4 } { #5 } \crefthe_Cref_original:w + } +\cs_new_protected:Npn \__crefthe_cref_general:NNNnnN #1 #2 #3 #4 #5 #6 + { + \bool_if:NTF #2 + { \tl_set:Nn \l__crefthe_prep_once_tl { #4 } } { - \bool_if:nTF { #3 } - { - \tl_gset:Nn \g__crefthe_prep_each_tl { #4 } - } + \bool_if:NTF #3 + { \tl_set:Nn \l__crefthe_prep_each_tl { #4 } } { - \exp_args:Nx \str_case:nn \l__crefthe_prep_mode_tl + % \str_set:Nx fully expands \__crefthe_prep_mode: into a string, + % then \str_case:Vn compares the value of the resulting string: + \str_set:Nx \l__crefthe_tmpa_str { \__crefthe_prep_mode: } + \str_case:Vn \l__crefthe_tmpa_str { - { - } { \tl_gset:Nn \g__crefthe_prep_once_tl { #4 } } - { + } { \tl_gset:Nn \g__crefthe_prep_each_tl { #4 } } + { - } { \tl_set:Nn \l__crefthe_prep_once_tl { #4 } } + { + } { \tl_set:Nn \l__crefthe_prep_each_tl { #4 } } } } } - \bool_if:nTF { #1 } { \crefthe_Cref_original:n * { #5 } } { \crefthe_Cref_original:n { #5 } } - \tl_gset:Nn \g__crefthe_prep_each_tl {} + \bool_if:NTF #1 + { #6 * { #5 } } % here #6 is \crefthe_cref_original:w or \crefthe_Cref_original:w + { #6 { #5 } } + \tl_gclear:N \l__crefthe_prep_each_tl } -\NewDocumentCommand \crefthename { m O{} m O{} m } +% \__crefthe_prep_mode: defines the default mode for supported languages +\cs_new:Npn \__crefthe_prep_mode: { - \tl_if_blank:eTF { #2 } - { - \crefthe_crefname_original:n { #1 } { #3 } { #5 } - \cs_set:cn { cref_#1_format:nnn } { ##2 #3 ~ ##1 ##3 } - \cs_set:cn { cref_#1_format_first:nnn } { ##2 #5 ~ ##1 ##3 } - } + \str_case:Vn \languagename { - \crefthe_crefname_original:n { #1 } { \crefthemark{ #2 } #3 } { \crefthemark{ #4 } #5 } - \cs_set:cn { cref_#1_format:nnn } { \crefthemark { #2 } ##2 #3 ~ ##1 ##3 } - \cs_set:cn { cref_#1_format_first:nnn } { \crefthemark { #4 } ##2 #5 ~ ##1 ##3 } - } - \hook_gput_next_code:nn { begindocument } - { - \cs_set_eq:cc { cref@ #1 @format } { cref_#1_format:nnn } - \cs_set_eq:cc { cref@ #1 @format@first } { cref_#1_format_first:nnn } + {french} { + } + {italian} { + } + {spanish} { - } + {portuguese} { + } + {brazilian} { + } } } +\NewDocumentCommand \crefthename { m O{} m O{} m } + { + \__crefthe_name_general:nnnnnNN { #1 } { #2 } { #3 } { #4 } { #5 } + c \crefthe_crefname_original:w + } \NewDocumentCommand \Crefthename { m O{} m O{} m } { - \tl_if_blank:eTF { #2 } + \__crefthe_name_general:nnnnnNN { #1 } { #2 } { #3 } { #4 } { #5 } + C \crefthe_Crefname_original:w + } +\cs_new_protected:Npn \__crefthe_name_general:nnnnnNN #1 #2 #3 #4 #5 #6 #7 + { + % #6 is c or C + % #7 is \crefthe_crefname_original:w or \crefthe_Crefname_original:w + \tl_if_blank:nTF { #2 } { - \crefthe_Crefname_original:n { #1 } { #3 } { #5 } - \cs_set:cn { Cref_#1_format:nnn } { ##2 #3 ~ ##1 ##3 } - \cs_set:cn { Cref_#1_format_first:nnn } { ##2 #5 ~ ##1 ##3 } + #7 { #1 } { #3 } { #5 } + \cs_set:cn { #6ref_#1_format:nnn } { ##2 #3 ~ ##1 ##3 } + \cs_set:cn { #6ref_#1_format_first:nnn } { ##2 #5 ~ ##1 ##3 } } { - \crefthe_Crefname_original:n { #1 } { \crefthemark{ #2 } #3 }{ \crefthemark{ #4 } #5 } - \cs_set:cn { Cref_#1_format:nnn } { \crefthemark { #2 } ##2 #3 ~ ##1 ##3 } - \cs_set:cn { Cref_#1_format_first:nnn } { \crefthemark { #4 } ##2 #5 ~ ##1 ##3 } + #7 { #1 } { \crefthemark { #2 } #3 } { \crefthemark { #4 } #5 } + \cs_set:cn { #6ref_#1_format:nnn } { \crefthemark { #2 } ##2 #3 ~ ##1 ##3 } + \cs_set:cn { #6ref_#1_format_first:nnn } { \crefthemark { #4 } ##2 #5 ~ ##1 ##3 } } - \hook_gput_next_code:nn { begindocument } + \hook_gput_code:nnn { begindocument } { crefthe } { - \cs_set_eq:cc { Cref@ #1 @format } { Cref_#1_format:nnn } - \cs_set_eq:cc { Cref@ #1 @format@first } { Cref_#1_format_first:nnn } + \cs_set_eq:cc { #6ref@ #1 @format } { #6ref_#1_format:nnn } + \cs_set_eq:cc { #6ref@ #1 @format@first } { #6ref_#1_format_first:nnn } } } +\cs_generate_variant:Nn \text_lowercase:n { V } \NewDocumentCommand \crefthemark { m } { - \crefthe_contraction:nn { \crefthe_case:n \g__crefthe_prep_each_tl } - { - \crefthe_contraction:nn { \crefthe_case:n \g__crefthe_prep_once_tl } { #1 } - } - \tl_gset:Nn \g__crefthe_prep_once_tl {} - \tl_gset:Nx \g__crefthe_prep_each_tl { \text_lowercase:n \g__crefthe_prep_each_tl } + \crefthe_contraction:Ve \l__crefthe_prep_each_tl + { \crefthe_contraction:Vn \l__crefthe_prep_once_tl { #1 } } + \tl_gclear:N \l__crefthe_prep_once_tl + \tl_set:Nx \l__crefthe_prep_each_tl + { \text_lowercase:V \l__crefthe_prep_each_tl } \str_if_eq:eeF { \str_tail:n { #1 } } { ' } { ~ } - \cs_gset:Npn \crefthe_case:n ##1 { \crefthe_nochange:n {##1} } - % \cs_gset:Npn \crefthe_case:n ##1 { \text_lowercase:n {##1} } + \bool_set_false:N \l__crefthe_uppercase_bool } -\tl_set:Nn \l__crefthe_prep_mode_tl { - \str_case_e:nn { \languagename } - { - {french} { + } - {italian} { + } - {spanish} { - } - {portuguese} { + } - {brazilian} { + } - } -} - +\prg_generate_conditional_variant:Nnn \str_case_e:nn { nv } { p, T, F, TF } \cs_new:Npn \crefthe_contraction:nn #1#2 { - \tl_if_blank:eTF { #1 } - { #2 } + \exp_args:Ne \__crefthe_contraction:nnn + { \text_lowercase:n { #2 } } { #1 } { #2 } + } +\cs_generate_variant:Nn \crefthe_contraction:nn { V, Ve } +\cs_new:Npn \__crefthe_contraction:nnn #1 #2 #3 + { + % #1 is \text_lowercase:n { #3 } + % #2 is the preposition + \tl_if_blank:nTF { #2 } + { #3 } { - \tl_if_exist:cTF { crefthe_contraction_rule_ \languagename _tl } + \tl_if_exist:cTF { c_crefthe_contraction_rule_ \languagename _tl } { - \exp_args:Nnx \str_case_e:nnF { #1~\text_lowercase:n{ #2 } } + \exp_args:Ne \__crefthe_conditional_uppercase:n { - \tl_use:c { crefthe_contraction_rule_ \languagename _tl } + \str_case_e:nvF { #2~#1 } + { c_crefthe_contraction_rule_ \languagename _tl } + { #2~#1 } } - { #1~\text_lowercase:n{ #2 } } } - { #1 ~ #2 } + { #2~#3 } } } - -\tl_gset:Nn \crefthe_contraction_rule_french_tl +\cs_new:Npn \__crefthe_conditional_uppercase:n #1 { - { à~le } { au } - { à~les } { aux } - { de~le } { du } - { de~les } { des } - { À~le } { Au } - { À~les } { Aux } - { De~le } { Du } - { De~les } { Des } + \bool_if:NTF \l__crefthe_uppercase_bool + { \text_titlecase_first:n } + { \use:n } + { #1 } } -\tl_gset:Nn \crefthe_contraction_rule_italian_tl +\hook_gput_code:nnn { begindocument/end } { crefthe } { - { a~il } { al } - { a~lo } { allo } - { a~l' } { all' } - { a~la } { alla } - { di~il } { del } - { di~lo } { dello } - { di~l' } { dell' } - { di~la } { della } - { da~il } { dal } - { da~lo } { dallo } - { da~l' } { dall' } - { da~la } { dalla } - { in~il } { nel } - { in~lo } { nello } - { in~l' } { nell' } - { in~la } { nella } - { su~il } { sul } - { su~lo } { sullo } - { su~l' } { sull' } - { su~la } { sulla } - { a~i } { ai } - { a~gli } { agli } - { a~le } { alle } - { di~i } { dei } - { di~gli } { degli } - { di~le } { delle } - { da~i } { dai } - { da~gli } { dagli } - { da~le } { dalle } - { in~i } { nei } - { in~gli } { negli } - { in~le } { nelle } - { su~i } { sui } - { su~gli } { sugli } - { su~le } { sulle } - { A~il } { Al } - { A~lo } { Allo } - { A~l' } { All' } - { A~la } { Alla } - { Di~il } { Del } - { Di~lo } { Dello } - { Di~l' } { Dell' } - { Di~la } { Della } - { Da~il } { Dal } - { Da~lo } { Dallo } - { Da~l' } { Dall' } - { Da~la } { Dalla } - { In~il } { Nel } - { In~lo } { Nello } - { In~l' } { Nell' } - { In~la } { Nella } - { Su~il } { Sul } - { Su~lo } { Sullo } - { Su~l' } { Sull' } - { Su~la } { Sulla } - { A~i } { Ai } - { A~gli } { Agli } - { A~le } { Alle } - { Di~i } { Dei } - { Di~gli } { Degli } - { Di~le } { Delle } - { Da~i } { Dai } - { Da~gli } { Dagli } - { Da~le } { Dalle } - { In~i } { Nei } - { In~gli } { Negli } - { In~le } { Nelle } - { Su~i } { Sui } - { Su~gli } { Sugli } - { Su~le } { Sulle } + \bool_if:NT \l__crefthe_overwrite_bool + { + \RenewCommandCopy \cref \crefthe + \RenewCommandCopy \Cref \Crefthe + \RenewCommandCopy \crefname \crefthename + \RenewCommandCopy \Crefname \Crefthename + } } -\tl_gset:Nn \crefthe_contraction_rule_spanish_tl +\tl_const:Nn \c_crefthe_contraction_rule_french_tl { - { a~el } { al } - { de~el } { del } - { A~el } { Al } - { De~el } { Del } + { à~le } { au } + { à~les } { aux } + { de~le } { du } + { de~les } { des } + { À~le } { Au } + { À~les } { Aux } + { De~le } { Du } + { De~les } { Des } } - -\tl_gset:Nn \crefthe_contraction_rule_portuguese_tl +\tl_const:Nn \c_crefthe_contraction_rule_italian_tl { - { a~o } { ao } - { a~a } { à } - { a~os } { aos } - { a~as } { às } - { de~o } { do } - { de~a } { da } - { de~os } { dos } - { de~as } { das } - { em~o } { no } - { em~a } { na } - { em~os } { nos } - { em~as } { nas } - { A~o } { Ao } - { A~a } { À } - { A~os } { Aos } - { A~as } { Às } - { De~o } { Do } - { De~a } { Da } - { De~os } { Dos } - { De~as } { Das } - { Em~o } { No } - { Em~a } { Na } - { Em~os } { Nos } - { Em~as } { Nas } + { a~il } { al } + { a~lo } { allo } + { a~l' } { all' } + { a~la } { alla } + { di~il } { del } + { di~lo } { dello } + { di~l' } { dell' } + { di~la } { della } + { da~il } { dal } + { da~lo } { dallo } + { da~l' } { dall' } + { da~la } { dalla } + { in~il } { nel } + { in~lo } { nello } + { in~l' } { nell' } + { in~la } { nella } + { su~il } { sul } + { su~lo } { sullo } + { su~l' } { sull' } + { su~la } { sulla } + { a~i } { ai } + { a~gli } { agli } + { a~le } { alle } + { di~i } { dei } + { di~gli } { degli } + { di~le } { delle } + { da~i } { dai } + { da~gli } { dagli } + { da~le } { dalle } + { in~i } { nei } + { in~gli } { negli } + { in~le } { nelle } + { su~i } { sui } + { su~gli } { sugli } + { su~le } { sulle } + { A~il } { Al } + { A~lo } { Allo } + { A~l' } { All' } + { A~la } { Alla } + { Di~il } { Del } + { Di~lo } { Dello } + { Di~l' } { Dell' } + { Di~la } { Della } + { Da~il } { Dal } + { Da~lo } { Dallo } + { Da~l' } { Dall' } + { Da~la } { Dalla } + { In~il } { Nel } + { In~lo } { Nello } + { In~l' } { Nell' } + { In~la } { Nella } + { Su~il } { Sul } + { Su~lo } { Sullo } + { Su~l' } { Sull' } + { Su~la } { Sulla } + { A~i } { Ai } + { A~gli } { Agli } + { A~le } { Alle } + { Di~i } { Dei } + { Di~gli } { Degli } + { Di~le } { Delle } + { Da~i } { Dai } + { Da~gli } { Dagli } + { Da~le } { Dalle } + { In~i } { Nei } + { In~gli } { Negli } + { In~le } { Nelle } + { Su~i } { Sui } + { Su~gli } { Sugli } + { Su~le } { Sulle } } - -\tl_gset:Nn \crefthe_contraction_rule_brazilian_tl +\tl_const:Nn \c_crefthe_contraction_rule_spanish_tl + { + { a~el } { al } + { de~el } { del } + { A~el } { Al } + { De~el } { Del } + } +\tl_const:Nn \c_crefthe_contraction_rule_portuguese_tl { - { a~o } { ao } - { a~a } { à } - { a~os } { aos } - { a~as } { às } - { de~o } { do } - { de~a } { da } - { de~os } { dos } - { de~as } { das } - { em~o } { no } - { em~a } { na } - { em~os } { nos } - { em~as } { nas } - { A~o } { Ao } - { A~a } { À } - { A~os } { Aos } - { A~as } { Às } - { De~o } { Do } - { De~a } { Da } - { De~os } { Dos } - { De~as } { Das } - { Em~o } { No } - { Em~a } { Na } - { Em~os } { Nos } - { Em~as } { Nas } + { a~o } { ao } + { a~a } { à } + { a~os } { aos } + { a~as } { às } + { de~o } { do } + { de~a } { da } + { de~os } { dos } + { de~as } { das } + { em~o } { no } + { em~a } { na } + { em~os } { nos } + { em~as } { nas } + { A~o } { Ao } + { A~a } { À } + { A~os } { Aos } + { A~as } { Às } + { De~o } { Do } + { De~a } { Da } + { De~os } { Dos } + { De~as } { Das } + { Em~o } { No } + { Em~a } { Na } + { Em~os } { Nos } + { Em~as } { Nas } } +\tl_const:Nx \c_crefthe_contraction_rule_brazilian_tl + { \exp_not:V \c_crefthe_contraction_rule_portuguese_tl } \endinput %% -- cgit v1.2.3