summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/crefthe/crefthe.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/crefthe/crefthe.sty')
-rw-r--r--macros/latex/contrib/crefthe/crefthe.sty156
1 files changed, 156 insertions, 0 deletions
diff --git a/macros/latex/contrib/crefthe/crefthe.sty b/macros/latex/contrib/crefthe/crefthe.sty
new file mode 100644
index 0000000000..366b681f72
--- /dev/null
+++ b/macros/latex/contrib/crefthe/crefthe.sty
@@ -0,0 +1,156 @@
+%%
+%% Copyright (C) 2021 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
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\ProvidesExplPackage
+ {crefthe}
+ {2021/11/05}
+ {}
+ {Cross referencing with proper definite articles}
+\RequirePackage{cleveref}
+
+\tl_gset:Nn \g_crefthe_prepf_tl {}
+\tl_gset:Nn \g_crefthe_prep_tl {}
+
+\NewDocumentCommand{\crefthe}{st-t+O{}m}{
+ \IfBooleanTF{ #2 }{
+ \tl_gset:Nn \g_crefthe_prepf_tl { #4 }
+ }{
+ \IfBooleanTF{ #3 }{
+ \tl_gset:Nn \g_crefthe_prep_tl { #4 }
+ }{
+ \str_case_e:nn { \crefthe_prep_mode:nn } {
+ { - } { \tl_gset:Nn \g_crefthe_prepf_tl { #4 } }
+ { + } { \tl_gset:Nn \g_crefthe_prep_tl { #4 } }
+ }
+ }
+ }
+ \IfBooleanTF{ #1 } { \cref*{#5} } { \cref{#5} }
+ \tl_gset:Nn \g_crefthe_prep_tl {}
+}
+
+\NewDocumentCommand{\crefthemark}{m}{
+ \crefthe_contraction:nn { \tl_use:N \g_crefthe_prep_tl }{
+ \crefthe_contraction:nn { \tl_use:N \g_crefthe_prepf_tl }{#1}
+ }
+ \tl_gset:Nn \g_crefthe_prepf_tl {}
+}
+
+\cs_set:Npn \crefthe_prep_mode:nn {
+ \str_case_e:nn { \languagename }
+ {
+ {french} { + }
+ {italian} { + }
+ {spanish} { - }
+ {portuguese} { + }
+ {brazilian} { + }
+ }
+}
+
+\cs_set:Npn \crefthe_contraction:nn #1#2 {
+ \str_if_eq:eeTF {#1} {} {#2} {
+ \str_case_e:nn { \languagename }
+ {
+ {french}{
+ \str_case_e:nnF {#1~#2} {
+ {à~le} {au}
+ {à~la} {à~la}
+ {à~l'} {à~l'}
+ {à~les} {aux}
+ {de~le} {du}
+ {de~la} {de~la}
+ {de~l'} {de~l'}
+ {de~les} {des}
+ }{#1~#2}
+ }
+ {italian}{
+ \str_case_e:nnF {#1~#2} {
+ {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}
+ }{#1~#2}
+ }
+ {portuguese}{
+ \str_case_e:nnF {#1~#2} {
+ {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}
+ }{#1~#2}
+ }
+ {brazilian}{
+ \str_case_e:nnF {#1~#2} {
+ {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}
+ }{#1~#2}
+ }
+ {spanish}{
+ \str_case_e:nnF {#1~#2} {
+ {a~el} {al}
+ {de~el} {del}
+ }{#1~#2}
+ }
+ }
+ }
+}
+\endinput
+%%
+%% End of file `crefthe.sty'.