%% %% This is file `projlib-language.sty', %% generated with the docstrip utility. %% Copyright (C) 2021-2022 by Jinwen XU %% %% This is part of the ProjLib Toolkit. %% %% This work 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 %% %% and version 1.3c or later is part of all distributions of LaTeX version %% 2005/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[2020-10-01] \RequirePackage{l3keys2e} \ProvidesExplPackage {projlib-language} {2022/03/17} {} {Multi-language configuration} \clist_const:Nn \c__projlib_language_supported_clist { english , french , ngerman , italian , portuguese , brazilian , spanish , schinese , tchinese , japanese , russian , } \clist_new:N \g__projlib_language_babel_option_clist \str_new:N \g__projlib_language_main_str \bool_new:N \g__projlib_language_enabled_all_bool \bool_gset_true:N \g__projlib_language_enabled_all_bool \clist_map_inline:Nn \c__projlib_language_supported_clist { \bool_new:c { g__projlib_language_enabled_ #1 _bool } \bool_gset_false:c { g__projlib_language_enabled_ #1 _bool } } \cs_new:Nn \projlib_language_set_option_no_babel:n { \bool_gset_false:N \g__projlib_language_enabled_all_bool \bool_gset_true:c { g__projlib_language_enabled_ #1 _bool } \str_if_empty:NT \g__projlib_language_main_str { \str_gset:Nn \g__projlib_language_main_str { #1 } } } \cs_new:Nn \projlib_language_set_option:n { \projlib_language_set_option_no_babel:n { #1 } \clist_gput_left:Nn \g__projlib_language_babel_option_clist { #1 } } \keys_define:nn { projlib-language } { , EN .meta:n = { english } , english .code:n = { \projlib_language_set_option:n { english } } , English .meta:n = { english } , FR .meta:n = { french } , french .code:n = { \projlib_language_set_option:n { french } } , French .meta:n = { french } , DE .meta:n = { ngerman } , german .meta:n = { ngerman } , ngerman .code:n = { \projlib_language_set_option:n { ngerman } } , German .meta:n = { ngerman } , IT .meta:n = { italian } , italian .code:n = { \projlib_language_set_option:n { italian } } , Italian .meta:n = { italian } , PT .meta:n = { portuguese } , portuguese .code:n = { \projlib_language_set_option:n { portuguese } } , Portuguese .meta:n = { portuguese } , BR .meta:n = { brazilian } , brazilian .code:n = { \projlib_language_set_option:n { brazilian } } , Brazilian .meta:n = { brazilian } , ES .meta:n = { spanish } , spanish .code:n = { \clist_gput_left:Nn \g__projlib_language_babel_option_clist { es-notilde, es-noquoting } \projlib_language_set_option:n { spanish } } , Spanish .meta:n = { spanish } , CN .meta:n = { schinese } , chinese .meta:n = { schinese } , schinese .code:n = { \projlib_language_set_option_no_babel:n { schinese } } , simplified-chinese .meta:n = { schinese } , simplified~chinese .meta:n = { schinese } , simplified chinese .meta:n = { schinese } , Chinese .meta:n = { schinese } , SChinese .meta:n = { schinese } , Simplified-Chinese .meta:n = { schinese } , Simplified~Chinese .meta:n = { schinese } , Simplified Chinese .meta:n = { schinese } , TC .meta:n = { tchinese } , tchinese .code:n = { \projlib_language_set_option_no_babel:n { tchinese } } , traditional-chinese .meta:n = { tchinese } , traditional~chinese .meta:n = { tchinese } , traditional chinese .meta:n = { tchinese } , TChinese .meta:n = { tchinese } , Traditional-Chinese .meta:n = { tchinese } , Traditional~Chinese .meta:n = { tchinese } , Traditional Chinese .meta:n = { tchinese } , JP .meta:n = { japanese } , japanese .code:n = { \projlib_language_set_option:n { japanese } } , Japanese .meta:n = { japanese } , RU .meta:n = { russian } , russian .code:n = { \projlib_language_set_option:n { russian } } , Russian .meta:n = { russian } , unknown .code:n = {} } \ProcessKeysOptions { projlib-language } \cs_new_protected:Nn \projlib_language_clear_global_option:n { \clist_remove_all:cn { @classoptionslist } { #1 } } \projlib_language_clear_global_option:n { chinese } \projlib_language_clear_global_option:n { Chinese } \clist_gput_right:Nn \g__projlib_language_babel_option_clist { shorthands = off } \str_if_empty:NT \g__projlib_language_main_str { \str_gset:Nn \g__projlib_language_main_str { english } } \bool_if:NT \g__projlib_language_enabled_all_bool { \clist_map_inline:Nn \c__projlib_language_supported_clist { \bool_gset_true:c { g__projlib_language_enabled_ #1 _bool } } } \cs_new:Nn \projlib_language_str_to_languagename:n { \str_case_e:nnF { \str_foldcase:n { #1 } } { { all } { common } { common } { common } { cn } { schinese } { chinese } { schinese } { schinese } { schinese } { simplifiedchinese } { schinese } { simplified-chinese } { schinese } { tc } { tchinese } { tchinese } { tchinese } { traditionalchinese } { tchinese } { traditional-chinese} { tchinese } { jp } { japanese } { japanese } { japanese } { en } { english } { english } { english } { fr } { french } { french } { french } { de } { ngerman } { german } { ngerman } { ngerman } { ngerman } { it } { italian } { italian } { italian } { pt } { portuguese } { portuguese } { portuguese } { br } { brazilian } { brazilian } { brazilian } { es } { spanish } { spanish } { spanish } { ru } { russian } { russian } { russian } } { #1 } } \cs_new:Nn \projlib_language_str_to_languagetype:n { \str_case_e:nn { \str_foldcase:n { #1 } } { { cn } { cjk } { chinese } { cjk } { schinese } { cjk } { simplifiedchinese } { cjk } { simplified-chinese } { cjk } { tc } { cjk } { tchinese } { cjk } { traditionalchinese } { cjk } { traditional-chinese} { cjk } { jp } { cjk } { japanese } { cjk } { en } { latin } { english } { latin } { fr } { latin } { french } { latin } { de } { latin } { german } { latin } { ngerman } { latin } { it } { latin } { italian } { latin } { pt } { latin } { portuguese } { latin } { br } { latin } { brazilian } { latin } { es } { latin } { spanish } { latin } { ru } { latin } { russian } { latin } } } \sys_if_engine_pdftex:T { \RequirePackage [T1] { fontenc } } \bool_if:NTF \g__projlib_language_enabled_all_bool { \sys_if_engine_pdftex:F { \PassOptionsToPackage { japanese, russian } { babel } } \PassOptionsToPackage { italian, portuguese, brazilian, spanish, es-notilde, es-noquoting, ngerman, french, english, shorthands = off } { babel } } { \PassOptionsToPackage { \g__projlib_language_babel_option_clist } { babel } } \PassOptionsToPackage { italian, brazilian, spanish, ngerman, french, english } { cleveref } \RequirePackage { babel } \bool_if:NT \g__projlib_language_enabled_french_bool { \frenchsetup { PartNameFull = false } } \bool_if:NT \g__projlib_language_enabled_portuguese_bool { \NewCommandCopy \__projlib_language_babel_ord: \ord \cs_undefine:N \ord \hook_gput_code:nnn { begindocument } { projlib-language } { \cs_if_exist:NT \ord { \NewCommandCopy \__projlib_language_user_ord: \ord \cs_set_protected:Npn \ord { \mode_if_math:TF { \__projlib_language_user_ord: } { \__projlib_language_babel_ord: } } } } } \babelprovide { schinese } \babelprovide { tchinese } \NewCommandCopy \projlib_language_backup_today:n \today \tl_new:N \g_projlib_language_settings_common_tl \clist_map_inline:Nn \c__projlib_language_supported_clist { \tl_new:c { g_projlib_language_settings_ #1 _tl } } \tl_gput_right:Nn \g_projlib_language_settings_common_tl { \cs_if_exist:NT \ProjLibToday { \RenewCommandCopy \today \ProjLibToday } } \tl_gput_right:Nn \g_projlib_language_settings_schinese_tl { \g_projlib_language_settings_common_tl \tl_gset:Nn \languagename { schinese } \tl_gset:cn { abstractname } { 摘要 } \tl_gset:cn { proofname } { 证明 } \tl_gset:cn { contentsname } { 目录 } \tl_gset:cn { listfigurename } { 插图 } \tl_gset:cn { listtablename } { 表格 } \tl_gset:cn { figurename } { 图 } \tl_gset:cn { tablename } { 表 } \tl_gset:cn { indexname } { 索引 } \tl_gset:cn { appendixname } { 附录 } \tl_gset:cn { refname } { 参考文献 } \tl_gset:cn { bibname } { 参考文献 } } \tl_gput_right:Nn \g_projlib_language_settings_tchinese_tl { \g_projlib_language_settings_common_tl \tl_gset:Nn \languagename { tchinese } \tl_gset:cn { abstractname } { 摘要 } \tl_gset:cn { proofname } { 證明 } \tl_gset:cn { contentsname } { 目錄 } \tl_gset:cn { listfigurename } { 插圖 } \tl_gset:cn { listtablename } { 表格 } \tl_gset:cn { figurename } { 圖 } \tl_gset:cn { tablename } { 表 } \tl_gset:cn { indexname } { 索引 } \tl_gset:cn { appendixname } { 附錄 } \tl_gset:cn { refname } { 參考文獻 } \tl_gset:cn { bibname } { 參考文獻 } } \tl_gput_right:Nn \g_projlib_language_settings_japanese_tl { \selectlanguage { japanese } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_english_tl { \selectlanguage { english } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_french_tl { \selectlanguage { french } \g_projlib_language_settings_common_tl \tl_gset:cn { frenchpartname } { Partie } } \tl_gput_right:Nn \g_projlib_language_settings_ngerman_tl { \selectlanguage { ngerman } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_italian_tl { \selectlanguage { italian } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_portuguese_tl { \selectlanguage { portuguese } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_brazilian_tl { \selectlanguage { brazilian } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_spanish_tl { \selectlanguage { spanish } \g_projlib_language_settings_common_tl } \tl_gput_right:Nn \g_projlib_language_settings_russian_tl { \selectlanguage { russian } \g_projlib_language_settings_common_tl } \NewDocumentCommand \AddLanguageSetting { O{} m } { \tl_if_empty:nTF { #1 } { \tl_gput_right:Nn \g_projlib_language_settings_common_tl { #2 } } { \tl_gput_right:cn { g_projlib_language_settings_ \projlib_language_str_to_languagename:n { #1 } _tl } { #2 } } } \RequirePackage { setspace } \tl_new:N \g_projlib_language_linespacing_latin_tl \tl_new:N \g_projlib_language_linespacing_cjk_tl \tl_gset:Nn \g_projlib_language_linespacing_latin_tl { \setstretch { 1.00 } } \tl_gset:Nn \g_projlib_language_linespacing_cjk_tl { \onehalfspacing } \cs_new:Nn \projlib_language_set_linespacing_latin:n { \tl_gset:Nn \g_projlib_language_linespacing_latin_tl { #1 } } \cs_new:Nn \projlib_language_set_linespacing_cjk:n { \tl_gset:Nn \g_projlib_language_linespacing_cjk_tl { #1 } } \tl_new:N \g_projlib_language_parindent_latin_tl \tl_new:N \g_projlib_language_parindent_cjk_tl \@ifclassloaded { beamer } { \tl_gset:Nn \g_projlib_language_parindent_latin_tl { \dim_set:Nn \parindent { 0em } } \tl_gset:Nn \g_projlib_language_parindent_cjk_tl { \dim_set:Nn \parindent { 0em } } } { \tl_gset:Nn \g_projlib_language_parindent_latin_tl { \dim_set:Nn \parindent { 1.5em } } \tl_gset:Nn \g_projlib_language_parindent_cjk_tl { \dim_set:Nn \parindent { 2em } } } \hook_gput_code:nnn { begindocument } { projlib-language } { \@ifpackageloaded { parskip } { \tl_gset:Nn \g_projlib_language_parindent_latin_tl { \dim_set:Nn \parindent { 0em } } \tl_gset:Nn \g_projlib_language_parindent_cjk_tl { \dim_set:Nn \parindent { 0em } } } {} } \cs_new:Nn \projlib_language_set_parindent_latin:n { \tl_gset:Nn \g_projlib_language_parindent_latin_tl { #1 } } \cs_new:Nn \projlib_language_set_parindent_cjk:n { \tl_gset:Nn \g_projlib_language_parindent_cjk_tl { #1 } } \NewDocumentCommand \ProjLibLanguageSet { m m m } % #1 = the thing to set % #2 = language or type % #3 = the setting { \use:c { projlib_language_set_ #1 _ #2 :n } { #3 } } \cs_new:Nn \projlib_language_use_language_pure:n { \tl_use:c { g_projlib_language_settings_ \projlib_language_str_to_languagename:n { #1 } _tl } } \cs_generate_variant:Nn \projlib_language_use_language_pure:n { e } \cs_new:Nn \projlib_language_use_language:n { \projlib_language_use_language_pure:n { #1 } \tl_use:c { g_projlib_language_linespacing_ \projlib_language_str_to_languagetype:n { #1 } _tl } \tl_use:c { g_projlib_language_parindent_ \projlib_language_str_to_languagetype:n { #1 } _tl } } \cs_generate_variant:Nn \projlib_language_use_language:n { e } \NewDocumentCommand \UseLanguage { m } { \hook_gput_code:nnn { begindocument } { projlib-language } { \projlib_language_use_language:e { #1 } } } \NewDocumentCommand \UseOtherLanguage { m m } { \group_begin: \projlib_language_use_language_pure:e { #1 } #2 \group_end: } \UseLanguage { \g__projlib_language_main_str } \cs_new:Nn \projlib_langauge_define_multilingual_text:Nn { % #1 = command name (with backslash) % #2 = key-value name configuration \keyval_parse:nnn {} { \__projlib_langauge_define_multilingual_text_do:nnn { \cs_to_str:N #1 } } { #2 } \tl_gset:Nn #1 { \tl_use:c { \cs_to_str:N #1 _projlib_language_text_ \languagename } } } \cs_generate_variant:Nn \projlib_langauge_define_multilingual_text:Nn { cn } \cs_new:Nn \__projlib_langauge_define_multilingual_text_do:nnn { % #1 = command name % #2 = language name % #3 = the text \exp_args:Ne \tl_gset:cn { #1 _projlib_language_text_ \projlib_language_str_to_languagename:n { #2 } } { #3 } } \NewDocumentCommand \DefineMultilingualText { m m } % #1 = command name % #2 = key-value name configuration { \projlib_langauge_define_multilingual_text:Nn #1 { #2 } } \endinput %% %% End of file `projlib-language.sty'.