From 59ff8f4e94052fa74de0630c02c6f72099e9f60b Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 12 Mar 2022 20:34:57 +0000 Subject: projlib (12mar22) (branch) git-svn-id: svn://tug.org/texlive/branches/branch2021.final@62662 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/projlib/README.md | 6 +- Master/texmf-dist/source/latex/projlib/ProjLib.dtx | 4569 ++++++++++++++++++++ Master/texmf-dist/source/latex/projlib/ProjLib.ins | 74 + Master/texmf-dist/tex/latex/projlib/ProjLib.sty | 61 +- .../tex/latex/projlib/projlib-author.sty | 30 +- .../tex/latex/projlib/projlib-datetime.sty | 76 +- .../texmf-dist/tex/latex/projlib/projlib-draft.sty | 19 +- .../texmf-dist/tex/latex/projlib/projlib-font.sty | 105 +- .../tex/latex/projlib/projlib-language.sty | 27 +- .../texmf-dist/tex/latex/projlib/projlib-logo.sty | 34 +- .../texmf-dist/tex/latex/projlib/projlib-math.sty | 60 +- .../texmf-dist/tex/latex/projlib/projlib-paper.sty | 19 +- .../tex/latex/projlib/projlib-theorem.sty | 134 +- 13 files changed, 5043 insertions(+), 171 deletions(-) create mode 100644 Master/texmf-dist/source/latex/projlib/ProjLib.dtx create mode 100644 Master/texmf-dist/source/latex/projlib/ProjLib.ins diff --git a/Master/texmf-dist/doc/latex/projlib/README.md b/Master/texmf-dist/doc/latex/projlib/README.md index 3b5a6fbcf87..b36f8f2437d 100644 --- a/Master/texmf-dist/doc/latex/projlib/README.md +++ b/Master/texmf-dist/doc/latex/projlib/README.md @@ -2,9 +2,9 @@ # ProjLib Toolkit -The bundle is dated 2022/03/09 +The bundle is dated 2022/03/11. -Old modules are still dated 2021/12/16 and will *not* be modified. When all the new modules are finished, old files shall be removed from this bundle. +Old modules are still dated 2021/12/16 and will *not* be modified. **When all the new modules and the corresponding documentations are finished, old files shall be removed from this bundle.** ## **Important note** @@ -25,7 +25,7 @@ The new modules are: When all these modules are finished, the documentation will be updated accordingly. -Below are the old README. +Below is the content of the old README. --- diff --git a/Master/texmf-dist/source/latex/projlib/ProjLib.dtx b/Master/texmf-dist/source/latex/projlib/ProjLib.dtx new file mode 100644 index 00000000000..39ba3ccd037 --- /dev/null +++ b/Master/texmf-dist/source/latex/projlib/ProjLib.dtx @@ -0,0 +1,4569 @@ +% \iffalse meta-comment +% +% 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 or (at your option) +% any later version. The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% \fi +% +%<*driver> +\ProvidesFile{ProjLib.dtx} +% +\NeedsTeXFormat{LaTeX2e}[2020-10-01] +\RequirePackage{l3keys2e} +% +%<*ProjLib> +\ProvidesExplPackage + {ProjLib} + {2022/03/11} {} + {Collective interface of the ProjLib toolkit} +% +% +%<*projlib-author> +\ProvidesExplPackage + {projlib-author} + {2022/03/11} {} + {Enhanced author information block} +% +% +%<*projlib-datetime> +\ProvidesExplPackage + {projlib-datetime} + {2022/03/11} {} + {Convert numeric date-time string to natural language} +% +% +%<*projlib-draft> +\ProvidesExplPackage + {projlib-draft} + {2022/03/11} {} + {Useful commands during draft stage} +% +% +%<*projlib-font> +\ProvidesExplPackage + {projlib-font} + {2022/03/11} {} + {Font selection and configuration} +% +% +%<*projlib-language> +\ProvidesExplPackage + {projlib-language} + {2022/03/11} {} + {Multi-language configuration} +% +% +%<*projlib-logo> +\ProvidesExplPackage + {projlib-logo} + {2022/03/11} {} + {The ProjLib logo} +% +% +%<*projlib-math> +\ProvidesExplPackage + {projlib-math} + {2022/03/11} {} + {Efficient math setup} +% +% +%<*projlib-paper> +\ProvidesExplPackage + {projlib-paper} + {2022/03/11} {} + {Configuration of the paper style} +% +% +%<*projlib-theorem> +\ProvidesExplPackage + {projlib-theorem} + {2022/03/11} {} + {Configuration of theorem-like environments} +% + +%<*ProjLib> +\keys_define:nn { ProjLib } + { + , author .bool_set:N = \l__projlib_main_author_bool + , author .initial:n = { false } + , author-block .bool_set:N = \l__projlib_main_author_bool + , author~block .bool_set:N = \l__projlib_main_author_bool + , author block .bool_set:N = \l__projlib_main_author_bool + , ams-fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , ams-fashion .initial:n = { false } + , ams~fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , ams fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , unknown .code:n = { + \PassOptionsToPackage { \CurrentOption } { projlib-language } + \PassOptionsToPackage { \CurrentOption } { projlib-author } + \PassOptionsToPackage { \CurrentOption } { projlib-datetime } + \PassOptionsToPackage { \CurrentOption } { projlib-draft } + \PassOptionsToPackage { \CurrentOption } { projlib-font } + \PassOptionsToPackage { \CurrentOption } { projlib-logo } + \PassOptionsToPackage { \CurrentOption } { projlib-math } + \PassOptionsToPackage { \CurrentOption } { projlib-paper } + \PassOptionsToPackage { \CurrentOption } { projlib-theorem } + } + } +\ProcessKeysOptions { ProjLib } + +\bool_if:NT \l__projlib_main_amsfashion_bool + { + \bool_set_true:N \l__projlib_main_author_bool + \PassOptionsToPackage { amsfashion } { projlib-author } + } + +\RequirePackage { projlib-language } + +\bool_if:NT \l__projlib_main_author_bool + { + \RequirePackage { projlib-author } + } +\RequirePackage { projlib-datetime } +\RequirePackage { projlib-draft } +\RequirePackage { projlib-font } +\RequirePackage { projlib-logo } +\RequirePackage { projlib-math } +\RequirePackage { projlib-paper } + +\RequirePackage { projlib-theorem } +% +% +%<*projlib-author> +\keys_define:nn { projlib-author } + { + , ams-fashion .bool_set:N = \l__projlib_author_amsfashion_bool + , ams-fashion .initial:n = { false } + , ams~fashion .bool_set:N = \l__projlib_author_amsfashion_bool + , ams fashion .bool_set:N = \l__projlib_author_amsfashion_bool + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-author } + +\cs_if_exist:NT \subjclass { \endinput } + +\tl_new:N \g__projlib_author_font_author_tl +\tl_new:N \g__projlib_author_font_address_tl +\tl_new:N \g__projlib_author_font_curraddr_tl +\tl_new:N \g__projlib_author_font_email_tl + +\tl_gset:Nn \g__projlib_author_font_author_tl { \normalsize \normalfont \scshape } +\tl_gset:Nn \g__projlib_author_font_address_tl { \small \normalfont \itshape } +\tl_gset:Nn \g__projlib_author_font_curraddr_tl { \small \normalfont \itshape } +\tl_gset:Nn \g__projlib_author_font_email_tl { \small \normalfont \ttfamily } + +\dim_new:N \g__projlib_author_length_innersep_dim +\dim_new:N \g__projlib_author_length_sep_dim +\dim_new:N \g__projlib_author_length_aftersep_dim + +\dim_set:Nn \g__projlib_author_length_innersep_dim { 0.3 \baselineskip } +\dim_set:Nn \g__projlib_author_length_sep_dim { 0.5 \baselineskip } +\dim_set:Nn \g__projlib_author_length_aftersep_dim { 0.3 \baselineskip } + + +\bool_new:N \g__projlib_author_affil_already_exist_bool + +\NewCommandCopy \projlib_author_backup_author:w \author +\RenewDocumentCommand \author { m } + { + \hook_gput_code:nnn { cmd/@author/after } { projlib-author } + { + \phantom {A} \\[-\baselineskip] + \skip_vertical:n { \g__projlib_author_length_sep_dim } + { \g__projlib_author_font_author_tl #1 } + \bool_set_false:N \g__projlib_author_affil_already_exist_bool + \\ \phantom {} + } + } + +\ProvideDocumentCommand \address { m } + { + \hook_gput_code:nnn { cmd/@author/after } { projlib-author } + { + \phantom {A} \\[-\baselineskip] + \bool_if:NF \g__projlib_author_affil_already_exist_bool + { + \skip_vertical:n { \g__projlib_author_length_innersep_dim } + } + \bool_set_true:N \g__projlib_author_affil_already_exist_bool + { \g__projlib_author_font_address_tl #1 } + \\ \phantom {} + } + } + +\ProvideDocumentCommand \curraddr { m } + { + \hook_gput_code:nnn { cmd/@author/after } { projlib-author } + { + \phantom {A} \\[-\baselineskip] + \bool_if:NF \g__projlib_author_affil_already_exist_bool + { + \skip_vertical:n { \g__projlib_author_length_innersep_dim } + } + \bool_set_true:N \g__projlib_author_affil_already_exist_bool + { \g__projlib_author_font_curraddr_tl #1 } + \\ \phantom {} + } + } + +\ProvideDocumentCommand \email { m } + { + \hook_gput_code:nnn { cmd/@author/after } { projlib-author } + { + \phantom {A} \\[-\baselineskip] + \bool_if:NF \g__projlib_author_affil_already_exist_bool + { + \skip_vertical:n { \g__projlib_author_length_innersep_dim } + } + \bool_set_true:N \g__projlib_author_affil_already_exist_bool + { \g__projlib_author_font_email_tl #1 } + \\ \phantom {} + } + } + +\RequirePackage { regexpatch } + +\xpatchcmd { \@maketitle } { \begin{tabular}[t]{c} } {} { + \xpatchcmd { \@maketitle } { \end{tabular} } {} {} {} +} {} + +\tl_set:cn {@author} {} + +\hook_gput_code:nnn { cmd/@maketitle/before } { projlib-author } + { + \hook_gput_code:nnn { cmd/@author/before } { projlib-author } + { + \skip_vertical:n { - \g__projlib_author_length_sep_dim } + } + \hook_gput_code:nnn { cmd/@author/after } { projlib-author } + { + \skip_vertical:n { - \baselineskip } + \bool_if:NT \g__projlib_author_affil_already_exist_bool + { + \skip_vertical:n { \g__projlib_author_length_aftersep_dim } + } + } + } + +\bool_if:NT \l__projlib_author_amsfashion_bool + { + \RequirePackage{ projlib-language } + + \tl_new:N \g_projlib_author_keywordsname_style_tl + \tl_gset:Nn \g_projlib_author_keywordsname_style_tl {} + + \projlib_langauge_define_multilingual_text:Nn \keywordsname + { + EN = \textsc{Key~words~and~phrases} , + FR = \textsc{Mots~et~phrases~clés} , + DE = \textsc{Schlüsselwörter~und~Phrasen} , + IT = \textsc{Parole~e~frasi~chiave} , + PT = \textsc{Palavras~e~frases~chave} , + BR = \textsc{Palavras~e~frases~chave} , + ES = \textsc{Palabras~y~frases~clave} , + CN = 关键词 , + TC = 關鍵詞 , + JP = キーワード , + RU = Ключевые~слова~и~фразы , + } + + \tl_new:N \g__projlib_author_keywords_tl + \NewDocumentCommand \keywords { m } + { + \tl_gset:Nn \g__projlib_author_keywords_tl { #1 } + } + + \tl_new:N \g__projlib_author_dedicatory_tl + \NewDocumentCommand \dedicatory { m } + { + \tl_gset:Nn \g__projlib_author_dedicatory_tl { #1 } + } + + \hook_gput_code:nnn { begindocument/before } { projlib-author } + { + \NewCommandCopy \projlib_author_backup_footnotemark: \footnotemark + \tl_gset:Nn \footnotemark {} + + \NewCommandCopy \projlib_author_backup_thanks:w \thanks + \cs_undefine:N \thanks + + % measure the width of "*" + \hbox_set:Nn \l_tmpa_box { * } + \dim_const:Nn \c__projlib_author_length_width_of_asterisk_dim { \box_wd:N \l_tmpa_box } + + \cs_new_nopar:Nn \projlib_author_pre_thanks:n + { + \projlib_author_backup_thanks:w + { + \skip_horizontal:n { - \c__projlib_author_length_width_of_asterisk_dim } + #1 + } + } + + \NewDocumentCommand \thanks { m } + { + \tl_if_blank:nF { #1 } + { + \hook_gput_code:nnn { cmd/@title/after } { projlib-author } + { + \projlib_author_pre_thanks:n { #1 } + } + } + } + + \NewCommandCopy \projlib_author_backup_my_author:w \author + \RenewDocumentCommand \author { m } + { + \projlib_author_backup_my_author:w + { + \RenewCommandCopy \footnotemark \projlib_author_backup_footnotemark: + \RenewCommandCopy \thanks \projlib_author_backup_thanks:w + #1 + \cs_undefine:N \footnotemark + } + } + } + + \NewCommandCopy \projlib_author_backup_abstract: \abstract + \NewCommandCopy \projlib_author_backup_endabstract: \endabstract + \cs_undefine:N \abstract + \cs_undefine:N \endabstract + + \bool_new:N \g__projlib_author_already_maketitle_bool + \bool_gset_false:N \g__projlib_author_already_maketitle_bool + \bool_new:N \g__projlib_author_abstract_before_maketitle_bool + \bool_gset_false:N \g__projlib_author_abstract_before_maketitle_bool + + \msg_redirect_name:nnn { scontents } { unsupported-verbatim } { info } + \RequirePackage{ scontents } + \newenvsc{abstract}[store-env=projlib-author-abstract,print-env=false] + + \hook_gput_code:nnn { env/abstract/after } { projlib-author } + { + \bool_if:NTF \g__projlib_author_already_maketitle_bool + { + \projlib_author_backup_abstract: + \getstored{projlib-author-abstract} + \projlib_author_backup_endabstract: + } + { + \bool_gset_true:N \g__projlib_author_abstract_before_maketitle_bool + } + } + + \hook_gput_code:nnn { begindocument/before } { projlib-author } + { + \makeatletter + \xpatchcmd { \@maketitle } { \@date } + { + \tl_if_blank:eTF { \@date } { \skip_vertical:n { -2 \baselineskip } } { \@date } + \tl_if_blank:eF { \g__projlib_author_dedicatory_tl } + { + \tl_if_blank:eT { \@date } { \skip_vertical:n { 2 \baselineskip } } + \par + \skip_vertical:n { -\parskip } + \skip_vertical:n { \baselineskip } + \textit{ \g__projlib_author_dedicatory_tl } + \tl_if_blank:eT { \@date } + { + \skip_vertical:n { -\parskip } + \skip_vertical:n { \dim_eval:n { -1.7 \baselineskip } } + } + } + } {} {} + \makeatother + + \hook_gput_code:nnn { cmd/maketitle/before } { projlib-author } + { + \tl_if_blank:eF { \g__projlib_author_keywords_tl } + { + \projlib_author_pre_thanks:n + { + \group_begin: + \g_projlib_author_keywordsname_style_tl + \keywordsname . + \group_end: + \c_space_tl + \g__projlib_author_keywords_tl + } + } + } + + \hook_gput_code:nnn { cmd/maketitle/after } { projlib-author } + { + \bool_if:NT \g__projlib_author_abstract_before_maketitle_bool + { + \projlib_author_backup_abstract: + \getstored{projlib-author-abstract} + \projlib_author_backup_endabstract: + } + \cs_undefine:N \address + \cs_undefine:N \curraddr + \cs_undefine:N \email + \cs_undefine:N \dedicatory + \cs_undefine:N \keywords + \bool_gset_true:N \g__projlib_author_already_maketitle_bool + } + } + + \tl_new:N \l_projlib_author_subjclassname_tl + \tl_new:N \l_projlib_author_subjclass_tl + \msg_new:nnn { projlib-author } + { unknown-msc-edition } + { Unknown~edition~(#1)~of~Mathematics~Subject~Classification;~using~'2020' } + \NewDocumentCommand \subjclass { O{2020} m } + { + \tl_set:Nn \l_projlib_author_subjclass_tl { #2 } + \tl_if_exist:cTF { subjclassname_#1 } + { + \tl_set:Nn \l_projlib_author_subjclassname_tl { \tl_use:c { subjclassname_#1 } } + } + { + \msg_warning:nnn { projlib-author } { unknown-msc-edition } { #1 } + \tl_set:Nn \l_projlib_author_subjclassname_tl { \tl_use:c { subjclassname_2020 } } + } + \projlib_author_pre_thanks:n + { + \textit{ \l_projlib_author_subjclassname_tl . } + \enspace + \l_projlib_author_subjclass_tl . + } + } + \tl_const:cn { subjclassname_1991 } { \textup{1991}~Mathematics~Subject~Classification } + \tl_const:cn { subjclassname_2000 } { \textup{2000}~Mathematics~Subject~Classification } + \tl_const:cn { subjclassname_2010 } { \textup{2010}~Mathematics~Subject~Classification } + \tl_const:cn { subjclassname_2020 } { \textup{2020}~Mathematics~Subject~Classification } + } +% +% +%<*projlib-datetime> +\tl_new:N \g__projlib_datetime_input_format_tl +\tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } + +\keys_define:nn { projlib-datetime } + { + , plain .bool_set:N = \l__projlib_datetime_plain_bool + , plain .initial:n = { false } + , year-month-day .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-day-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { month-day-year } } + , day-month-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , year-month .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-day .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-year .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , day-month .code:n = { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-datetime } + +\bool_if:NT \l__projlib_datetime_plain_bool + { + \hook_gput_code:nnn { begindocument/before } { projlib-datetime } + { + \cs_set:Nn \projlib_datetime_text_superscript:n { #1 } + } + } + +\tl_new:N \l__projlib_datetime_output_format_tl +\keys_define:nn { projlib-datetime-command } + { + , year-month-day .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-day-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { month-day-year } } + , day-month-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , year-month .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-day .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + , month-year .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , day-month .code:n = { \tl_set:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + , only-year-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year-month } } + , only-month-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month-day } } + , only-year .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-year } } + , only-month .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-month } } + , only-day .code:n = { \tl_set:Nn \l__projlib_datetime_output_format_tl { only-day } } + , unknown .code:n = {} + } + +\msg_new:nnnn { projlib-datetime } + { non-supported-date-format } + { The~date~format~"#1"~is~not~supported. } + { The~only~formats~available~are~"year-month-day",~ "month-day-year"~and~"day-month-year". } + +\cs_new:Nn \projlib_datetime_set_input_format:n + { + \str_case:nnF { #1 } + { + { year-month-day } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { year-month-day } } + { month-day-year } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { month-day-year } } + { day-month-year } { \tl_gset:Nn \g__projlib_datetime_input_format_tl { day-month-year } } + } + { + \msg_error:nnn { projlib-datetime } { non-supported-date-format } { #1 } + } + } + +\NewDocumentCommand \ProjLibSetDatetimeInputFormat { m } + { + \projlib_datetime_set_input_format:n { #1 } + } + + +\seq_new:N \l__projlib_datetime_date_seq + +\cs_new_protected:Nn \projlib_datetime_text_superscript:n + { + \group_begin: + \small + \textsuperscript { #1 } + \group_end: + } + + +\cs_new:Nn \__projlib_datetime_today:n + { + \str_case_e:nnF { \l__projlib_datetime_output_format_tl } + { + { only-year-month } + { + \cs_if_exist_use:c { projlib_datetime_display_year_month #1 _ \languagename :nn } + { \int_use:N \c_sys_year_int } + { \int_use:N \c_sys_month_int } + } + { only-month-day } + { + \cs_if_exist_use:c { projlib_datetime_display_month_day #1 _ \languagename :nn } + { \int_use:N \c_sys_month_int } + { \int_use:N \c_sys_day_int } + } + { only-year } + { + \cs_if_exist_use:cT { projlib_datetime_display_year #1 _ \languagename :n } + { + { \int_use:N \c_sys_year_int } + } + } + { only-month } + { + \cs_if_exist_use:cT { projlib_datetime_display_month #1 _ \languagename :n } + { + { \int_use:N \c_sys_month_int } + } + } + { only-day } + { + \cs_if_exist_use:cT { projlib_datetime_display_day #1 _ \languagename :n } + { + { \int_use:N \c_sys_day_int } + } + } + } + { + \cs_if_exist_use:c { projlib_datetime_display_year_month_day #1 _ \languagename :nnn } + { \int_use:N \c_sys_year_int } + { \int_use:N \c_sys_month_int } + { \int_use:N \c_sys_day_int } + } + } + +\NewDocumentCommand \ProjLibtoday { O{} } + { + \group_begin: + \keys_set:nn { projlib-datetime-command } { #1 } + \__projlib_datetime_today:n {} + \group_end: + } + +\NewDocumentCommand \ProjLibToday { O{} } + { + \group_begin: + \keys_set:nn { projlib-datetime-command } { #1 } + \__projlib_datetime_today:n { _uppercase } + \group_end: + } + + +\cs_new_protected:Nn \projlib_datetime_display_year_month_day:n + { + \__projlib_datetime_display_year_month_day:en { #1 } {} + } + +\cs_new_protected:Nn \projlib_datetime_display_year_month_day_uppercase:n + { + \__projlib_datetime_display_year_month_day:en { #1 } { _uppercase } + } + +\cs_new_protected:Nn \__projlib_datetime_display_year_month_day:nn + { + \regex_match:nnTF { \A \d{4}-\d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_year_month_day #2 _ \languagename :nnn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % day + } + { + \regex_match:nnTF { \A \d{4}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month + } + { + \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day + } + { + #1 + } + } + } + } +\cs_generate_variant:Nn \__projlib_datetime_display_year_month_day:nn { en } + + +\cs_new_protected:Nn \projlib_datetime_display_month_day_year:n +{ + \__projlib_datetime_display_month_day_year:en { #1 } {} +} + +\cs_new_protected:Nn \projlib_datetime_display_month_day_year_uppercase:n +{ + \__projlib_datetime_display_month_day_year:en { #1 } { _uppercase } +} + +\cs_new_protected:Nn \__projlib_datetime_display_month_day_year:nn +{ + \regex_match:nnTF { \A \d{1,2}-\d{1,2}-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_month_day_year #2 _ \languagename :nnn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day + } + { + \regex_match:nnTF { \A \d{1,2}-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month + } + { + \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % day + } + { + #1 + } + } + } +} +\cs_generate_variant:Nn \__projlib_datetime_display_month_day_year:nn { en } + + +\cs_new_protected:Nn \projlib_datetime_display_day_month_year:n +{ + \__projlib_datetime_display_day_month_year:en { #1 } {} +} + +\cs_new_protected:Nn \projlib_datetime_display_day_month_year_uppercase:n +{ + \__projlib_datetime_display_day_month_year:en { #1 } { _uppercase } +} + +\cs_new_protected:Nn \__projlib_datetime_display_day_month_year:nn +{ + \regex_match:nnTF { \A \d{1,2}-\d{1,2}-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_day_month_year #2 _ \languagename :nnn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % day + } + { + \regex_match:nnTF { \A \d{1,2}-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % year + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % month + } + { + \regex_match:nnTF { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } % month + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } % day + } + { + #1 + } + } + } +} +\cs_generate_variant:Nn \__projlib_datetime_display_day_month_year:nn { en } + + +\cs_new_protected:Nn \__projlib_datetime_date_parse_year_month_day:n + { + \regex_match:nnTF { \A \d{4}-\d{1,2}(|-\d{1,2}) \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + } + { + \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \seq_put_left:Nn \l__projlib_datetime_date_seq {} + } + } + } + +\cs_new_protected:Nn \__projlib_datetime_date_parse_month_day_year:n + { + \regex_match:nnTF { \A \d{1,2}(|-\d{1,2})-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \seq_pop_right:NN \l__projlib_datetime_date_seq \l_tmpa_tl + \seq_put_left:NV \l__projlib_datetime_date_seq \l_tmpa_tl + } + { + \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \seq_put_left:Nn \l__projlib_datetime_date_seq {} + } + } + } + +\cs_new_protected:Nn \__projlib_datetime_date_parse_day_month_year:n + { + \regex_match:nnTF { \A \d{1,2}(|-\d{1,2})-\d{4} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \seq_reverse:N \l__projlib_datetime_date_seq + } + { + \regex_match:nnT { \A \d{1,2}-\d{1,2} \Z } { #1 } + { + \seq_set_split:Nnn \l__projlib_datetime_date_seq { - } { #1 } + \seq_reverse:N \l__projlib_datetime_date_seq + \seq_put_left:Nn \l__projlib_datetime_date_seq {} + } + } + } + +\cs_new:Nn \__projlib_datetime_input_format_to_str: + { + \str_case_e:nn { \g__projlib_datetime_input_format_tl } + { + { year-month-day } { year_month_day } + { month-day-year } { month_day_year } + { day-month-year } { day_month_year } + } + } + +\cs_new_protected:Nn \__projlib_datetime_display_date_according_to_format:nn + { + \cs_if_exist_use:c { __projlib_datetime_date_parse_ \__projlib_datetime_input_format_to_str: :n } { #1 } + \str_case_e:nnF { \l__projlib_datetime_output_format_tl } + { + { only-year-month } + { + \cs_if_exist_use:c { projlib_datetime_display_year_month #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } + } + { only-month-day } + { + \cs_if_exist_use:c { projlib_datetime_display_month_day #2 _ \languagename :nn } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } + } + { only-year } + { + \cs_if_exist_use:c { projlib_datetime_display_year #2 _ \languagename :n } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } + } + { only-month } + { + \cs_if_exist_use:c { projlib_datetime_display_month #2 _ \languagename :n } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } + } + { only-day } + { + \cs_if_exist_use:c { projlib_datetime_display_day #2 _ \languagename :n } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } + } + } + { + \cs_if_exist_use:c { projlib_datetime_display_ \__projlib_datetime_input_format_to_str: #2 :n } { #1 } + } + } + +\NewDocumentCommand \ProjLibdate { O{} m O{} } + { + \group_begin: + \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } + \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } + \tl_set:Nx \l_tmpa_tl { #2 } + \regex_replace_all:nnN { \D } { - } \l_tmpa_tl + \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } {} + \group_end: + } + + \NewDocumentCommand \ProjLibDate { O{} m O{} } + { + \group_begin: + \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } + \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } + \tl_set:Nx \l_tmpa_tl { #2 } + \regex_replace_all:nnN { \D } { - } \l_tmpa_tl + \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } { _uppercase } + \group_end: + } + +\ProvideDocumentCommand \Thedate {} { \ProjLibdate } +\ProvideDocumentCommand \TheDate {} { \ProjLibDate } + + +\int_new:N \l__projlib_datetime_day_of_week_day_int +\int_new:N \l__projlib_datetime_day_of_week_month_int +\int_new:N \l__projlib_datetime_day_of_week_year_int +\int_new:N \l__projlib_datetime_day_of_week_century_int +\int_new:N \l__projlib_datetime_day_of_week_result_int +\cs_new:Nn \__projlib_datetime_calculate_day_of_week_with_year_month_day:nnn + { + \int_set:Nn \l__projlib_datetime_day_of_week_day_int { #3 } + \int_compare:nNnTF { #2 } < { 3 } + { + \int_set:Nn \l__projlib_datetime_day_of_week_year_int { \int_eval:n { #1 - 1 } } + } + { + \int_set:Nn \l__projlib_datetime_day_of_week_year_int { #1 } + } + \int_set:Nn \l__projlib_datetime_day_of_week_century_int { \int_eval:n { \l__projlib_datetime_day_of_week_year_int / 100 } } + \int_set:Nn \l__projlib_datetime_day_of_week_year_int { \int_mod:nn { \l__projlib_datetime_day_of_week_year_int } { 100 } } + \int_set:Nn \l__projlib_datetime_day_of_week_month_int + { + \int_case:nnF { #2 } + { + { 1 } { 0 } + { 2 } { 3 } + { 3 } { 2 } + { 4 } { 5 } + { 5 } { 0 } + { 6 } { 3 } + { 7 } { 5 } + { 8 } { 1 } + { 9 } { 4 } + { 10 } { 6 } + { 11 } { 2 } + { 12 } { 4 } + } { 0 } + } + \int_set:Nn \l__projlib_datetime_day_of_week_result_int + { + \int_eval:n + { + \l__projlib_datetime_day_of_week_day_int + + \l__projlib_datetime_day_of_week_month_int + +\l__projlib_datetime_day_of_week_year_int + + \int_div_truncate:nn { \l__projlib_datetime_day_of_week_year_int } { 4 } + + \int_div_truncate:nn { \l__projlib_datetime_day_of_week_century_int } { 4 } + - 2 * \l__projlib_datetime_day_of_week_century_int + } + } + \int_set:Nn \l__projlib_datetime_day_of_week_result_int + { + \int_mod:nn { \l__projlib_datetime_day_of_week_result_int } { 7 } + } + \int_compare:nNnT { \l__projlib_datetime_day_of_week_result_int } < { 1 } + { + \int_set:Nn \l__projlib_datetime_day_of_week_result_int + { + \int_eval:n { \l__projlib_datetime_day_of_week_result_int + 7 } + } + } + } + + +\cs_new_protected:Nn \projlib_datetime_display_week:n + { + \__projlib_datetime_display_week_according_to_format:en { #1 } {} + } + +\cs_new_protected:Nn \projlib_datetime_display_week_uppercase:n + { + \__projlib_datetime_display_week_according_to_format:en { #1 } { _uppercase } + } + +\cs_new_protected:Nn \__projlib_datetime_display_week_according_to_format:nn + { + \projlib_datetime_calculate_week_according_to_format:n { #1 } + \cs_if_exist_use:c { projlib_datetime_display_week #2 _ \languagename :n } { \l__projlib_datetime_day_of_week_result_int } + } +\cs_generate_variant:Nn \__projlib_datetime_display_week_according_to_format:nn { en } + + +\cs_new_protected:Nn \projlib_datetime_calculate_week_according_to_format:n + { + \cs_if_exist_use:c { __projlib_datetime_date_parse_ \__projlib_datetime_input_format_to_str: :n } { #1 } + \__projlib_datetime_calculate_day_of_week_with_year_month_day:nnn + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 1 } } } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 2 } } } + { \int_eval:n { \seq_item:Nn \l__projlib_datetime_date_seq { 3 } } } + } + + +% For each language, there are 7 groups of functions: +% 1) \projlib_datetime_display_year_month_day_:nnn +% \projlib_datetime_display_year_month_day_uppercase_:nnn +% 2) \projlib_datetime_display_year_month_:nn +% \projlib_datetime_display_year_month_uppercase_:nn +% 3) \projlib_datetime_display_month_day_:nn +% \projlib_datetime_display_month_day_uppercase_:nn +% 4) \projlib_datetime_display_year_:n +% \projlib_datetime_display_year_uppercase_:n +% 5) \projlib_datetime_display_month_:n +% \projlib_datetime_display_month_uppercase_:n +% 6) \projlib_datetime_display_day_:n +% \projlib_datetime_display_day_uppercase_:n +% 7) \projlib_datetime_display_week_:n +% \projlib_datetime_display_week_uppercase_:n + +\cs_new:Nn \projlib_datetime_display_year_month_day_english:nnn + { + \projlib_datetime_display_month_day_english:nn { #2 } { #3 } + ,\nobreakspace + \projlib_datetime_display_year_english:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_english:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_english:nnn + { + \projlib_datetime_display_month_day_uppercase_english:nn { #2 } { #3 } + ,\nobreakspace + \projlib_datetime_display_year_english:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_english:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_english:nn + { + \projlib_datetime_display_month_english:n { #2 } + \nobreakspace + \projlib_datetime_display_year_english:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_english:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_english:nn + { + \projlib_datetime_display_month_uppercase_english:n { #2 } + \nobreakspace + \projlib_datetime_display_year_english:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_english:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_english:nn + { + \projlib_datetime_display_month_english:n { #1 } + \nobreakspace + \projlib_datetime_display_day_english:n { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_english:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_english:nn + { + \projlib_datetime_display_month_uppercase_english:n { #1 } + \nobreakspace + \projlib_datetime_display_day_english:n { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_english:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_english:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_english:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_english:n + { + \int_case:nnF { #1 } + { + { 1 } { January } + { 2 } { February } + { 3 } { March } + { 4 } { April } + { 5 } { May } + { 6 } { June } + { 7 } { July } + { 8 } { August } + { 9 } { September } + { 10 } { October } + { 11 } { November } + { 12 } { December } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_english:n + { + \projlib_datetime_display_month_english:n { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_english:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_english:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_english:n + { + \int_case:nnF { #1 } + { + { 1 } { Monday } + { 2 } { Tuesday } + { 3 } { Wednesday } + { 4 } { Thursday } + { 5 } { Friday } + { 6 } { Saturday } + { 7 } { Sunday } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_english:n + { + \projlib_datetime_display_week_english:n { #1 } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_french:nnn + { + \projlib_datetime_display_month_day_french:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_french:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_french:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_french:nnn + { + \projlib_datetime_display_month_day_uppercase_french:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_french:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_french:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_french:nn + { + \projlib_datetime_display_month_french:n { #2 } + \nobreakspace + \projlib_datetime_display_year_french:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_french:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_french:nn + { + \projlib_datetime_display_month_uppercase_french:n { #2 } + \nobreakspace + \projlib_datetime_display_year_french:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_french:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_french:nn + { + \projlib_datetime_display_day_french:n { #2 } + \nobreakspace + \projlib_datetime_display_month_french:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_french:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_french:nn + { + \projlib_datetime_display_month_day_french:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_french:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_french:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_french:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_french:n + { + \int_case:nnF { #1 } + { + { 1 } { janvier } + { 2 } { février } + { 3 } { mars } + { 4 } { avril } + { 5 } { mai } + { 6 } { juin } + { 7 } { juillet } + { 8 } { août } + { 9 } { septembre } + { 10 } { octobre } + { 11 } { novembre } + { 12 } { décembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_french:n + { + \int_case:nnF { #1 } + { + { 1 } { Janvier } + { 2 } { Février } + { 3 } { Mars } + { 4 } { Avril } + { 5 } { Mai } + { 6 } { Juin } + { 7 } { Juillet } + { 8 } { Août } + { 9 } { Septembre } + { 10 } { Octobre } + { 11 } { Novembre } + { 12 } { Décembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_french:n + { + \int_case:nnF { #1 } + { + { 1 } { 1 \projlib_datetime_text_superscript:n { er } } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_uppercase_french:n + { + \int_case:nnF { #1 } + { + { 1 } { 1 \projlib_datetime_text_superscript:n { er } } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_week_french:n + { + \int_case:nnF { #1 } + { + { 1 } { lundi } + { 2 } { mardi } + { 3 } { mercredi } + { 4 } { jeudi } + { 5 } { vendredi } + { 6 } { samedi } + { 7 } { dimanche } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_french:n + { + \int_case:nnF { #1 } + { + { 1 } { Lundi } + { 2 } { Mardi } + { 3 } { Mercredi } + { 4 } { Jeudi } + { 5 } { Vendredi } + { 6 } { Samedi } + { 7 } { Dimanche } + } { ??? } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_ngerman:nnn + { + \projlib_datetime_display_month_day_ngerman:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_ngerman:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_ngerman:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_ngerman:nnn + { + \projlib_datetime_display_month_day_uppercase_ngerman:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_ngerman:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_ngerman:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_ngerman:nn + { + \projlib_datetime_display_month_ngerman:n { #2 } + \nobreakspace + \projlib_datetime_display_year_ngerman:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_ngerman:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_ngerman:nn + { + \projlib_datetime_display_month_uppercase_ngerman:n { #2 } + \nobreakspace + \projlib_datetime_display_year_ngerman:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_ngerman:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_ngerman:nn + { + \projlib_datetime_display_day_ngerman:n { #2 } + .\nobreakspace + \projlib_datetime_display_month_ngerman:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_ngerman:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_ngerman:nn + { + \projlib_datetime_display_month_day_ngerman:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_ngerman:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_ngerman:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_ngerman:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_ngerman:n + { + \int_case:nnF { #1 } + { + { 1 } { Januar } + { 2 } { Februar } + { 3 } { März } + { 4 } { April } + { 5 } { Mai } + { 6 } { Juni } + { 7 } { Juli } + { 8 } { August } + { 9 } { September } + { 10 } { Oktober } + { 11 } { November } + { 12 } { Dezember } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_ngerman:n + { + \int_case:nnF { #1 } + { + { 1 } { Januar } + { 2 } { Februar } + { 3 } { März } + { 4 } { April } + { 5 } { Mai } + { 6 } { Juni } + { 7 } { Juli } + { 8 } { August } + { 9 } { September } + { 10 } { Oktober } + { 11 } { November } + { 12 } { Dezember } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_ngerman:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_ngerman:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_ngerman:n + { + \int_case:nnF { #1 } + { + { 1 } { Montag } + { 2 } { Dienstag } + { 3 } { Mittwoch } + { 4 } { Donnerstag } + { 5 } { Freitag } + { 6 } { Samstag } + { 7 } { Sonntag } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_ngerman:n + { + \projlib_datetime_display_week_ngerman:n { #1 } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_italian:nnn + { + \projlib_datetime_display_month_day_italian:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_italian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_italian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_italian:nnn + { + \projlib_datetime_display_month_day_uppercase_italian:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_italian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_italian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_italian:nn + { + \projlib_datetime_display_month_italian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_italian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_italian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_italian:nn + { + \projlib_datetime_display_month_uppercase_italian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_italian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_italian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_italian:nn + { + \projlib_datetime_display_day_italian:n { #2 } + \nobreakspace + \projlib_datetime_display_month_italian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_italian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_italian:nn + { + \projlib_datetime_display_month_day_italian:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_italian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_italian:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_italian:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_italian:n + { + \int_case:nnF { #1 } + { + { 1 } { gennaio } + { 2 } { febbraio } + { 3 } { marzo } + { 4 } { aprile } + { 5 } { maggio } + { 6 } { giugno } + { 7 } { luglio } + { 8 } { agosto } + { 9 } { settembre } + { 10 } { ottobre } + { 11 } { novembre } + { 12 } { dicembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_italian:n + { + \int_case:nnF { #1 } + { + { 1 } { Gennaio } + { 2 } { Febbraio } + { 3 } { Marzo } + { 4 } { Aprile } + { 5 } { Maggio } + { 6 } { Giugno } + { 7 } { Luglio } + { 8 } { Agosto } + { 9 } { Settembre } + { 10 } { Ottobre } + { 11 } { Novembre } + { 12 } { Dicembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_italian:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_italian:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_italian:n + { + \int_case:nnF { #1 } + { + { 1 } { lunedì } + { 2 } { martedì } + { 3 } { mercoledì } + { 4 } { giovedì } + { 5 } { venerdì } + { 6 } { sabato } + { 7 } { domenica } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_italian:n + { + \int_case:nnF { #1 } + { + { 1 } { Lunedì } + { 2 } { Martedì } + { 3 } { Mercoledì } + { 4 } { Giovedì } + { 5 } { Venerdì } + { 6 } { Sabato } + { 7 } { Domenica } + } { ??? } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_portuguese:nnn + { + \projlib_datetime_display_month_day_portuguese:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_portuguese:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_portuguese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_portuguese:nnn + { + \projlib_datetime_display_month_day_uppercase_portuguese:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_portuguese:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_portuguese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_portuguese:nn + { + \projlib_datetime_display_month_portuguese:n { #2 } + \nobreakspace + \projlib_datetime_display_year_portuguese:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_portuguese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_portuguese:nn + { + \projlib_datetime_display_month_uppercase_portuguese:n { #2 } + \nobreakspace + \projlib_datetime_display_year_portuguese:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_portuguese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_portuguese:nn + { + \projlib_datetime_display_day_portuguese:n { #2 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_month_uppercase_portuguese:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_portuguese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_portuguese:nn + { + \projlib_datetime_display_month_day_portuguese:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_portuguese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_portuguese:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_portuguese:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_portuguese:n + { + \int_case:nnF { #1 } + { + { 1 } { janeiro } + { 2 } { fevereiro } + { 3 } { março } + { 4 } { abril } + { 5 } { maio } + { 6 } { junho } + { 7 } { julho } + { 8 } { agosto } + { 9 } { setembro } + { 10 } { outubro } + { 11 } { novembro } + { 12 } { dezembro } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_portuguese:n + { + \int_case:nnF { #1 } + { + { 1 } { Janeiro } + { 2 } { Fevereiro } + { 3 } { Março } + { 4 } { Abril } + { 5 } { Maio } + { 6 } { Junho } + { 7 } { Julho } + { 8 } { Agosto } + { 9 } { Setembro } + { 10 } { Outubro } + { 11 } { Novembro } + { 12 } { Dezembro } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_portuguese:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_portuguese:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_portuguese:n + { + \int_case:nnF { #1 } + { + { 1 } { segunda-feira } + { 2 } { terça-feira } + { 3 } { quarta-feira } + { 4 } { quinta-feira } + { 5 } { sexta-feira } + { 6 } { sábado } + { 7 } { domingo } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_portuguese:n + { + \int_case:nnF { #1 } + { + { 1 } { Segunda-feira } + { 2 } { Terça-feira } + { 3 } { Quarta-feira } + { 4 } { Quinta-feira } + { 5 } { Sexta-feira } + { 6 } { Sábado } + { 7 } { Domingo } + } { ??? } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_brazilian:nnn + { + \projlib_datetime_display_month_day_brazilian:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_brazilian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_brazilian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_brazilian:nnn + { + \projlib_datetime_display_month_day_uppercase_brazilian:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_brazilian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_brazilian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_brazilian:nn + { + \projlib_datetime_display_month_brazilian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_brazilian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_brazilian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_brazilian:nn + { + \projlib_datetime_display_month_uppercase_brazilian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_brazilian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_brazilian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_brazilian:nn + { + \projlib_datetime_display_day_brazilian:n { #2 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_month_uppercase_brazilian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_brazilian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_brazilian:nn + { + \projlib_datetime_display_month_day_brazilian:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_brazilian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_brazilian:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_brazilian:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_brazilian:n + { + \int_case:nnF { #1 } + { + { 1 } { janeiro } + { 2 } { fevereiro } + { 3 } { março } + { 4 } { abril } + { 5 } { maio } + { 6 } { junho } + { 7 } { julho } + { 8 } { agosto } + { 9 } { setembro } + { 10 } { outubro } + { 11 } { novembro } + { 12 } { dezembro } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_brazilian:n + { + \int_case:nnF { #1 } + { + { 1 } { Janeiro } + { 2 } { Fevereiro } + { 3 } { Março } + { 4 } { Abril } + { 5 } { Maio } + { 6 } { Junho } + { 7 } { Julho } + { 8 } { Agosto } + { 9 } { Setembro } + { 10 } { Outubro } + { 11 } { Novembro } + { 12 } { Dezembro } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_brazilian:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_brazilian:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_brazilian:n + { + \int_case:nnF { #1 } + { + { 1 } { segunda-feira } + { 2 } { terça-feira } + { 3 } { quarta-feira } + { 4 } { quinta-feira } + { 5 } { sexta-feira } + { 6 } { sábado } + { 7 } { domingo } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_brazilian:n + { + \int_case:nnF { #1 } + { + { 1 } { Segunda-feira } + { 2 } { Terça-feira } + { 3 } { Quarta-feira } + { 4 } { Quinta-feira } + { 5 } { Sexta-feira } + { 6 } { Sábado } + { 7 } { Domingo } + } { ??? } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_spanish:nnn + { + \projlib_datetime_display_month_day_spanish:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_spanish:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_spanish:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_spanish:nnn + { + \projlib_datetime_display_month_day_uppercase_spanish:nn { #2 } { #3 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_spanish:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_spanish:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_spanish:nn + { + \projlib_datetime_display_month_spanish:n { #2 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_spanish:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_spanish:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_spanish:nn + { + \projlib_datetime_display_month_uppercase_spanish:n { #2 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_year_spanish:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_spanish:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_spanish:nn + { + \projlib_datetime_display_day_spanish:n { #2 } + \nobreakspace de \nobreakspace + \projlib_datetime_display_month_spanish:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_spanish:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_spanish:nn + { + \projlib_datetime_display_month_day_spanish:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_spanish:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_spanish:n { #1 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_spanish:n { #1 } + +\cs_new:Nn \projlib_datetime_display_month_spanish:n + { + \int_case:nnF { #1 } + { + { 1 } { enero } + { 2 } { febrero } + { 3 } { marzo } + { 4 } { abril } + { 5 } { mayo } + { 6 } { junio } + { 7 } { julio } + { 8 } { agosto } + { 9 } { septiembre } + { 10 } { octubre } + { 11 } { noviembre } + { 12 } { diciembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_spanish:n + { + \int_case:nnF { #1 } + { + { 1 } { Enero } + { 2 } { Febrero } + { 3 } { Marzo } + { 4 } { Abril } + { 5 } { Mayo } + { 6 } { Junio } + { 7 } { Julio } + { 8 } { Agosto } + { 9 } { Septiembre } + { 10 } { Octubre } + { 11 } { Noviembre } + { 12 } { Diciembre } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_spanish:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_spanish:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_spanish:n + { + \int_case:nnF { #1 } + { + { 1 } { lunes } + { 2 } { martes } + { 3 } { miércoles } + { 4 } { jueves } + { 5 } { viernes } + { 6 } { sábado } + { 7 } { domingo } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_spanish:n + { + \int_case:nnF { #1 } + { + { 1 } { Lunes } + { 2 } { Martes } + { 3 } { Miércoles } + { 4 } { Jueves } + { 5 } { Viernes } + { 6 } { Sábado } + { 7 } { Domingo } + } { ??? } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_schinese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_schinese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_schinese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_schinese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_schinese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_schinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_schinese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_schinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_schinese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_schinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_schinese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_schinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_schinese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_schinese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_month_schinese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_month_uppercase_schinese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_day_schinese:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_schinese:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_schinese:n + { + \int_case:nnF { #1 } + { + { 1 } { 星期一 } + { 2 } { 星期二 } + { 3 } { 星期三 } + { 4 } { 星期四 } + { 5 } { 星期五 } + { 6 } { 星期六 } + { 7 } { 星期日 } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_schinese:n + { + \projlib_datetime_display_week_schinese:n { #1 } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_tchinese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_tchinese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_tchinese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_tchinese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_tchinese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_tchinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_tchinese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_tchinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_tchinese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_tchinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_tchinese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_tchinese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_tchinese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_tchinese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_month_tchinese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_month_uppercase_tchinese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_day_tchinese:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_tchinese:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_tchinese:n + { + \int_case:nnF { #1 } + { + { 1 } { 星期一 } + { 2 } { 星期二 } + { 3 } { 星期三 } + { 4 } { 星期四 } + { 5 } { 星期五 } + { 6 } { 星期六 } + { 7 } { 星期日 } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_tchinese:n + { + \projlib_datetime_display_week_tchinese:n { #1 } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_japanese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_japanese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_japanese:nnn + { + #1 年 #2 月 #3 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_japanese:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_japanese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_japanese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_japanese:nn + { + #1 年 #2 月 + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_japanese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_japanese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_japanese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_japanese:nn + { + #1 月 #2 日 + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_japanese:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_japanese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_year_uppercase_japanese:n { #1 年 } +\cs_new:Nn \projlib_datetime_display_month_japanese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_month_uppercase_japanese:n { #1 月 } +\cs_new:Nn \projlib_datetime_display_day_japanese:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_japanese:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_japanese:n + { + \int_case:nnF { #1 } + { + { 1 } { 月曜日 } + { 2 } { 火曜日 } + { 3 } { 水曜日 } + { 4 } { 木曜日 } + { 5 } { 金曜日 } + { 6 } { 土曜日 } + { 7 } { 日曜日 } + } { ??? } + } + +\cs_new:Nn \projlib_datetime_display_week_uppercase_japanese:n + { + \projlib_datetime_display_week_japanese:n { #1 } + } + + +\cs_new:Nn \projlib_datetime_display_year_month_day_russian:nnn + { + \projlib_datetime_display_month_day_russian:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_russian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_russian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_day_uppercase_russian:nnn + { + \projlib_datetime_display_month_day_uppercase_russian:nn { #2 } { #3 } + \nobreakspace + \projlib_datetime_display_year_russian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_day_uppercase_russian:nnn { VVV, eee } + +\cs_new:Nn \projlib_datetime_display_year_month_russian:nn + { + \projlib_datetime_display_month_russian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_russian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_russian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_month_uppercase_russian:nn + { + \projlib_datetime_display_month_uppercase_russian:n { #2 } + \nobreakspace + \projlib_datetime_display_year_russian:n { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_year_month_uppercase_russian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_russian:nn + { + \projlib_datetime_display_day_russian:n { #2 } + \nobreakspace + \int_case:nnF { #1 } + { + { 1 } { января } + { 2 } { февраля } + { 3 } { марта } + { 4 } { апреля } + { 5 } { мая } + { 6 } { июня } + { 7 } { июля } + { 8 } { августа } + { 9 } { сентября } + { 10 } { октября } + { 11 } { ноября } + { 12 } { декабря } + } { #1 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_russian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_month_day_uppercase_russian:nn + { + \projlib_datetime_display_month_day_russian:nn { #1 } { #2 } + } +\cs_generate_variant:Nn \projlib_datetime_display_month_day_uppercase_russian:nn { VV, ee } + +\cs_new:Nn \projlib_datetime_display_year_russian:n { #1 ~ г. } +\cs_new:Nn \projlib_datetime_display_year_uppercase_russian:n { #1 ~ г. } + +\cs_new:Nn \projlib_datetime_display_month_russian:n + { + \int_case:nnF { #1 } + { + { 1 } { январь } + { 2 } { февраль } + { 3 } { март } + { 4 } { апрель } + { 5 } { май } + { 6 } { июнь } + { 7 } { июль } + { 8 } { август } + { 9 } { сентябрь } + { 10 } { октябрь } + { 11 } { ноябрь } + { 12 } { декабрь } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_month_uppercase_russian:n + { + \int_case:nnF { #1 } + { + { 1 } { Январь } + { 2 } { Февраль } + { 3 } { Март } + { 4 } { Апрель } + { 5 } { Май } + { 6 } { Июнь } + { 7 } { Июль } + { 8 } { Август } + { 9 } { Сентябрь } + { 10 } { Октябрь } + { 11 } { Ноябрь } + { 12 } { Декабрь } + } { #1 } + } + +\cs_new:Nn \projlib_datetime_display_day_russian:n { #1 } +\cs_new:Nn \projlib_datetime_display_day_uppercase_russian:n { #1 } + +\cs_new:Nn \projlib_datetime_display_week_russian:n + { + \int_case:nnF { #1 } + { + { 1 } { понедельник } + { 2 } { вторник } + { 3 } { среда } + { 4 } { четверг } + { 5 } { пятница } + { 6 } { суббота } + { 7 } { воскресенье } + } { ??? } + } +\cs_new:Nn \projlib_datetime_display_week_uppercase_russian:n + { + \int_case:nnF { #1 } + { + { 1 } { Понедельник } + { 2 } { Вторник } + { 3 } { Среда } + { 4 } { Четверг } + { 5 } { Пятница } + { 6 } { Суббота } + { 7 } { Воскресенье } + } { ??? } + } +% +% +%<*projlib-draft> +\keys_define:nn { projlib-draft } + { + , draft .bool_set:N = \l__projlib_draft_fast_bool + , draft .initial:n = { false } + , fast .bool_set:N = \l__projlib_draft_fast_bool + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-draft } + +\RequirePackage { projlib-language } +\RequirePackage { xcolor } + +\bool_if:NTF \l__projlib_draft_fast_bool + { + \NewDocumentCommand \projlib_draft_plain_box { O{-paper} m } + { + \group_begin: + \color { #1 } + \dim_set:Nn \fboxsep { 1.5pt } + \dim_set:Nn \fboxrule { 1.5pt } + \fbox { #2 } + \group_end: + } + } + { + \PassOptionsToPackage { many } { tcolorbox } + \RequirePackage { tcolorbox } + \NewTCBox \projlib_draft_plain_box { O{-paper} } + { + enhanced~jigsaw, breakable, + on~line, arc = 1.2pt, outer~arc = 1pt, + colframe = #1, colupper = #1, opacityback = 0, + boxsep = 1pt, boxrule = 1.2pt, + left = 1pt, right = 1pt, top = 0pt, bottom = 0pt, + } + } + +\projlib_langauge_define_multilingual_text:Nn \__dnf_text + { + EN = To\ be\ finished , + FR = Pas\ encore\ fini , + DE = Nicht\ beendet , + IT = Per\ essere\ finito , + PT = Não\ terminou , + BR = Não\ terminou , + ES = Estar\ terminado , + CN = 这里尚未完成 , + TC = 這裡尚未完成 , + JP = 終わってない , + RU = Не\ закончен , + } + +\projlib_langauge_define_multilingual_text:Nn \__dnf_report_text + { + EN = { Below\ is\ a\ list\ of\ outstanding\ items, + \ followed\ by\ the\ corresponding\ page\ numbers. } , + FR = { Voici\ la\ liste\ des\ éléments\ en\ suspens, + \ suivie\ des\ numéros\ de\ page\ correspondants. } , + DE = { Unten\ ist\ eine\ Liste\ der\ ausstehenden\ Posten, + \ gefolgt\ von\ den\ entsprechenden\ Seitenzahlen. } , + IT = { Qui\ sotto\ c'è\ una\ lista\ di\ voci\ in\ sospeso, + \ seguita\ dai\ numeri\ di\ pagina\ corrispondenti. } , + PT = { Abaixo\ está\ uma\ lista\ de\ itens\ pendentes, + \ seguida\ dos\ números\ de\ página\ correspondentes. } , + BR = { Abaixo\ está\ uma\ lista\ de\ itens\ pendentes, + \ seguida\ dos\ números\ de\ página\ correspondentes. } , + ES = { Aquí está\ la\ lista\ de\ elementos\ pendientes, + \ seguida\ de\ los\ números\ de\ página\ correspondientes. } , + CN = { 以下是未完成事项列表,括号内注明了对应的页码。 } , + TC = { 以下是未完成事項的列表,括號內註明了對應頁碼。 } , + JP = { 以下は、未解決の項目とそれに対応するページ番号の一覧です。 } , + RU = { Ниже\ приведен\ список\ невыполненных\ пунктов + \ с\ соответствующими\ номерами\ страниц\ в\ скобках. } , + } + +\tl_new:c { __dnf_font } +\tl_gset:cn { __dnf_font } { \normalfont \ttfamily \bfseries \small } + +\definecolor { __dnf_color } { RGB } { 21, 122, 20 } + +\newcounter { __dnf_counter } + +\tl_new:N \g__projlib_draft_dnf_report_tl + +\NewDocumentCommand \dnf { d<> } + { + \noindent + \projlib_draft_plain_box [ __dnf_color ] + { + \stepcounter { __dnf_counter } + \__dnf_font + \__dnf_text + \c_space_tl + \# \the__dnf_counter + \IfNoValueF { #1 } { \, : ~ #1 } + \tl_gput_right:Nx \g__projlib_draft_dnf_report_tl + { + \# \, + \int_value:w \the__dnf_counter + \c_space_tl \c_space_tl + $\langle$ + \skip_horizontal:n { 0.1em } + \cs_if_exist:cTF { hyperlink } + { + \exp_not:N \hyperlink { page.\thepage } { \thepage } + } + { + \thepage + } + \skip_horizontal:n { 0.1em } + $\rangle$ + \c_space_tl + \IfNoValueF { #1 } { : ~ #1 } + \\ + } + } + } + +\hook_gput_code:nnn { enddocument } { projlib-draft } + { + \tl_if_blank:VF \g__projlib_draft_dnf_report_tl + { + \clearpage \noindent + \color { __dnf_color } + \__dnf_font + \__dnf_report_text \\[0.75\baselineskip] + \g__projlib_draft_dnf_report_tl + } + } +% +% +%<*projlib-font> +\keys_define:nn { projlib-font } + { + , useosf .bool_set:N = \l__projlib_font_useosf_bool + , useosf .initial:n = { false } + , old-style-figures.bool_set:N = \l__projlib_font_useosf_bool + , old~style~figures.bool_set:N = \l__projlib_font_useosf_bool + , old style figures.bool_set:N = \l__projlib_font_useosf_bool + , lmodern .bool_set:N = \l__projlib_font_lmodern_bool + , lmodern .initial:n = { false } + , latin-modern .bool_set:N = \l__projlib_font_lmodern_bool + , latin~modern .bool_set:N = \l__projlib_font_lmodern_bool + , latin modern .bool_set:N = \l__projlib_font_lmodern_bool + , palatino .bool_set:N = \l__projlib_font_palatino_bool + , palatino .initial:n = { false } + , times .bool_set:N = \l__projlib_font_times_bool + , times .initial:n = { false } + , garamond .bool_set:N = \l__projlib_font_garamond_bool + , garamond .initial:n = { false } + , noto .bool_set:N = \l__projlib_font_noto_bool + , noto .initial:n = { false } + , biolinum .bool_set:N = \l__projlib_font_biolinum_bool + , biolinum .initial:n = { false } + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-font } + +\bool_new:N \g_projlib_font_already_set_bool +\bool_gset_false:N \g_projlib_font_already_set_bool + +\RequirePackage { setspace } + +\cs_new:Nn \projlib_font_set_linespacing_latin:n + { + \cs_if_exist:NTF \projlib_language_set_linespacing_latin:n + { + \projlib_language_set_linespacing_latin:n { #1 } + } + { + #1 + } + } + +\bool_if:NT \l__projlib_font_lmodern_bool + { + \RequirePackage { amssymb } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \RequirePackage { cfr-lm } + } + { + \RequirePackage { lmodern } + } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\bool_if:NT \l__projlib_font_palatino_bool + { + \sys_if_engine_pdftex:TF + { + \RequirePackage { mathpazo } + \PassOptionsToPackage { defaultsups } { newpxtext } + \RequirePackage { newpxtext } + \cs_undefine:c { openbox } + \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, + Numbers = OldStyle ] + } + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, + ] + } + \setmathfont { texgyrepagella-math.otf } + } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.07 } } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\bool_if:NT \l__projlib_font_times_bool + { + \sys_if_engine_pdftex:TF + { + \PassOptionsToPackage { defaultsups } { newtxtext } + \RequirePackage { newtxtext } + \RequirePackage { newtxmath } + \cs_undefine:c { openbox } + \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyreTermesX-Regular.otf } + [ + BoldFont = TeXGyreTermesX-Bold.otf , + ItalicFont = TeXGyreTermesX-Italic.otf , + BoldItalicFont = TeXGyreTermesX-BoldItalic.otf, + Numbers = OldStyle ] + } + { + \setmainfont { TeXGyreTermesX-Regular.otf } + [ + BoldFont = TeXGyreTermesX-Bold.otf , + ItalicFont = TeXGyreTermesX-Italic.otf , + BoldItalicFont = TeXGyreTermesX-BoldItalic.otf, + ] + } + \setmathfont { texgyretermes-math.otf } + } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\bool_if:NT \l__projlib_font_garamond_bool + { + \bool_if:NF \l__projlib_font_useosf_bool + { + \PassOptionsToPackage { lining } { ebgaramond } + } + \RequirePackage [ cmintegrals, cmbraces ] { newtxmath } + \cs_undefine:c { openbox } + \RequirePackage { ebgaramond-maths } + \RequirePackage { ebgaramond } + \cs_undefine:c { Bbbk } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\bool_if:NT \l__projlib_font_noto_bool + { + \bool_if:NT \l__projlib_font_useosf_bool + { + \PassOptionsToPackage { oldstyle } { notomath } + } + \RequirePackage { anyfontsize } + \RequirePackage { notomath } + \cs_undefine:c { Bbbk } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\bool_if:NT \l__projlib_font_biolinum_bool + { + \RequirePackage [ OT1 ] { eulervm } + \sys_if_engine_pdftex:TF + { + \bool_if:NT \l__projlib_font_useosf_bool + { + \PassOptionsToPackage { osf } { biolinum } + } + \RequirePackage { biolinum } + \tl_gset:Nn \familydefault { \biolinum@family } + } + { + \PassOptionsToPackage { no-math } { fontspec } + \RequirePackage { fontspec } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { LinBiolinum_R.otf } [ + BoldFont = LinBiolinum_RB.otf , + ItalicFont = LinBiolinum_RI.otf , + BoldItalicFont = LinBiolinum_RBO.otf , + Numbers = OldStyle , ] + } + { + \setmainfont { LinBiolinum_R.otf } [ + BoldFont = LinBiolinum_RB.otf , + ItalicFont = LinBiolinum_RI.otf , + BoldItalicFont = LinBiolinum_RBO.otf , ] + } + } + \projlib_font_set_linespacing_latin:n { \setstretch { 1.05 } } + \RequirePackage [ italic, defaultmathsizes ] { mathastext } + \bool_gset_true:N \g_projlib_font_already_set_bool + } + +\PassOptionsToPackage { verbose = silent } { microtype } +\RequirePackage { microtype } +% +% +%<*projlib-language> +\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 } + } +% +% +%<*projlib-logo> +\keys_define:nn { projlib-logo } + { + , draft .bool_set:N = \l__projlib_logo_fast_bool + , draft .initial:n = { false } + , fast .bool_set:N = \l__projlib_logo_fast_bool + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-logo } + +\bool_if:NT \l__projlib_logo_fast_bool + { + \DeclareRobustCommand * \ProjLib + { + \group_begin: + \normalfont ProjLib + \group_end: + } + \endinput + } + +\cs_if_exist:cTF { fontspec } + { + \newfontface \__projlib_logo_font: { LinBiolinum_R.otf } + } + { + \RequirePackage [T1] { fontenc } + \cs_gset:Nn \__projlib_logo_font: + { \fontfamily { LinuxBiolinumT-TLF } \selectfont } + } + +\tl_new:N \g__projlib_logo_sigma_j_tl +\tl_gset:Nn \g__projlib_logo_sigma_j_tl + { + \vbox:n + { + \offinterlineskip + \hbox_overlap_center:n + { + \skip_horizontal:n { 0.75ex } + \hbox_set:Nn \l_tmpa_box { \usefont{U}{zeur}{b}{n} \symbol{"06} } + \box_rotate:Nn \l_tmpa_box { -10 } + \box_scale:Nnn \l_tmpa_box {.4} {.4} + \box_use:N \l_tmpa_box + } + \skip_vertical:n { 0.15ex } + \hbox:n { \j } + } + } + +% \RequirePackage { xcolor } +% \cs_new_protected:Nn \projlib_logo_generic:n +% { +% \group_begin: +% \normalfont +% \__projlib_logo_font: +% \textcolor { blue!55!cyan } { P } +% \textcolor { blue!45!cyan } { r } +% \textcolor { blue!30!cyan } { o } +% \textcolor { green!70!black!70 } { #1 } +% \textcolor { red!20!yellow } { L } +% \textcolor { red!40!yellow } { i } +% \textcolor { red!55!yellow } { b } +% \group_end: +% } +\cs_new_protected:Nn \projlib_logo_generic:n + { + \group_begin: + \normalfont + \__projlib_logo_font: + \color_group_begin: + \color_select:n { blue!60!cyan } { P } + \color_select:n { blue!45!cyan } { r } + \color_select:n { blue!30!cyan } { o } + \color_select:n { green!70!black!70 } { #1 } + \color_select:n { red!20!yellow } { L } + \color_select:n { red!40!yellow } { i } + \color_select:n { red!60!yellow } { b } + \color_group_end: + \group_end: + } + +\DeclareRobustCommand * \ProjLib + { + \projlib_logo_generic:n { \g__projlib_logo_sigma_j_tl } + } +\DeclareRobustCommand * \ProjLibText + { + \projlib_logo_generic:n { j } + } +% +% +%<*projlib-math> +\keys_define:nn { projlib-math } + { + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-math } + +\RequirePackage { mathtools } +\RequirePackage { mathrsfs } +\PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } +\@ifpackageloaded { unicode-math } {} { \RequirePackage { amssymb } } + + +\msg_new:nnn { projlib-math } + { operator-not-define } + { The~math~operator~"\iow_char:N \\#1"~cannot~be~defined,~a~command~with~the~same~name~has~already~existed. } + +\keys_define:nn { projlib-math-operator } + { + , style .tl_set:N = \l__projlib_math_operator_style_tl + , unknown .code:n = {} + } + +\cs_new_protected:Nn \projlib_math_define_operator:nnn + % #1 = bool for star or empty + % #2 = list of operators + % #3 = the option + { + \tl_clear:N \l__projlib_math_operator_style_tl + \keys_set:nn { projlib-math-operator } { #3 } + \clist_map_inline:nn { #2 } + { + \str_if_in:nnTF { ##1 } { = } + { + \seq_set_split:Nnn \l_tmpa_seq { = } { ##1 } + \__projlib_math_define_operator:nee { #1 } { \seq_item:Nn \l_tmpa_seq { 1 } } { \seq_item:Nn \l_tmpa_seq { 2 } } + } + { + \__projlib_math_define_operator:nee { #1 } { ##1 } { ##1 } + } + } + } + +\cs_new_protected:Nn \__projlib_math_define_operator:nnn + % #1 = bool for star or empty + % #2 = the operator + % #3 = the content + { + \cs_if_exist:cTF { #2 } + { + \msg_warning:nnn { projlib-math } { operator-not-define } { #2 } + } + { + \bool_if:NTF #1 + { + \exp_args:Nnf \use:n + { \exp_args:Nnc \use:n { \DeclareMathOperator* } { #2 } } + } + { + \exp_args:Nnf \use:n + { \exp_args:Nc \DeclareMathOperator { #2 } } + } + % This is the f-argument of \exp_args:Nnf : + { + \exp_args:NnV \use:nn + { \exp_stop_f: } + { \l__projlib_math_operator_style_tl } { #3 } + } + } + } +\cs_generate_variant:Nn \__projlib_math_define_operator:nnn { nee } + +\NewDocumentCommand \DefineOperator { s O{} m O{} } + { + \tl_if_blank:nTF { #2 } + { + \projlib_math_define_operator:nnn { #1 } { #3 } { #4 } + } + { + \projlib_math_define_operator:nnn { #1 } { #3 } { #2 } + } + } + + +\msg_new:nnn { projlib-math } + { shortcut-not-define } + { The~shortcut~"\iow_char:N \\#1"~cannot~be~defined,~a~command~with~the~same~name~has~already~existed. } + +\msg_new:nnn { projlib-math } + { shortcut-type-not-define } + { The~shortcut~type~"#1"~is~not~available,~a~command~with~the~same~name~has~already~existed. } + +\keys_define:nn { projlib-math-shortcut } + { + , prefix .clist_set:N = \l__projlib_math_shortcut_prefix_clist + , type .tl_set:N = \l__projlib_math_shortcut_type_tl + , style .tl_set:N = \l__projlib_math_shortcut_style_tl + , unknown .code:n = {} + } + +\cs_new_protected:Nn \projlib_math_define_shortcut:nnn + % #1 = bool for star or empty + % (currently the starred version is the same as normal version) + % #2 = list of shortcuts + % #3 = the option + { + \clist_clear:N \l__projlib_math_shortcut_prefix_clist + \tl_clear:N \l__projlib_math_shortcut_type_tl + \tl_clear:N \l__projlib_math_shortcut_style_tl + \keys_set:nn { projlib-math-shortcut } { #3 } + \tl_if_empty:NF \l__projlib_math_shortcut_type_tl + { + \cs_if_exist:cTF { \l__projlib_math_shortcut_type_tl } + { + \exp_args:Nne \use:n + { \msg_warning:nnn { projlib-math } { shortcut-type-not-define } } + { \l__projlib_math_shortcut_type_tl } + } + { + \exp_args:Nno \use:n + { + \exp_args:Nc \NewDocumentCommand { \l__projlib_math_shortcut_type_tl } { m } + } + { + \l__projlib_math_shortcut_style_tl { ##1 } + } + } + } + \clist_map_inline:nn { #2 } + { + \str_if_in:nnTF { ##1 } { = } + { + \seq_set_split:Nnn \l_tmpa_seq { = } { ##1 } + \clist_if_empty:NTF \l__projlib_math_shortcut_prefix_clist + { + \__projlib_math_define_shortcut:ee { \seq_item:Nn \l_tmpa_seq { 1 } } { \seq_item:Nn \l_tmpa_seq { 2 } } + } + { + \clist_map_inline:Nn \l__projlib_math_shortcut_prefix_clist + { + \__projlib_math_define_shortcut:ee { ####1 \seq_item:Nn \l_tmpa_seq { 1 } } { \seq_item:Nn \l_tmpa_seq { 2 } } + } + } + } + { + \clist_if_empty:NTF \l__projlib_math_shortcut_prefix_clist + { + \__projlib_math_define_shortcut:ee { ##1 } { ##1 } + } + { + \clist_map_inline:Nn \l__projlib_math_shortcut_prefix_clist + { + \__projlib_math_define_shortcut:ee { ####1 ##1 } { ##1 } + } + } + } + } + } + +\cs_new_protected:Nn \__projlib_math_define_shortcut:nn + % #1 = command name + % #2 = the content + { + \cs_if_exist:cTF { #1 } + { + \msg_warning:nnn { projlib-math } { shortcut-type-not-define } { #1 } + } + { + \exp_args:Nno \use:n + { \exp_args:Nc \NewDocumentCommand { #1 } {} } + { \l__projlib_math_shortcut_style_tl { #2 } } + } + } +\cs_generate_variant:Nn \__projlib_math_define_shortcut:nn { ee } + +\NewDocumentCommand \DefineShortcut { s O{} m O{} } + { + \tl_if_blank:nTF { #2 } + { + \projlib_math_define_shortcut:nnn { #1 } { #3 } { #4 } + } + { + \projlib_math_define_shortcut:nnn { #1 } { #3 } { #2 } + } + } +% +% +%<*projlib-paper> +\keys_define:nn { projlib-paper } + { + , preview-mode .bool_set:N = \l__projlib_paper_preview_bool + , preview-mode .initial:n = { false } + , paper-style .tl_set:N = \l__projlib_paper_paperstyle_tl + , paper-style .initial:n = { normal } + , paper-style .value_required:n = true + , paper~style .tl_set:N = \l__projlib_paper_paperstyle_tl + , paper style .tl_set:N = \l__projlib_paper_paperstyle_tl + , yellow-paper .meta:n = { paperstyle = yellow } + , yellow~paper .meta:n = { paperstyle = yellow } + , yellow paper .meta:n = { paperstyle = yellow } + , parchment-paper .meta:n = { paperstyle = parchment } + , parchment~paper .meta:n = { paperstyle = parchment } + , parchment paper .meta:n = { paperstyle = parchment } + , green-paper .meta:n = { paperstyle = green } + , green~paper .meta:n = { paperstyle = green } + , green paper .meta:n = { paperstyle = green } + , light-gray-paper .meta:n = { paperstyle = lightgray } + , light~gray~paper .meta:n = { paperstyle = lightgray } + , light gray-paper .meta:n = { paperstyle = lightgray } + , light gray~paper .meta:n = { paperstyle = lightgray } + , light gray paper .meta:n = { paperstyle = lightgray } + , gray-paper .meta:n = { paperstyle = gray } + , gray~paper .meta:n = { paperstyle = gray } + , gray paper .meta:n = { paperstyle = gray } + , nord-paper .meta:n = { paperstyle = nord } + , nord~paper .meta:n = { paperstyle = nord } + , nord paper .meta:n = { paperstyle = nord } + , dark-paper .meta:n = { paperstyle = dark } + , dark~paper .meta:n = { paperstyle = dark } + , dark paper .meta:n = { paperstyle = dark } + , unknown .code:n = {} + } +\ProcessKeysOptions { projlib-paper } + +\cs_new:Nn \projlib_paper_preview_disable: + { + \bool_set_false:c { l__projlib_paper_preview_bool } + } + +\hook_gput_code:nnn { begindocument/before } { projlib-paper } + { + \bool_if:NT \l__projlib_paper_preview_bool + { + \dim_set:Nn \paperwidth + { + \dim_eval:n { \textwidth * 21 / 20 } + } + \dim_set:Nn \paperheight + { + \dim_eval:n { ( \textheight + \headheight + \headsep + \footskip ) * 21 / 20 } + } + \dim_set:Nn \oddsidemargin + { + \dim_eval:n { ( \paperwidth - \textwidth ) / 2 - 1in } + } + \dim_set:Nn \evensidemargin + { + \dim_eval:n { ( \paperwidth - \textwidth ) / 2 - 1in } + } + \dim_set:Nn \topmargin + { + \dim_eval:n { ( \paperheight - \textheight - \headheight - \headsep - \footskip ) / 2 - 1in } + } + } + } + +\RequirePackage { xcolor } + +\definecolor { paper } { RGB } { 255, 255, 255 } +\definecolor { main-text } { RGB } { 0, 0, 0 } + +\str_case_e:nn { \l__projlib_paper_paperstyle_tl } + { + { yellow } { \definecolor { paper } { RGB } { 247, 246, 233 } } + { parchment } { \definecolor { paper } { RGB } { 224, 204, 160 } } + { green } { \definecolor { paper } { RGB } { 207, 231, 207 } } + { lightgray } { \definecolor { paper } { RGB } { 236, 239, 244 } + \definecolor { main-text } { RGB } { 37, 41, 46 } } + { light-gray } { \definecolor { paper } { RGB } { 236, 239, 244 } + \definecolor { main-text } { RGB } { 37, 41, 46 } } + { gray } { \definecolor { paper } { RGB } { 127, 130, 136 } + \definecolor { main-text } { RGB } { 236, 239, 244 } } + { nord } { \definecolor { paper } { RGB } { 46, 52, 64 } + \definecolor { main-text } { RGB } { 214, 220, 230 } } + { dark } { \definecolor { paper } { RGB } { 28, 29, 33 } + \definecolor { main-text } { RGB } { 210, 213, 217 } } + } + +\cs_new:Nn \projlib_paper_set_page_color:n + { + \pagecolor { #1 } + } +\cs_new:Nn \projlib_paper_set_text_color:n + { + \color { #1 } + \cs_gset_eq:cc { default@color } { current@color } + } + +\projlib_paper_set_page_color:n { paper } +\projlib_paper_set_text_color:n { main-text } + +\hook_gput_code:nnn { begindocument/before } { projlib-paper } + { + \cs_if_exist:NT \tcbset + { \tcbset { colupper = main-text, collower = main-text } } + } +% +% +%<*projlib-theorem> +\keys_define:nn { projlib-theorem } + { + , no-theorems .bool_set:N = \l__projlib_theorem_no_theorems_bool + , no-theorems .initial:n = { false } + , no~theorems .bool_set:N = \l__projlib_theorem_no_theorems_bool + , no theorems .bool_set:N = \l__projlib_theorem_no_theorems_bool + , nothms .bool_set:N = \l__projlib_theorem_no_theorems_bool + , no-theorem-numbering .bool_set:N = \l__projlib_theorem_no_theorem_numbering_bool + , no-theorem-numbering .initial:n = { false } + , no~theorem~numbering .bool_set:N = \l__projlib_theorem_no_theorem_numbering_bool + , no theorem numbering .bool_set:N = \l__projlib_theorem_no_theorem_numbering_bool + , nothmnum .bool_set:N = \l__projlib_theorem_no_theorem_numbering_bool + , theorem-numbering .tl_set:N = \l__projlib_theorem_theorem_numbering_tl + , theorem-numbering .default:n = { * } + , theorem~numbering .tl_set:N = \l__projlib_theorem_theorem_numbering_tl + , theorem~numbering .default:n = { * } + , theorem numbering .tl_set:N = \l__projlib_theorem_theorem_numbering_tl + , theorem numbering .default:n = { * } + , thmnum .tl_set:N = \l__projlib_theorem_theorem_numbering_tl + , thmnum .default:n = { * } + , complex-name .bool_set:N = \l__projlib_theorem_complexname_bool + , complex-name .initial:n = { true } + , complex~name .bool_set:N = \l__projlib_theorem_complexname_bool + , complex name .bool_set:N = \l__projlib_theorem_complexname_bool + , simple-name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool + , simple~name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool + , simple name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool + , no-preset-names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool + , no-preset-names .initial:n = { false } + , no~preset~names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool + , no preset names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool + , unknown .code:n = { \PassOptionsToPackage { \CurrentOption } { create-theorem } } + } +\ProcessKeysOptions { projlib-theorem } + +\clist_const:Nn \c_projlib_theorem_supported_clist + { + assertion , + assumption , + axiom , + conclusion , + conjecture , + convention , + corollary , + definition , + example , + exercise , + fact , + hypothesis , + lemma , + notation , + observation , + postulate , + problem , + property , + proposition , + question , + remark , + theorem , + definition-proposition , + definition-theorem , + } + +\@ifclassloaded { beamer } + { + \RequirePackage { silence } + \WarningFilter { cleveref } { hyperref~package~loaded~with~implicit=false~option } + \bool_set_true:N \l__projlib_theorem_no_theorem_numbering_bool + \bool_if:NF \l__projlib_theorem_no_theorems_bool + { + \cs_undefine:c { theorem } + \cs_undefine:c { lemma } + \cs_undefine:c { corollary } + \cs_undefine:c { definition } + \cs_undefine:c { fact } + \cs_undefine:c { example } + \cs_undefine:c { problem } + } + } {} + +\RequirePackage { projlib-language } + +% \bool_if:NF \l__projlib_theorem_complexname_bool +% { +% \PassOptionsToPackage { no preset names } { create-theorem } +% } + +\RequirePackage { amsthm } +\RequirePackage { create-theorem } + + +\bool_if:NF \l__projlib_theorem_no_theorems_bool + { + \bool_if:NTF \l__projlib_theorem_no_theorem_numbering_bool + { + \exp_args:Nv \CreateTheorem { c_projlib_theorem_supported_clist } { numberless } + } + { + \tl_if_blank:eTF \l__projlib_theorem_theorem_numbering_tl + { + \cs_if_exist:cTF { c@chapter } + { % with \chapter + \CreateTheorem {theorem} { parent counter = chapter } + } + { % without \chapter + \CreateTheorem {theorem} { parent counter = section } + } + } + { + \tl_if_eq:NnTF \l__projlib_theorem_theorem_numbering_tl { * } + { + \CreateTheorem {theorem} { } + } + { + \CreateTheorem {theorem} { parent counter = \l__projlib_theorem_theorem_numbering_tl } + } + } + + \exp_args:Nv \CreateTheorem { c_projlib_theorem_supported_clist } { shared counter = theorem, quiet } + } + } + + +\AddLanguageSetting [ schinese ] + { + \crefname { equation } { 式 } { 式 } + \crefname { figure } { 图 } { 图 } + \crefname { table } { 表 } { 表 } + \crefname { appendix } { 附录 } { 附录 } + \Crefname { equation } { 式 } { 式 } + \Crefname { figure } { 图 } { 图 } + \Crefname { table } { 表 } { 表 } + \Crefname { appendix } { 附录 } { 附录 } + \tl_gset:Nn { \crefpairconjunction } { 、 } + \tl_gset:Nn { \crefmiddleconjunction } { 、 } + \tl_gset:Nn { \creflastconjunction } { \nobreakspace 和 \nobreakspace } + \tl_gset:Nn { \crefpairgroupconjunction } { \nobreakspace 和 \nobreakspace } + \tl_gset:Nn { \crefmiddlegroupconjunction } { 、 } + \tl_gset:Nn { \creflastgroupconjunction } { \nobreakspace 以及 \nobreakspace } + \tl_gset:Nn { \crefrangeconjunction } { ~ } + } + +\AddLanguageSetting [ tchinese ] + { + \crefname { equation } { 式 } { 式 } + \crefname { figure } { 圖 } { 圖 } + \crefname { table } { 表 } { 表 } + \crefname { appendix } { 附錄 } { 附錄 } + \Crefname { equation } { 式 } { 式 } + \Crefname { figure } { 圖 } { 圖 } + \Crefname { table } { 表 } { 表 } + \Crefname { appendix } { 附錄 } { 附錄 } + \tl_gset:Nn { \crefpairconjunction } { 、 } + \tl_gset:Nn { \crefmiddleconjunction } { 、 } + \tl_gset:Nn { \creflastconjunction } { \nobreakspace 與 \nobreakspace } + \tl_gset:Nn { \crefpairgroupconjunction } { \nobreakspace 與 \nobreakspace } + \tl_gset:Nn { \crefmiddlegroupconjunction } { 、 } + \tl_gset:Nn { \creflastgroupconjunction } { \nobreakspace 以及 \nobreakspace } + \tl_gset:Nn { \crefrangeconjunction } { ~ } + } + +\AddLanguageSetting [ japanese ] + { + \crefname { equation } { 式 } { 式 } + \crefname { figure } { 図 } { 図 } + \crefname { table } { 表 } { 表 } + \Crefname { appendix } { 付録 } { 付録 } + \Crefname { equation } { 式 } { 式 } + \Crefname { figure } { 図 } { 図 } + \Crefname { table } { 表 } { 表 } + \Crefname { appendix } { 付録 } { 付録 } + \tl_gset:Nn { \crefpairconjunction } { \nobreakspace と \nobreakspace } + \tl_gset:Nn { \crefmiddleconjunction } { \nobreakspace と \nobreakspace } + \tl_gset:Nn { \creflastconjunction } { \nobreakspace と \nobreakspace } + \tl_gset:Nn { \crefpairgroupconjunction } { \nobreakspace と \nobreakspace } + \tl_gset:Nn { \crefmiddlegroupconjunction } { \nobreakspace と \nobreakspace } + \tl_gset:Nn { \creflastgroupconjunction } { \nobreakspace 及び \nobreakspace } + \tl_gset:Nn { \crefrangeconjunction } { ~ } + } + +\AddLanguageSetting [ russian ] + { + \crefname { equation } { уравнение } { уравнения } + \crefname { figure } { рис. } { рис. } + \crefname { table } { таблица } { таблицы } + \crefname { appendix } { приложение } { приложения } + \Crefname { equation } { Уравнение } { Уравнения } + \Crefname { figure } { Рис. } { Рис. } + \Crefname { table } { Таблица } { Таблицы } + \Crefname { appendix } { Приложение } { Приложения } + \tl_gset:Nn { \crefpairconjunction } { \nobreakspace и \nobreakspace } + \tl_gset:Nn { \crefmiddleconjunction } { , \nobreakspace } + \tl_gset:Nn { \creflastconjunction } { \nobreakspace и \nobreakspace } + \tl_gset:Nn { \crefpairgroupconjunction } { \nobreakspace и \nobreakspace } + \tl_gset:Nn { \crefmiddlegroupconjunction } { , \nobreakspace } + \tl_gset:Nn { \creflastgroupconjunction } { \nobreakspace и \nobreakspace } + \tl_gset:Nn { \crefrangeconjunction } { \nobreakspace \textasciitilde \nobreakspace } + } + +\AddLanguageSetting [ portuguese ] + { + \crefname { equation } { eq. } { eqs. } + \crefname { figure } { fig. } { figs. } + \crefname { table } { tabela } { tabelas } + \crefname { appendix } { apêndice } { apêndices } + \Crefname { equation } { Eq. } { Eqs. } + \Crefname { figure } { Fig. } { Figs. } + \Crefname { table } { Tabela } { Tabelas } + \Crefname { appendix } { Apêndice } { Apêndices } + \tl_gset:Nn { \crefpairconjunction } { \nobreakspace e \nobreakspace } + \tl_gset:Nn { \crefmiddleconjunction } { , \nobreakspace } + \tl_gset:Nn { \creflastconjunction } { \nobreakspace e \nobreakspace } + \tl_gset:Nn { \crefpairgroupconjunction } { \nobreakspace e \nobreakspace } + \tl_gset:Nn { \crefmiddlegroupconjunction } { , \nobreakspace } + \tl_gset:Nn { \creflastgroupconjunction } { \nobreakspace e \nobreakspace } + \tl_gset:Nn { \crefrangeconjunction } { \nobreakspace a \nobreakspace } + } + + +\bool_if:NF \l__projlib_theorem_presetname_bool { \endinput } +\bool_if:NT \l__projlib_theorem_complexname_bool { \endinput } + + +\NameTheorem { assertion } + { + , heading = { + , english = Assertion + , french = Assertion + , ngerman = Behauptung + , italian = Asserzione + , portuguese = Asserção + , brazilian = Asserção + , spanish = Aserción + , schinese = 断言 + , tchinese = 斷言 + , japanese = アサーション + , russian = Утверждение + } + , crefname = { + , english = {Assertion}{Assertion} + , french = [l']{Assertion}[les]{Assertion} + , ngerman = {Behauptung}{Behauptung} + , italian = [l']{Asserzione}[le]{Asserzione} + , portuguese = [a]{Asserção}[as]{Asserção} + , brazilian = [a]{Asserção}[as]{Asserção} + , spanish = [la]{Aserción}[las]{Aserción} + , schinese = {断言}{断言} + , tchinese = {斷言}{斷言} + , japanese = {アサーション}{アサーション} + , russian = {Утверждение}{Утверждение} + } + , Crefname = { + , english = {Assertion}{Assertion} + , french = [L']{Assertion}[Les]{Assertion} + , ngerman = {Behauptung}{Behauptung} + , italian = [L']{Asserzione}[Le]{Asserzione} + , portuguese = [A]{Asserção}[As]{Asserção} + , brazilian = [A]{Asserção}[As]{Asserção} + , spanish = [La]{Aserción}[Las]{Aserción} + , schinese = {断言}{断言} + , tchinese = {斷言}{斷言} + , japanese = {アサーション}{アサーション} + , russian = {Утверждение}{Утверждение} + } + } + +\NameTheorem { assumption } + { + , heading = { + , english = Assumption + , french = Supposition + , ngerman = Annahme + , italian = Supposizione + , portuguese = Suposição + , brazilian = Suposição + , spanish = Suposición + , schinese = 假定 + , tchinese = 假定 + , japanese = 仮定 + , russian = Предположение + } + , crefname = { + , english = {Assumption}{Assumption} + , french = [la]{Supposition}[les]{Supposition} + , ngerman = {Annahme}{Annahme} + , italian = [la]{Supposizione}[le]{Supposizione} + , portuguese = [a]{Suposição}[as]{Suposição} + , brazilian = [a]{Suposição}[as]{Suposição} + , spanish = [la]{Suposición}[las]{Suposición} + , schinese = {假定}{假定} + , tchinese = {假定}{假定} + , japanese = {仮定}{仮定} + , russian = {Предположение}{Предположение} + } + , Crefname = { + , english = {Assumption}{Assumption} + , french = [La]{Supposition}[Les]{Supposition} + , ngerman = {Annahme}{Annahme} + , italian = [la]{Supposizione}[le]{Supposizione} + , portuguese = [A]{Suposição}[As]{Suposição} + , brazilian = [A]{Suposição}[As]{Suposição} + , spanish = [La]{Suposición}[Las]{Suposición} + , schinese = {假定}{假定} + , tchinese = {假定}{假定} + , japanese = {仮定}{仮定} + , russian = {Предположение}{Предположение} + } + } + +\NameTheorem { axiom } + { + , heading = { + , english = Axiom + , french = Axiome + , ngerman = Axiom + , italian = Assioma + , portuguese = Axioma + , brazilian = Axioma + , spanish = Axioma + , schinese = 公理 + , tchinese = 公理 + , japanese = 公理 + , russian = Аксиома + } + , crefname = { + , english = {Axiom}{Axiom} + , french = [l']{Axiome}[les]{Axiome} + , ngerman = {Axiom}{Axiom} + , italian = [l']{Assioma}[gli]{Assioma} + , portuguese = [o]{Axioma}[os]{Axioma} + , brazilian = [o]{Axioma}[os]{Axioma} + , spanish = [el]{Axioma}[los]{Axioma} + , schinese = {公理}{公理} + , tchinese = {公理}{公理} + , japanese = {公理}{公理} + , russian = {Аксиома}{Аксиома} + } + , Crefname = { + , english = {Axiom}{Axiom} + , french = [L']{Axiome}[Les]{Axiome} + , ngerman = {Axiom}{Axiom} + , italian = [L']{Assioma}[Gli]{Assioma} + , portuguese = [O]{Axioma}[Os]{Axioma} + , brazilian = [O]{Axioma}[Os]{Axioma} + , spanish = [El]{Axioma}[Los]{Axioma} + , schinese = {公理}{公理} + , tchinese = {公理}{公理} + , japanese = {公理}{公理} + , russian = {Аксиома}{Аксиома} + } + } + +\NameTheorem { conclusion } + { + , heading = { + , english = Conclusion + , french = Conclusion + , ngerman = Schlussfolgerung + , italian = Conclusione + , portuguese = Conclusão + , brazilian = Conclusão + , spanish = Conclusión + , schinese = 结论 + , tchinese = 結論 + , japanese = 結論 + , russian = Вывод + } + , crefname = { + , english = {Conclusion}{Conclusion} + , french = [la]{Conclusion}[Les]{Conclusion} + , ngerman = {Schlussfolgerung}{Schlussfolgerung} + , italian = [la]{Conclusione}[le]{Conclusione} + , portuguese = [a]{Conclusão}[as]{Conclusão} + , brazilian = [a]{Conclusão}[as]{Conclusão} + , spanish = [la]{Conclusión}[las]{Conclusión} + , schinese = {结论}{结论} + , tchinese = {結論}{結論} + , japanese = {結論}{結論} + , russian = {Вывод}{Вывод} + } + , Crefname = { + , english = {Conclusion}{Conclusion} + , french = [La]{Conclusion}[Les]{Conclusion} + , ngerman = {Schlussfolgerung}{Schlussfolgerung} + , italian = [La]{Conclusione}[Le]{Conclusione} + , portuguese = [A]{Conclusão}[As]{Conclusão} + , brazilian = [A]{Conclusão}[As]{Conclusão} + , spanish = [La]{Conclusión}[Las]{Conclusión} + , schinese = {结论}{结论} + , tchinese = {結論}{結論} + , japanese = {結論}{結論} + , russian = {Вывод}{Вывод} + } + } + +\NameTheorem { conjecture } + { + , heading = { + , english = Conjecture + , french = Conjecture + , ngerman = Vermutung + , italian = Congettura + , portuguese = Conjetura + , brazilian = Conjectura + , spanish = Conjetura + , schinese = 猜想 + , tchinese = 猜想 + , japanese = 予想 + , russian = Гипотеза + } + , crefname = { + , english = {Conjecture}{Conjecture} + , french = [la]{Conjecture}[les]{Conjecture} + , ngerman = {Vermutung}{Vermutung} + , italian = [la]{Congettura}[le]{Congettura} + , portuguese = [a]{Conjetura}[as]{Conjetura} + , brazilian = [a]{Conjectura}[as]{Conjectura} + , spanish = [la]{Conjetura}[las]{Conjetura} + , schinese = {猜想}{猜想} + , tchinese = {猜想}{猜想} + , japanese = {予想}{予想} + , russian = {Гипотеза}{Гипотеза} + } + , Crefname = { + , english = {Conjecture}{Conjecture} + , french = [La]{Conjecture}[Les]{Conjecture} + , ngerman = {Vermutung}{Vermutung} + , italian = [La]{Congettura}[Le]{Congettura} + , portuguese = [A]{Conjetura}[As]{Conjetura} + , brazilian = [A]{Conjectura}[As]{Conjectura} + , spanish = [La]{Conjetura}[Las]{Conjetura} + , schinese = {猜想}{猜想} + , tchinese = {猜想}{猜想} + , japanese = {予想}{予想} + , russian = {Гипотеза}{Гипотеза} + } + } + +\NameTheorem { convention } + { + , heading = { + , english = Convention + , french = Convention + , ngerman = Konvention + , italian = Convenzione + , portuguese = Convenção + , brazilian = Convenção + , spanish = Convención + , schinese = 约定 + , tchinese = 約定 + , japanese = 慣例 + , russian = Конвенция + } + , crefname = { + , english = {Convention}{Convention} + , french = [la]{Convention}[les]{Convention} + , ngerman = {Konvention}{Konvention} + , italian = [la]{Convenzione}[le]{Convenzione} + , portuguese = [a]{Convenção}[as]{Convenção} + , brazilian = [a]{Convenção}[as]{Convenção} + , spanish = [la]{Convención}[las]{Convención} + , schinese = {约定}{约定} + , tchinese = {約定}{約定} + , japanese = {慣例}{慣例} + , russian = {Конвенция}{Конвенция} + } + , Crefname = { + , english = {Convention}{Convention} + , french = [La]{Convention}[Les]{Convention} + , ngerman = {Konvention}{Konvention} + , italian = [La]{Convenzione}[Le]{Convenzione} + , portuguese = [A]{Convenção}[As]{Convenção} + , brazilian = [A]{Convenção}[As]{Convenção} + , spanish = [La]{Convención}[Las]{Convención} + , schinese = {约定}{约定} + , tchinese = {約定}{約定} + , japanese = {慣例}{慣例} + , russian = {Конвенция}{Конвенция} + } + } + +\NameTheorem { corollary } + { + , heading = { + , english = Corollary + , french = Corollaire + , ngerman = Korollar + , italian = Corollario + , portuguese = Corolário + , brazilian = Corolário + , spanish = Corolario + , schinese = 推论 + , tchinese = 推論 + , japanese = 系 + , russian = Следствие + } + , crefname = { + , english = {Corollary}{Corollary} + , french = [le]{Corollaire}[les]{Corollaire} + , ngerman = {Korollar}{Korollar} + , italian = [il]{Corollario}[i]{Corollario} + , portuguese = [o]{Corolário}[os]{Corolário} + , brazilian = [o]{Corolário}[os]{Corolário} + , spanish = [el]{Corolario}[los]{Corolario} + , schinese = {推论}{推论} + , tchinese = {推論}{推論} + , japanese = {系}{系} + , russian = {Следствие}{Следствие} + } + , Crefname = { + , english = {Corollary}{Corollary} + , french = [Le]{Corollaire}[Les]{Corollaire} + , ngerman = {Korollar}{Korollar} + , italian = [Il]{Corollario}[I]{Corollario} + , portuguese = [O]{Corolário}[Os]{Corolário} + , brazilian = [O]{Corolário}[Os]{Corolário} + , spanish = [El]{Corolario}[Los]{Corolario} + , schinese = {推论}{推论} + , tchinese = {推論}{推論} + , japanese = {系}{系} + , russian = {Следствие}{Следствие} + } + } + +\NameTheorem { definition } + { + , heading = { + , english = Definition + , french = Définition + , ngerman = Definition + , italian = Definizione + , portuguese = Definição + , brazilian = Definição + , spanish = Definición + , schinese = 定义 + , tchinese = 定義 + , japanese = 定義 + , russian = Определение + } + , crefname = { + , english = {Definition}{Definition} + , french = [la]{Définition}[les]{Définition} + , ngerman = {Definition}{Definition} + , italian = [la]{Definizione}[le]{Definizione} + , portuguese = [a]{Definição}[as]{Definição} + , brazilian = [a]{Definição}[as]{Definição} + , spanish = [la]{Definición}[las]{Definición} + , schinese = {定义}{定义} + , tchinese = {定義}{定義} + , japanese = {定義}{定義} + , russian = {Определение}{Определение} + } + , Crefname = { + , english = {Definition}{Definition} + , french = [La]{Définition}[Les]{Définition} + , ngerman = {Definition}{Definition} + , italian = [La]{Definizione}[Le]{Definizione} + , portuguese = [A]{Definição}[As]{Definição} + , brazilian = [A]{Definição}[As]{Definição} + , spanish = [La]{Definición}[Las]{Definición} + , schinese = {定义}{定义} + , tchinese = {定義}{定義} + , japanese = {定義}{定義} + , russian = {Определение}{Определение} + } + } + +\NameTheorem { example } + { + , heading = { + , english = Example + , french = Exemple + , ngerman = Beispiel + , italian = Esempio + , portuguese = Exemplo + , brazilian = Exemplo + , spanish = Ejemplo + , schinese = 例 + , tchinese = 例 + , japanese = 例 + , russian = Пример + } + , crefname = { + , english = {Example}{Example} + , french = [l']{Example}[les]{Example} + , ngerman = {Beispiel}{Beispiel} + , italian = [l']{Esempio}[gli]{Esempio} + , portuguese = [o]{Exemplo}[os]{Exemplo} + , brazilian = [o]{Exemplo}[os]{Exemplo} + , spanish = [el]{Ejemplo}[los]{Ejemplo} + , schinese = {例}{例} + , tchinese = {例}{例} + , japanese = {例}{例} + , russian = {Пример}{Пример} + } + , Crefname = { + , english = {Example}{Example} + , french = [L']{Example}[Les]{Example} + , ngerman = {Beispiel}{Beispiel} + , italian = [L']{Esempio}[Gli]{Esempio} + , portuguese = [O]{Exemplo}[Os]{Exemplo} + , brazilian = [O]{Exemplo}[Os]{Exemplo} + , spanish = [El]{Ejemplo}[Los]{Ejemplo} + , schinese = {例}{例} + , tchinese = {例}{例} + , japanese = {例}{例} + , russian = {Пример}{Пример} + } + } + +\NameTheorem { exercise } + { + , heading = { + , english = Exercise + , french = Exercice + , ngerman = Übung + , italian = Esercizio + , portuguese = Exercício + , brazilian = Exercício + , spanish = Ejercicio + , schinese = 练习 + , tchinese = 練習 + , japanese = 練習 + , russian = Упражнение + } + , crefname = { + , english = {Exercise}{Exercise} + , french = [l']{Exercice}[les]{Exercice} + , ngerman = {Übung}{Übung} + , italian = [l']{Esercizio}[gli]{Esercizio} + , portuguese = [o]{Exercício}[os]{Exercício} + , brazilian = [o]{Exercício}[os]{Exercício} + , spanish = [el]{Ejercicio}[los]{Ejercicio} + , schinese = {练习}{练习} + , tchinese = {練習}{練習} + , japanese = {練習}{練習} + , russian = {Упражнение}{Упражнение} + } + , Crefname = { + , english = {Exercise}{Exercise} + , french = [L']{Exercice}[Les]{Exercice} + , ngerman = {Übung}{Übung} + , italian = [L']{Esercizio}[Gli]{Esercizio} + , portuguese = [O]{Exercício}[Os]{Exercício} + , brazilian = [O]{Exercício}[Os]{Exercício} + , spanish = [El]{Ejercicio}[Los]{Ejercicio} + , schinese = {练习}{练习} + , tchinese = {練習}{練習} + , japanese = {練習}{練習} + , russian = {Упражнение}{Упражнение} + } + } + +\NameTheorem { fact } + { + , heading = { + , english = Fact + , french = Fait + , ngerman = Fakt + , italian = Fatto + , portuguese = Facto + , brazilian = Fato + , spanish = Hecho + , schinese = 事实 + , tchinese = 事實 + , japanese = 事実 + , russian = Факт + } + , crefname = { + , english = {Fact}{Fact} + , french = [le]{Fait}[les]{Fait} + , ngerman = {Fakt}{Fakt} + , italian = [il]{Fatto}[i]{Fatto} + , portuguese = [o]{Facto}[os]{Facto} + , brazilian = [o]{Fato}[os]{Fato} + , spanish = [el]{Hecho}[los]{Hecho} + , schinese = {事实}{事实} + , tchinese = {事實}{事實} + , japanese = {事実}{事実} + , russian = {Факт}{Факт} + } + , Crefname = { + , english = {Fact}{Fact} + , french = [Le]{Fait}[Les]{Fait} + , ngerman = {Fakt}{Fakt} + , italian = [Il]{Fatto}[I]{Fatto} + , portuguese = [O]{Facto}[Os]{Facto} + , brazilian = [O]{Fato}[Os]{Fato} + , spanish = [El]{Hecho}[Los]{Hecho} + , schinese = {事实}{事实} + , tchinese = {事實}{事實} + , japanese = {事実}{事実} + , russian = {Факт}{Факт} + } + } + +\NameTheorem { hypothesis } + { + , heading = { + , english = Hypothesis + , french = Hypothèse + , ngerman = Hypothese + , italian = Ipotesi + , portuguese = Hipótese + , brazilian = Hipótese + , spanish = Hipótesis + , schinese = 假设 + , tchinese = 假設 + , japanese = 仮設 + , russian = Гипотеза + } + , crefname = { + , english = {Hypothesis}{Hypothesis} + , french = [l']{Hypothèse}[les]{Hypothèse} + , ngerman = {Hypothese}{Hypothese} + , italian = [l']{Ipotesi}[le]{Ipotesi} + , portuguese = [a]{Hipótese}[as]{Hipótese} + , brazilian = [a]{Hipótese}[as]{Hipótese} + , spanish = [la]{Hipótesis}[las]{Hipótesis} + , schinese = {假设}{假设} + , tchinese = {假設}{假設} + , japanese = {仮設}{仮設} + , russian = {Гипотеза}{Гипотеза} + } + , Crefname = { + , english = {Hypothesis}{Hypothesis} + , french = [L']{Hypothèse}[Les]{Hypothèse} + , ngerman = {Hypothese}{Hypothese} + , italian = [L']{Ipotesi}[Le]{Ipotesi} + , portuguese = [A]{Hipótese}[As]{Hipótese} + , brazilian = [A]{Hipótese}[As]{Hipótese} + , spanish = [La]{Hipótesis}[Las]{Hipótesis} + , schinese = {假设}{假设} + , tchinese = {假設}{假設} + , japanese = {仮設}{仮設} + , russian = {Гипотеза}{Гипотеза} + } + } + +\NameTheorem { lemma } + { + , heading = { + , english = Lemma + , french = Lemme + , ngerman = Lemma + , italian = Lemma + , portuguese = Lema + , brazilian = Lema + , spanish = Lema + , schinese = 引理 + , tchinese = 引理 + , japanese = 補題 + , russian = Лемма + } + , crefname = { + , english = {Lemma}{Lemma} + , french = [le]{Lemme}[les]{Lemme} + , ngerman = {Lemma}{Lemma} + , italian = [il]{Lemma}[i]{Lemma} + , portuguese = [o]{Lema}[os]{Lema} + , brazilian = [o]{Lema}[os]{Lema} + , spanish = [el]{Lema}[las]{Lema} + , schinese = {引理}{引理} + , tchinese = {引理}{引理} + , japanese = {補題}{補題} + , russian = {Лемма}{Лемма} + } + , Crefname = { + , english = {Lemma}{Lemma} + , french = [Le]{Lemme}[Les]{Lemme} + , ngerman = {Lemma}{Lemma} + , italian = [Il]{Lemma}[I]{Lemma} + , portuguese = [O]{Lema}[Os]{Lema} + , brazilian = [O]{Lema}[Os]{Lema} + , spanish = [el]{Lema}[las]{Lema} + , schinese = {引理}{引理} + , tchinese = {引理}{引理} + , japanese = {補題}{補題} + , russian = {Лемма}{Лемма} + } + } + +\NameTheorem { notation } + { + , heading = { + , english = Notation + , french = Notation + , ngerman = Notation + , italian = Notazione + , portuguese = Notação + , brazilian = Notação + , spanish = Notación + , schinese = 记号 + , tchinese = 記號 + , japanese = 記法 + , russian = Нотация + } + , crefname = { + , english = {Notation}{Notation} + , french = [la]{Notation}[les]{Notation} + , ngerman = {Notation}{Notation} + , italian = [la]{Notazione}[le]{Notazione} + , portuguese = [a]{Notação}[as]{Notação} + , brazilian = [a]{Notação}[as]{Notação} + , spanish = [la]{Notación}[las]{Notación} + , schinese = {记号}{记号} + , tchinese = {記號}{記號} + , japanese = {記法}{記法} + , russian = {Нотация}{Нотация} + } + , Crefname = { + , english = {Notation}{Notation} + , french = [La]{Notation}[Les]{Notation} + , ngerman = {Notation}{Notation} + , italian = [La]{Notazione}[Le]{Notazione} + , portuguese = [A]{Notação}[As]{Notação} + , brazilian = [A]{Notação}[As]{Notação} + , spanish = [La]{Notación}[Las]{Notación} + , schinese = {记号}{记号} + , tchinese = {記號}{記號} + , japanese = {記法}{記法} + , russian = {Нотация}{Нотация} + } + } + +\NameTheorem { observation } + { + , heading = { + , english = Observation + , french = Observation + , ngerman = Beobachtung + , italian = Osservazione + , portuguese = Observação + , brazilian = Observação + , spanish = Observación + , schinese = 观察 + , tchinese = 觀察 + , japanese = 観察 + , russian = Наблюдение + } + , crefname = { + , english = {Observation}{Observation} + , french = [la]{Observation}[les]{Observation} + , ngerman = {Beobachtung}{Beobachtung} + , italian = [l']{Osservazione}[le]{Osservazione} + , portuguese = [a]{Observação}[as]{Observação} + , brazilian = [a]{Observação}[as]{Observação} + , spanish = [la]{Observación}[las]{Observación} + , schinese = {观察}{观察} + , tchinese = {觀察}{觀察} + , japanese = {観察}{観察} + , russian = {Наблюдение}{Наблюдение} + } + , Crefname = { + , english = {Observation}{Observation} + , french = [La]{Observation}[Les]{Observation} + , ngerman = {Beobachtung}{Beobachtung} + , italian = [L']{Osservazione}[Le]{Osservazione} + , portuguese = [A]{Observação}[As]{Observação} + , brazilian = [A]{Observação}[As]{Observação} + , spanish = [La]{Observación}[Las]{Observación} + , schinese = {观察}{观察} + , tchinese = {觀察}{觀察} + , japanese = {観察}{観察} + , russian = {Наблюдение}{Наблюдение} + } + } + +\NameTheorem { postulate } + { + , heading = { + , english = Postulate + , french = Postulat + , ngerman = Postulat + , italian = Postulato + , portuguese = Postulado + , brazilian = Postulado + , spanish = Postulado + , schinese = 公设 + , tchinese = 公設 + , japanese = 公準 + , russian = Постулат + } + , crefname = { + , english = {Postulate}{Postulate} + , french = [le]{Postulat}[les]{Postulat} + , ngerman = {Postulat}{Postulat} + , italian = [il]{Postulato}[i]{Postulato} + , portuguese = [o]{Postulado}[os]{Postulado} + , brazilian = [o]{Postulado}[os]{Postulado} + , spanish = [el]{Postulado}[los]{Postulado} + , schinese = {公设}{公设} + , tchinese = {公設}{公設} + , japanese = {公準}{公準} + , russian = {Постулат}{Постулат} + } + , Crefname = { + , english = {Postulate}{Postulate} + , french = [Le]{Postulat}[Les]{Postulat} + , ngerman = {Postulat}{Postulat} + , italian = [Il]{Postulato}[I]{Postulato} + , portuguese = [O]{Postulado}[Os]{Postulado} + , brazilian = [O]{Postulado}[Os]{Postulado} + , spanish = [El]{Postulado}[Los]{Postulado} + , schinese = {公设}{公设} + , tchinese = {公設}{公設} + , japanese = {公準}{公準} + , russian = {Постулат}{Постулат} + } + } + +\NameTheorem { problem } + { + , heading = { + , english = Problem + , french = Problème + , ngerman = Problem + , italian = Problema + , portuguese = Problema + , brazilian = Problema + , spanish = Problema + , schinese = 问题 + , tchinese = 問題 + , japanese = 問題 + , russian = Проблема + } + , crefname = { + , english = {Problem}{Problem} + , french = [le]{Problème}[les]{Problème} + , ngerman = {Problem}{Problem} + , italian = [il]{Problema}[i]{Problema} + , portuguese = [o]{Problema}[os]{Problema} + , brazilian = [o]{Problema}[os]{Problema} + , spanish = [el]{Problema}[los]{Problema} + , schinese = {问题}{问题} + , tchinese = {問題}{問題} + , japanese = {問題}{問題} + , russian = {Проблема}{Проблема} + } + , Crefname = { + , english = {Problem}{Problem} + , french = [Le]{Problème}[Les]{Problème} + , ngerman = {Problem}{Problem} + , italian = [Il]{Problema}[I]{Problema} + , portuguese = [O]{Problema}[Os]{Problema} + , brazilian = [O]{Problema}[Os]{Problema} + , spanish = [El]{Problema}[Los]{Problema} + , schinese = {问题}{问题} + , tchinese = {問題}{問題} + , japanese = {問題}{問題} + , russian = {Проблема}{Проблема} + } + } + +\NameTheorem { property } + { + , heading = { + , english = Property + , french = Propriété + , ngerman = Eigenschaft + , italian = Proprietà + , portuguese = Propriedade + , brazilian = Propriedade + , spanish = Propiedad + , schinese = 性质 + , tchinese = 性質 + , japanese = 性質 + , russian = Имущество + } + , crefname = { + , english = {Property}{Property} + , french = [la]{Propriété}[les]{Propriété} + , ngerman = {Eigenschaft}{Eigenschaft} + , italian = [la]{Proprietà}[le]{Proprietà} + , portuguese = [a]{Propriedade}[as]{Propriedade} + , brazilian = [a]{Propriedade}[as]{Propriedade} + , spanish = [la]{Propiedad}[las]{Propiedad} + , schinese = {性质}{性质} + , tchinese = {性質}{性質} + , japanese = {性質}{性質} + , russian = {Имущество}{Имущество} + } + , Crefname = { + , english = {Property}{Property} + , french = [La]{Propriété}[Les]{Propriété} + , ngerman = {Eigenschaft}{Eigenschaft} + , italian = [La]{Proprietà}[Le]{Proprietà} + , portuguese = [A]{Propriedade}[As]{Propriedade} + , brazilian = [A]{Propriedade}[As]{Propriedade} + , spanish = [La]{Propiedad}[Las]{Propiedad} + , schinese = {性质}{性质} + , tchinese = {性質}{性質} + , japanese = {性質}{性質} + , russian = {Имущество}{Имущество} + } + } + +\NameTheorem { proposition } + { + , heading = { + , english = Proposition + , french = Proposition + , ngerman = Proposition + , italian = Proposizione + , portuguese = Proposição + , brazilian = Proposição + , spanish = Proposición + , schinese = 命题 + , tchinese = 命題 + , japanese = 命題 + , russian = Предложение + } + , crefname = { + , english = {Proposition}{Proposition} + , french = [la]{Proposition}[les]{Proposition} + , ngerman = {Proposition}{Proposition} + , italian = [la]{Proposizione}[le]{Proposizione} + , portuguese = [a]{Proposição}[as]{Proposição} + , brazilian = [a]{Proposição}[as]{Proposição} + , spanish = [la]{Proposición}[las]{Proposición} + , schinese = {命题}{命题} + , tchinese = {命題}{命題} + , japanese = {命題}{命題} + , russian = {Предложение}{Предложение} + } + , Crefname = { + , english = {Proposition}{Proposition} + , french = [La]{Proposition}[Les]{Proposition} + , ngerman = {Proposition}{Proposition} + , italian = [La]{Proposizione}[Le]{Proposizione} + , portuguese = [A]{Proposição}[As]{Proposição} + , brazilian = [A]{Proposição}[As]{Proposição} + , spanish = [La]{Proposición}[Las]{Proposición} + , schinese = {命题}{命题} + , tchinese = {命題}{命題} + , japanese = {命題}{命題} + , russian = {Предложение}{Предложение} + } + } + +\NameTheorem { question } + { + , heading = { + , english = Question + , french = Question + , ngerman = Frage + , italian = Domanda + , portuguese = Pergunta + , brazilian = Pergunta + , spanish = Pregunta + , schinese = 问题 + , tchinese = 問題 + , japanese = 問題 + , russian = Вопрос + } + , crefname = { + , english = {Question}{Question} + , french = [la]{Question}[les]{Question} + , ngerman = {Frage}{Frage} + , italian = [la]{Domanda}[le]{Domanda} + , portuguese = [a]{Pergunta}[as]{Pergunta} + , brazilian = [a]{Pergunta}[as]{Pergunta} + , spanish = [la]{Pregunta}[las]{Pregunta} + , schinese = {问题}{问题} + , tchinese = {問題}{問題} + , japanese = {問題}{問題} + , russian = {Вопрос}{Вопрос} + } + , Crefname = { + , english = {Question}{Question} + , french = [La]{Question}[Les]{Question} + , ngerman = {Frage}{Frage} + , italian = [La]{Domanda}[Le]{Domanda} + , portuguese = [A]{Pergunta}[As]{Pergunta} + , brazilian = [A]{Pergunta}[As]{Pergunta} + , spanish = [La]{Pregunta}[Las]{Pregunta} + , schinese = {问题}{问题} + , tchinese = {問題}{問題} + , japanese = {問題}{問題} + , russian = {Вопрос}{Вопрос} + } + } + +\NameTheorem { remark } + { + , heading = { + , english = Remark + , french = Remarque + , ngerman = Bemerkung + , italian = Commento + , portuguese = Comentário + , brazilian = Comentário + , spanish = Comentario + , schinese = 备注 + , tchinese = 備註 + , japanese = 注釈 + , russian = Замечание + } + , crefname = { + , english = {Remark}{Remark} + , french = [la]{Remarque}[les]{Remarque} + , ngerman = {Bemerkung}{Bemerkung} + , italian = [il]{Commento}[i]{Commento} + , portuguese = [o]{Comentário}[os]{Comentário} + , brazilian = [o]{Comentário}[os]{Comentário} + , spanish = [el]{Comentario}[los]{Comentario} + , schinese = {备注}{备注} + , tchinese = {備註}{備註} + , japanese = {注釈}{注釈} + , russian = {Замечание}{Замечание} + } + , Crefname = { + , english = {Remark}{Remark} + , french = [La]{Remarque}[Les]{Remarque} + , ngerman = {Bemerkung}{Bemerkung} + , italian = [Il]{Commento}[I]{Commento} + , portuguese = [O]{Comentário}[Os]{Comentário} + , brazilian = [O]{Comentário}[Os]{Comentário} + , spanish = [El]{Comentario}[Los]{Comentario} + , schinese = {备注}{备注} + , tchinese = {備註}{備註} + , japanese = {注釈}{注釈} + , russian = {Замечание}{Замечание} + } + } + +\NameTheorem { theorem } + { + , heading = { + , english = Theorem + , french = Théorème + , ngerman = Satz + , italian = Teorema + , portuguese = Teorema + , brazilian = Teorema + , spanish = Teorema + , schinese = 定理 + , tchinese = 定理 + , japanese = 定理 + , russian = Теорема + } + , crefname = { + , english = {Theorem}{Theorem} + , french = [le]{Théorème}[les]{Théorème} + , ngerman = {Satz}{Satz} + , italian = [il]{Teorema}[i]{Teorema} + , portuguese = [o]{Teorema}[os]{Teorema} + , brazilian = [o]{Teorema}[os]{Teorema} + , spanish = [el]{Teorema}[los]{Teorema} + , schinese = {定理}{定理} + , tchinese = {定理}{定理} + , japanese = {定理}{定理} + , russian = {Теорема}{Теорема} + } + , Crefname = { + , english = {Theorem}{Theorem} + , french = [Le]{Théorème}[Les]{Théorème} + , ngerman = {Satz}{Satz} + , italian = [Il]{Teorema}[I]{Teorema} + , portuguese = [O]{Teorema}[Os]{Teorema} + , brazilian = [O]{Teorema}[Os]{Teorema} + , spanish = [El]{Teorema}[Los]{Teorema} + , schinese = {定理}{定理} + , tchinese = {定理}{定理} + , japanese = {定理}{定理} + , russian = {Теорема}{Теорема} + } + } + +\NameTheorem { definition-proposition } + { + , heading = { + , english = Definition-Proposition + , french = Définition-Proposition + , ngerman = Definition-Proposition + , italian = Definizione-Proposizione + , portuguese = Definição-Proposição + , brazilian = Definição-Proposição + , spanish = Definición-Proposición + , schinese = 定义-命题 + , tchinese = 定義-命題 + , japanese = 定義-命題 + , russian = Определение-Предложение + } + , crefname = { + , english = {Definition-Proposition}{Definition-Proposition} + , french = [la]{Définition-Proposition}[les]{Définition-Proposition} + , ngerman = {Definition-Proposition}{Definition-Proposition} + , italian = [la]{Definizione-Proposizione}[le]{Definizione-Proposizione} + , portuguese = [a]{Definição-Proposição}[as]{Definição-Proposição} + , brazilian = [a]{Definição-Proposição}[as]{Definição-Proposição} + , spanish = [la]{Definición-Proposición}[las]{Definición-Proposición} + , schinese = {定义-命题}{定义-命题} + , tchinese = {定義-命題}{定義-命題} + , japanese = {定義-命題}{定義-命題} + , russian = {Определение-Предложение}{Определение-Предложение} + } + , Crefname = { + , english = {Definition-Proposition}{Definition-Proposition} + , french = [La]{Définition-Proposition}[Les]{Définition-Proposition} + , ngerman = {Definition-Proposition}{Definition-Proposition} + , italian = [La]{Definizione-Proposizione}[Le]{Definizione-Proposizione} + , portuguese = [A]{Definição-Proposição}[As]{Definição-Proposição} + , brazilian = [A]{Definição-Proposição}[As]{Definição-Proposição} + , spanish = [La]{Definición-Proposición}[Las]{Definición-Proposición} + , schinese = {定义-命题}{定义-命题} + , tchinese = {定義-命題}{定義-命題} + , japanese = {定義-命題}{定義-命題} + , russian = {Определение-Предложение}{Определение-Предложение} + } + } + +\NameTheorem { definition-theorem } + { + , heading = { + , english = Definition-Theorem + , french = Définition-Théorème + , ngerman = Definition-Satz + , italian = Definizione-Teorema + , portuguese = Definição-Teorema + , brazilian = Definição-Teorema + , spanish = Definición-Teorema + , schinese = 定义-定理 + , tchinese = 定義-定理 + , japanese = 定義-定理 + , russian = Определение-Теорема + } + , crefname = { + , english = {Definition-Theorem}{Definition-Theorem} + , french = [la]{Définition-Théorème}[les]{Définition-Théorème} + , ngerman = {Definition-Satz}{Definition-Satz} + , italian = [la]{Definizione-Teorema}[le]{Definizione-Teorema} + , portuguese = [a]{Definição-Teorema}[as]{Definição-Teorema} + , brazilian = [a]{Definição-Teorema}[as]{Definição-Teorema} + , spanish = [la]{Definición-Teorema}[las]{Definición-Teorema} + , schinese = {定义-定理}{定义-定理} + , tchinese = {定義-定理}{定義-定理} + , japanese = {定義-定理}{定義-定理} + , russian = {Определение-Теорема}{Определение-Теорема} + } + , Crefname = { + , english = {Definition-Theorem}{Definition-Theorem} + , french = [La]{Définition-Théorème}[Les]{Définition-Théorème} + , ngerman = {Definition-Satz}{Definition-Satz} + , italian = [La]{Definizione-Teorema}[Le]{Definizione-Teorema} + , portuguese = [A]{Definição-Teorema}[As]{Definição-Teorema} + , brazilian = [A]{Definição-Teorema}[As]{Definição-Teorema} + , spanish = [La]{Definición-Teorema}[Las]{Definición-Teorema} + , schinese = {定义-定理}{定义-定理} + , tchinese = {定義-定理}{定義-定理} + , japanese = {定義-定理}{定義-定理} + , russian = {Определение-Теорема}{Определение-Теорема} + } + } +% + +\endinput \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/projlib/ProjLib.ins b/Master/texmf-dist/source/latex/projlib/ProjLib.ins new file mode 100644 index 00000000000..ca73cff4465 --- /dev/null +++ b/Master/texmf-dist/source/latex/projlib/ProjLib.ins @@ -0,0 +1,74 @@ +%% +%% 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 +%% or (at your option) any later version. The latest version of this +%% license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% + +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\begingroup +\catcode`\^^M=\active% +\obeyspaces% +\gdef\copyright{% +\ds@heading% This is file... generated with the docstrip utility. + +Copyright (C) 2021-2022 by Jinwen XU + +This is part of the ProjLib Toolkit. +}% +\gdef\lppllicense{% + +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. +}% +\endgroup + +\def\mypreamble{\copyright\lppllicense} +\usepreamble\mypreamble + +\generate{\file{ProjLib.sty}{\from{ProjLib.dtx}{ProjLib}}} +\generate{\file{projlib-author.sty}{\from{ProjLib.dtx}{projlib-author}}} +\generate{\file{projlib-datetime.sty}{\from{ProjLib.dtx}{projlib-datetime}}} +\generate{\file{projlib-draft.sty}{\from{ProjLib.dtx}{projlib-draft}}} +\generate{\file{projlib-font.sty}{\from{ProjLib.dtx}{projlib-font}}} +\generate{\file{projlib-language.sty}{\from{ProjLib.dtx}{projlib-language}}} +\generate{\file{projlib-logo.sty}{\from{ProjLib.dtx}{projlib-logo}}} +\generate{\file{projlib-math.sty}{\from{ProjLib.dtx}{projlib-math}}} +\generate{\file{projlib-paper.sty}{\from{ProjLib.dtx}{projlib-paper}}} +\generate{\file{projlib-theorem.sty}{\from{ProjLib.dtx}{projlib-theorem}}} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* files into a directory searched by TeX: *} +\Msg{* *} +\Msg{* ProjLib.sty *} +\Msg{* projlib-author.sty *} +\Msg{* projlib-datetime.sty *} +\Msg{* projlib-draft.sty *} +\Msg{* projlib-font.sty *} +\Msg{* projlib-language.sty *} +\Msg{* projlib-logo.sty *} +\Msg{* projlib-math.sty *} +\Msg{* projlib-paper.sty *} +\Msg{* projlib-theorem.sty *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/projlib/ProjLib.sty b/Master/texmf-dist/tex/latex/projlib/ProjLib.sty index 0e0cdd3666c..cf262b3fe19 100644 --- a/Master/texmf-dist/tex/latex/projlib/ProjLib.sty +++ b/Master/texmf-dist/tex/latex/projlib/ProjLib.sty @@ -1,29 +1,64 @@ +%% +%% This is file `ProjLib.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} - {2022/03/09} {} + {2022/03/11} {} {Collective interface of the ProjLib toolkit} \keys_define:nn { ProjLib } { - , unknown .code:n = { - \PassOptionsToPackage { \CurrentOption } { projlib-language } - \PassOptionsToPackage { \CurrentOption } { projlib-author } - \PassOptionsToPackage { \CurrentOption } { projlib-datetime } - \PassOptionsToPackage { \CurrentOption } { projlib-draft } - \PassOptionsToPackage { \CurrentOption } { projlib-font } - \PassOptionsToPackage { \CurrentOption } { projlib-logo } - \PassOptionsToPackage { \CurrentOption } { projlib-math } - \PassOptionsToPackage { \CurrentOption } { projlib-paper } - \PassOptionsToPackage { \CurrentOption } { projlib-theorem } - } + , author .bool_set:N = \l__projlib_main_author_bool + , author .initial:n = { false } + , author-block .bool_set:N = \l__projlib_main_author_bool + , author~block .bool_set:N = \l__projlib_main_author_bool + , author block .bool_set:N = \l__projlib_main_author_bool + , ams-fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , ams-fashion .initial:n = { false } + , ams~fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , ams fashion .bool_set:N = \l__projlib_main_amsfashion_bool + , unknown .code:n = { + \PassOptionsToPackage { \CurrentOption } { projlib-language } + \PassOptionsToPackage { \CurrentOption } { projlib-author } + \PassOptionsToPackage { \CurrentOption } { projlib-datetime } + \PassOptionsToPackage { \CurrentOption } { projlib-draft } + \PassOptionsToPackage { \CurrentOption } { projlib-font } + \PassOptionsToPackage { \CurrentOption } { projlib-logo } + \PassOptionsToPackage { \CurrentOption } { projlib-math } + \PassOptionsToPackage { \CurrentOption } { projlib-paper } + \PassOptionsToPackage { \CurrentOption } { projlib-theorem } + } } \ProcessKeysOptions { ProjLib } +\bool_if:NT \l__projlib_main_amsfashion_bool + { + \bool_set_true:N \l__projlib_main_author_bool + \PassOptionsToPackage { amsfashion } { projlib-author } + } + \RequirePackage { projlib-language } -\RequirePackage { projlib-author } +\bool_if:NT \l__projlib_main_author_bool + { + \RequirePackage { projlib-author } + } \RequirePackage { projlib-datetime } \RequirePackage { projlib-draft } \RequirePackage { projlib-font } diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-author.sty b/Master/texmf-dist/tex/latex/projlib/projlib-author.sty index 2ad44ff6a3e..e3929df4e51 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-author.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-author.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-author.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-author} - {2022/03/09} {} + {2022/03/11} {} {Enhanced author information block} \keys_define:nn { projlib-author } @@ -35,7 +52,6 @@ \dim_set:Nn \g__projlib_author_length_sep_dim { 0.5 \baselineskip } \dim_set:Nn \g__projlib_author_length_aftersep_dim { 0.3 \baselineskip } - \bool_new:N \g__projlib_author_affil_already_exist_bool \NewCommandCopy \projlib_author_backup_author:w \author @@ -98,8 +114,9 @@ \RequirePackage { regexpatch } -\xpatchcmd { \@maketitle } { \begin{tabular}[t]{c} } {} {} { \FAIL } -\xpatchcmd { \@maketitle } { \end{tabular} } {} {} { \FAIL } +\xpatchcmd { \@maketitle } { \begin{tabular}[t]{c} } {} { + \xpatchcmd { \@maketitle } { \end{tabular} } {} {} {} +} {} \tl_set:cn {@author} {} @@ -176,7 +193,7 @@ \NewDocumentCommand \thanks { m } { - \tl_if_blank:eF { #1 } + \tl_if_blank:nF { #1 } { \hook_gput_code:nnn { cmd/@title/after } { projlib-author } { @@ -208,6 +225,7 @@ \bool_new:N \g__projlib_author_abstract_before_maketitle_bool \bool_gset_false:N \g__projlib_author_abstract_before_maketitle_bool + \msg_redirect_name:nnn { scontents } { unsupported-verbatim } { info } \RequirePackage{ scontents } \newenvsc{abstract}[store-env=projlib-author-abstract,print-env=false] @@ -243,7 +261,7 @@ \skip_vertical:n { \dim_eval:n { -1.7 \baselineskip } } } } - } {} { \FAIL } + } {} {} \makeatother \hook_gput_code:nnn { cmd/maketitle/before } { projlib-author } diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-datetime.sty b/Master/texmf-dist/tex/latex/projlib/projlib-datetime.sty index 07c1473171a..aa182abe7c0 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-datetime.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-datetime.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-datetime.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-datetime} - {2022/03/03} {} + {2022/03/11} {} {Convert numeric date-time string to natural language} \tl_new:N \g__projlib_datetime_input_format_tl @@ -72,7 +89,6 @@ \projlib_datetime_set_input_format:n { #1 } } - \seq_new:N \l__projlib_datetime_date_seq \cs_new_protected:Nn \projlib_datetime_text_superscript:n @@ -83,7 +99,6 @@ \group_end: } - \cs_new:Nn \__projlib_datetime_today:n { \str_case_e:nnF { \l__projlib_datetime_output_format_tl } @@ -146,10 +161,6 @@ \group_end: } -\ProvideDocumentCommand \Thedate {} { \ProjLibdate } -\ProvideDocumentCommand \TheDate {} { \ProjLibDate } - - \cs_new_protected:Nn \projlib_datetime_display_year_month_day:n { \__projlib_datetime_display_year_month_day:en { #1 } {} @@ -194,7 +205,6 @@ } \cs_generate_variant:Nn \__projlib_datetime_display_year_month_day:nn { en } - \cs_new_protected:Nn \projlib_datetime_display_month_day_year:n { \__projlib_datetime_display_month_day_year:en { #1 } {} @@ -239,7 +249,6 @@ } \cs_generate_variant:Nn \__projlib_datetime_display_month_day_year:nn { en } - \cs_new_protected:Nn \projlib_datetime_display_day_month_year:n { \__projlib_datetime_display_day_month_year:en { #1 } {} @@ -284,7 +293,6 @@ } \cs_generate_variant:Nn \__projlib_datetime_display_day_month_year:nn { en } - \cs_new_protected:Nn \__projlib_datetime_date_parse_year_month_day:n { \regex_match:nnTF { \A \d{4}-\d{1,2}(|-\d{1,2}) \Z } { #1 } @@ -382,26 +390,30 @@ } } -\NewDocumentCommand \ProjLibdate { O{} m } +\NewDocumentCommand \ProjLibdate { O{} m O{} } { \group_begin: - \keys_set:nn { projlib-datetime-command } { #1 } - \tl_set:Nn \l_tmpa_tl { #2 } + \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } + \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } + \tl_set:Nx \l_tmpa_tl { #2 } \regex_replace_all:nnN { \D } { - } \l_tmpa_tl - \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } {} + \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } {} \group_end: } -\NewDocumentCommand \ProjLibDate { O{} m } + \NewDocumentCommand \ProjLibDate { O{} m O{} } { \group_begin: - \keys_set:nn { projlib-datetime-command } { #1 } - \tl_set:Nn \l_tmpa_tl { #2 } + \tl_if_blank:eF { #1 } { \keys_set:nn { projlib-datetime-command } { #1 } } + \tl_if_blank:eF { #3 } { \keys_set:nn { projlib-datetime-command } { #3 } } + \tl_set:Nx \l_tmpa_tl { #2 } \regex_replace_all:nnN { \D } { - } \l_tmpa_tl - \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } { _uppercase } + \exp_args:Ne \__projlib_datetime_display_date_according_to_format:nn { \l_tmpa_tl } { _uppercase } \group_end: } +\ProvideDocumentCommand \Thedate {} { \ProjLibdate } +\ProvideDocumentCommand \TheDate {} { \ProjLibDate } \int_new:N \l__projlib_datetime_day_of_week_day_int \int_new:N \l__projlib_datetime_day_of_week_month_int @@ -463,7 +475,6 @@ } } - \cs_new_protected:Nn \projlib_datetime_display_week:n { \__projlib_datetime_display_week_according_to_format:en { #1 } {} @@ -481,7 +492,6 @@ } \cs_generate_variant:Nn \__projlib_datetime_display_week_according_to_format:nn { en } - \cs_new_protected:Nn \projlib_datetime_calculate_week_according_to_format:n { \cs_if_exist_use:c { __projlib_datetime_date_parse_ \__projlib_datetime_input_format_to_str: :n } { #1 } @@ -492,22 +502,6 @@ } -% For each language, there are 7 groups of functions: -% 1) \projlib_datetime_display_year_month_day_:nnn -% \projlib_datetime_display_year_month_day_uppercase_:nnn -% 2) \projlib_datetime_display_year_month_:nn -% \projlib_datetime_display_year_month_uppercase_:nn -% 3) \projlib_datetime_display_month_day_:nn -% \projlib_datetime_display_month_day_uppercase_:nn -% 4) \projlib_datetime_display_year_:n -% \projlib_datetime_display_year_uppercase_:n -% 5) \projlib_datetime_display_month_:n -% \projlib_datetime_display_month_uppercase_:n -% 6) \projlib_datetime_display_day_:n -% \projlib_datetime_display_day_uppercase_:n -% 7) \projlib_datetime_display_week_:n -% \projlib_datetime_display_week_uppercase_:n - \cs_new:Nn \projlib_datetime_display_year_month_day_english:nnn { \projlib_datetime_display_month_day_english:nn { #2 } { #3 } @@ -605,7 +599,6 @@ \projlib_datetime_display_week_english:n { #1 } } - \cs_new:Nn \projlib_datetime_display_year_month_day_french:nnn { \projlib_datetime_display_month_day_french:nn { #2 } { #3 } @@ -737,7 +730,6 @@ } { ??? } } - \cs_new:Nn \projlib_datetime_display_year_month_day_ngerman:nnn { \projlib_datetime_display_month_day_ngerman:nn { #2 } { #3 } @@ -847,7 +839,6 @@ \projlib_datetime_display_week_ngerman:n { #1 } } - \cs_new:Nn \projlib_datetime_display_year_month_day_italian:nnn { \projlib_datetime_display_month_day_italian:nn { #2 } { #3 } @@ -966,7 +957,6 @@ } { ??? } } - \cs_new:Nn \projlib_datetime_display_year_month_day_portuguese:nnn { \projlib_datetime_display_month_day_portuguese:nn { #2 } { #3 } @@ -1085,7 +1075,6 @@ } { ??? } } - \cs_new:Nn \projlib_datetime_display_year_month_day_brazilian:nnn { \projlib_datetime_display_month_day_brazilian:nn { #2 } { #3 } @@ -1204,7 +1193,6 @@ } { ??? } } - \cs_new:Nn \projlib_datetime_display_year_month_day_spanish:nnn { \projlib_datetime_display_month_day_spanish:nn { #2 } { #3 } @@ -1323,7 +1311,6 @@ } { ??? } } - \cs_new:Nn \projlib_datetime_display_year_month_day_schinese:nnn { #1 年 #2 月 #3 日 @@ -1386,7 +1373,6 @@ \projlib_datetime_display_week_schinese:n { #1 } } - \cs_new:Nn \projlib_datetime_display_year_month_day_tchinese:nnn { #1 年 #2 月 #3 日 @@ -1449,7 +1435,6 @@ \projlib_datetime_display_week_tchinese:n { #1 } } - \cs_new:Nn \projlib_datetime_display_year_month_day_japanese:nnn { #1 年 #2 月 #3 日 @@ -1512,7 +1497,6 @@ \projlib_datetime_display_week_japanese:n { #1 } } - \cs_new:Nn \projlib_datetime_display_year_month_day_russian:nnn { \projlib_datetime_display_month_day_russian:nn { #2 } { #3 } diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-draft.sty b/Master/texmf-dist/tex/latex/projlib/projlib-draft.sty index 6c7fe818c7c..9c9fd22e01b 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-draft.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-draft.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-draft.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-draft} - {2022/02/24} {} + {2022/03/11} {} {Useful commands during draft stage} \keys_define:nn { projlib-draft } diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-font.sty b/Master/texmf-dist/tex/latex/projlib/projlib-font.sty index c308c1c66d7..50ffb4258c2 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-font.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-font.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-font.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-font} - {2022/03/01} {} + {2022/03/11} {} {Font selection and configuration} \keys_define:nn { projlib-font } @@ -31,6 +48,9 @@ } \ProcessKeysOptions { projlib-font } +\bool_new:N \g_projlib_font_already_set_bool +\bool_gset_false:N \g_projlib_font_already_set_bool + \RequirePackage { setspace } \cs_new:Nn \projlib_font_set_linespacing_latin:n @@ -55,26 +75,81 @@ \RequirePackage { lmodern } } \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool } \bool_if:NT \l__projlib_font_palatino_bool { - \RequirePackage { mathpazo } - \PassOptionsToPackage { defaultsups } { newpxtext } - \RequirePackage { newpxtext } - \cs_undefine:c { openbox } + \sys_if_engine_pdftex:TF + { + \RequirePackage { mathpazo } + \PassOptionsToPackage { defaultsups } { newpxtext } + \RequirePackage { newpxtext } + \cs_undefine:c { openbox } + \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, + Numbers = OldStyle ] + } + { + \setmainfont { TeXGyrePagellaX-Regular.otf } + [ + BoldFont = TeXGyrePagellaX-Bold.otf , + ItalicFont = TeXGyrePagellaX-Italic.otf , + BoldItalicFont = TeXGyrePagellaX-BoldItalic.otf, + ] + } + \setmathfont { texgyrepagella-math.otf } + } \projlib_font_set_linespacing_latin:n { \setstretch { 1.07 } } - \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + \bool_gset_true:N \g_projlib_font_already_set_bool } \bool_if:NT \l__projlib_font_times_bool { - \PassOptionsToPackage { defaultsups } { newtxtext } - \RequirePackage { newtxtext } - \RequirePackage { newtxmath } - \cs_undefine:c { openbox } + \sys_if_engine_pdftex:TF + { + \PassOptionsToPackage { defaultsups } { newtxtext } + \RequirePackage { newtxtext } + \RequirePackage { newtxmath } + \cs_undefine:c { openbox } + \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + } + { + \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } + \RequirePackage { unicode-math } + \defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX } + \bool_if:NTF \l__projlib_font_useosf_bool + { + \setmainfont { TeXGyreTermesX-Regular.otf } + [ + BoldFont = TeXGyreTermesX-Bold.otf , + ItalicFont = TeXGyreTermesX-Italic.otf , + BoldItalicFont = TeXGyreTermesX-BoldItalic.otf, + Numbers = OldStyle ] + } + { + \setmainfont { TeXGyreTermesX-Regular.otf } + [ + BoldFont = TeXGyreTermesX-Bold.otf , + ItalicFont = TeXGyreTermesX-Italic.otf , + BoldItalicFont = TeXGyreTermesX-BoldItalic.otf, + ] + } + \setmathfont { texgyretermes-math.otf } + } \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } - \bool_if:NT \l__projlib_font_useosf_bool { \useosf } + \bool_gset_true:N \g_projlib_font_already_set_bool } \bool_if:NT \l__projlib_font_garamond_bool @@ -87,7 +162,9 @@ \cs_undefine:c { openbox } \RequirePackage { ebgaramond-maths } \RequirePackage { ebgaramond } + \cs_undefine:c { Bbbk } \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool } \bool_if:NT \l__projlib_font_noto_bool @@ -98,7 +175,9 @@ } \RequirePackage { anyfontsize } \RequirePackage { notomath } + \cs_undefine:c { Bbbk } \projlib_font_set_linespacing_latin:n { \setstretch { 1.00 } } + \bool_gset_true:N \g_projlib_font_already_set_bool } \bool_if:NT \l__projlib_font_biolinum_bool @@ -133,10 +212,10 @@ } \projlib_font_set_linespacing_latin:n { \setstretch { 1.05 } } \RequirePackage [ italic, defaultmathsizes ] { mathastext } + \bool_gset_true:N \g_projlib_font_already_set_bool } -\RequirePackage { silence } -\WarningFilter { microtype } { Unable } +\PassOptionsToPackage { verbose = silent } { microtype } \RequirePackage { microtype } \endinput diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-language.sty b/Master/texmf-dist/tex/latex/projlib/projlib-language.sty index 4a67c6a018e..df1df41fd72 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-language.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-language.sty @@ -1,8 +1,25 @@ +%% +%% 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/09} {} + {2022/03/11} {} {Multi-language configuration} \clist_const:Nn \c__projlib_language_supported_clist @@ -126,7 +143,6 @@ } } - \cs_new:Nn \projlib_language_str_to_languagename:n { \str_case_e:nnF { \str_foldcase:n { #1 } } @@ -220,7 +236,6 @@ \PassOptionsToPackage { italian, brazilian, spanish, ngerman, french, english } { cleveref } \RequirePackage { babel } - \bool_if:NT \g__projlib_language_enabled_french_bool { \frenchsetup { PartNameFull = false } @@ -248,7 +263,6 @@ \babelprovide { schinese } \babelprovide { tchinese } - \NewCommandCopy \projlib_language_backup_today:n \today \tl_new:N \g_projlib_language_settings_common_tl @@ -356,7 +370,7 @@ \NewDocumentCommand \AddLanguageSetting { O{} m } { - \IfNoValueTF { #1 } + \tl_if_empty:nTF { #1 } { \tl_gput_right:Nn \g_projlib_language_settings_common_tl { #2 } } @@ -365,7 +379,6 @@ } } - \RequirePackage { setspace } \tl_new:N \g_projlib_language_linespacing_latin_tl @@ -446,7 +459,6 @@ \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 } @@ -478,7 +490,6 @@ \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 diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-logo.sty b/Master/texmf-dist/tex/latex/projlib/projlib-logo.sty index d9ffb5c1ed2..ee59a9e5f43 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-logo.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-logo.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-logo.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-logo} - {2022/02/24} {} + {2022/03/11} {} {The ProjLib logo} \keys_define:nn { projlib-logo } @@ -54,21 +71,6 @@ } } -% \RequirePackage { xcolor } -% \cs_new_protected:Nn \projlib_logo_generic:n -% { -% \group_begin: -% \normalfont -% \__projlib_logo_font: -% \textcolor { blue!55!cyan } { P } -% \textcolor { blue!45!cyan } { r } -% \textcolor { blue!30!cyan } { o } -% \textcolor { green!70!black!70 } { #1 } -% \textcolor { red!20!yellow } { L } -% \textcolor { red!40!yellow } { i } -% \textcolor { red!55!yellow } { b } -% \group_end: -% } \cs_new_protected:Nn \projlib_logo_generic:n { \group_begin: diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-math.sty b/Master/texmf-dist/tex/latex/projlib/projlib-math.sty index 977a4280038..04d1f190bd4 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-math.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-math.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-math.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-math} - {2022/02/26} {} + {2022/03/11} {} {Efficient math setup} \keys_define:nn { projlib-math } @@ -16,7 +33,6 @@ \PassOptionsToPackage { warnings-off = { mathtools-colon, mathtools-overbracket } } { unicode-math } \@ifpackageloaded { unicode-math } {} { \RequirePackage { amssymb } } - \msg_new:nnn { projlib-math } { operator-not-define } { The~math~operator~"\iow_char:N \\#1"~cannot~be~defined,~a~command~with~the~same~name~has~already~existed. } @@ -87,7 +103,6 @@ } } - \msg_new:nnn { projlib-math } { shortcut-not-define } { The~shortcut~"\iow_char:N \\#1"~cannot~be~defined,~a~command~with~the~same~name~has~already~existed. } @@ -190,45 +205,6 @@ } } -%=============================== -% -- Some possible operators -- -%=============================== -% \DefineOperator { ord, card, car, disc } [ style = \mathsf ] -% \DefineOperator { id, Id, Ker, Image = Im } [ style = \mathsf ] -% \DefineOperator { Orb, Stab, Fix } [ style = \mathsf ] -% \DefineOperator { Hom, Aut, End, Mat } [ style = \mathsf ] -% \DefineOperator { Spec, Spm, Ann } [ style = \mathsf ] -% \DefineOperator*{ Lim, Max, Min } [ style = \mathsf ] - -%=============================== -% -- Some possible shortcuts -- -%=============================== -% \DefineShortcut [ type = category, style = \mathbf ] -% { -% Set, Grp, Ring, Top -% } -% \DefineShortcut [ style = \mathbb ] -% { -% N, Z, Q, R, C, F, A -% } -% \DefineShortcut [ prefix = bb, style = \mathbb ] -% { -% A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z -% } -% \DefineShortcut [ prefix = { mf, frak }, style = \mathfrak ] -% { -% A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, -% a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z -% } -% \DefineShortcut [ prefix = { mc, cal }, style = \mathcal ] -% { -% A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z -% } -% \DefineShortcut [ prefix = { ms, scr }, style = \mathscr ] -% { -% A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z -% } - \endinput %% %% End of file `projlib-math.sty'. diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-paper.sty b/Master/texmf-dist/tex/latex/projlib/projlib-paper.sty index bb13bbe00a2..6835198f3a7 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-paper.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-paper.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-paper.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-paper} - {2022/03/09} {} + {2022/03/11} {} {Configuration of the paper style} \keys_define:nn { projlib-paper } diff --git a/Master/texmf-dist/tex/latex/projlib/projlib-theorem.sty b/Master/texmf-dist/tex/latex/projlib/projlib-theorem.sty index 092ca2f0ead..69d1ed3261d 100644 --- a/Master/texmf-dist/tex/latex/projlib/projlib-theorem.sty +++ b/Master/texmf-dist/tex/latex/projlib/projlib-theorem.sty @@ -1,8 +1,25 @@ +%% +%% This is file `projlib-theorem.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-theorem} - {2022/03/09} {} + {2022/03/11} {} {Configuration of theorem-like environments} \keys_define:nn { projlib-theorem } @@ -29,10 +46,9 @@ , complex-name .initial:n = { true } , complex~name .bool_set:N = \l__projlib_theorem_complexname_bool , complex name .bool_set:N = \l__projlib_theorem_complexname_bool - , simple-name .bool_set:N = \l__projlib_theorem_simplename_bool - , simple-name .initial:n = { false } - , simple~name .bool_set:N = \l__projlib_theorem_simplename_bool - , simple name .bool_set:N = \l__projlib_theorem_simplename_bool + , simple-name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool + , simple~name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool + , simple name .bool_set_inverse:N = \l__projlib_theorem_complexname_bool , no-preset-names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool , no-preset-names .initial:n = { false } , no~preset~names .bool_set_inverse:N = \l__projlib_theorem_presetname_bool @@ -41,7 +57,7 @@ } \ProcessKeysOptions { projlib-theorem } -\clist_const:Nn \c__projlib_theorem_supported_clist +\clist_const:Nn \c_projlib_theorem_supported_clist { assertion , assumption , @@ -65,6 +81,8 @@ question , remark , theorem , + definition-proposition , + definition-theorem , } \@ifclassloaded { beamer } @@ -86,20 +104,15 @@ \RequirePackage { projlib-language } -\bool_if:NF \l__projlib_theorem_complexname_bool - { - \PassOptionsToPackage { no preset names } { create-theorem } - } \RequirePackage { amsthm } \RequirePackage { create-theorem } - \bool_if:NF \l__projlib_theorem_no_theorems_bool { \bool_if:NTF \l__projlib_theorem_no_theorem_numbering_bool { - \exp_args:Nv \CreateTheorem { c__projlib_theorem_supported_clist } { numberless } + \exp_args:Nv \CreateTheorem { c_projlib_theorem_supported_clist } { numberless } } { \tl_if_blank:eTF \l__projlib_theorem_theorem_numbering_tl @@ -122,11 +135,10 @@ } } - \exp_args:Nv \CreateTheorem { c__projlib_theorem_supported_clist } { shared counter = theorem, quiet } + \exp_args:Nv \CreateTheorem { c_projlib_theorem_supported_clist } { shared counter = theorem, quiet } } } - \AddLanguageSetting [ schinese ] { \crefname { equation } { 式 } { 式 } @@ -222,11 +234,9 @@ \tl_gset:Nn { \crefrangeconjunction } { \nobreakspace a \nobreakspace } } - \bool_if:NF \l__projlib_theorem_presetname_bool { \endinput } \bool_if:NT \l__projlib_theorem_complexname_bool { \endinput } - \NameTheorem { assertion } { , heading = { @@ -1173,12 +1183,92 @@ } } +\NameTheorem { definition-proposition } + { + , heading = { + , english = Definition-Proposition + , french = Définition-Proposition + , ngerman = Definition-Proposition + , italian = Definizione-Proposizione + , portuguese = Definição-Proposição + , brazilian = Definição-Proposição + , spanish = Definición-Proposición + , schinese = 定义-命题 + , tchinese = 定義-命題 + , japanese = 定義-命題 + , russian = Определение-Предложение + } + , crefname = { + , english = {Definition-Proposition}{Definition-Proposition} + , french = [la]{Définition-Proposition}[les]{Définition-Proposition} + , ngerman = {Definition-Proposition}{Definition-Proposition} + , italian = [la]{Definizione-Proposizione}[le]{Definizione-Proposizione} + , portuguese = [a]{Definição-Proposição}[as]{Definição-Proposição} + , brazilian = [a]{Definição-Proposição}[as]{Definição-Proposição} + , spanish = [la]{Definición-Proposición}[las]{Definición-Proposición} + , schinese = {定义-命题}{定义-命题} + , tchinese = {定義-命題}{定義-命題} + , japanese = {定義-命題}{定義-命題} + , russian = {Определение-Предложение}{Определение-Предложение} + } + , Crefname = { + , english = {Definition-Proposition}{Definition-Proposition} + , french = [La]{Définition-Proposition}[Les]{Définition-Proposition} + , ngerman = {Definition-Proposition}{Definition-Proposition} + , italian = [La]{Definizione-Proposizione}[Le]{Definizione-Proposizione} + , portuguese = [A]{Definição-Proposição}[As]{Definição-Proposição} + , brazilian = [A]{Definição-Proposição}[As]{Definição-Proposição} + , spanish = [La]{Definición-Proposición}[Las]{Definición-Proposición} + , schinese = {定义-命题}{定义-命题} + , tchinese = {定義-命題}{定義-命題} + , japanese = {定義-命題}{定義-命題} + , russian = {Определение-Предложение}{Определение-Предложение} + } + } + +\NameTheorem { definition-theorem } + { + , heading = { + , english = Definition-Theorem + , french = Définition-Théorème + , ngerman = Definition-Satz + , italian = Definizione-Teorema + , portuguese = Definição-Teorema + , brazilian = Definição-Teorema + , spanish = Definición-Teorema + , schinese = 定义-定理 + , tchinese = 定義-定理 + , japanese = 定義-定理 + , russian = Определение-Теорема + } + , crefname = { + , english = {Definition-Theorem}{Definition-Theorem} + , french = [la]{Définition-Théorème}[les]{Définition-Théorème} + , ngerman = {Definition-Satz}{Definition-Satz} + , italian = [la]{Definizione-Teorema}[le]{Definizione-Teorema} + , portuguese = [a]{Definição-Teorema}[as]{Definição-Teorema} + , brazilian = [a]{Definição-Teorema}[as]{Definição-Teorema} + , spanish = [la]{Definición-Teorema}[las]{Definición-Teorema} + , schinese = {定义-定理}{定义-定理} + , tchinese = {定義-定理}{定義-定理} + , japanese = {定義-定理}{定義-定理} + , russian = {Определение-Теорема}{Определение-Теорема} + } + , Crefname = { + , english = {Definition-Theorem}{Definition-Theorem} + , french = [La]{Définition-Théorème}[Les]{Définition-Théorème} + , ngerman = {Definition-Satz}{Definition-Satz} + , italian = [La]{Definizione-Teorema}[Le]{Definizione-Teorema} + , portuguese = [A]{Definição-Teorema}[As]{Definição-Teorema} + , brazilian = [A]{Definição-Teorema}[As]{Definição-Teorema} + , spanish = [La]{Definición-Teorema}[Las]{Definición-Teorema} + , schinese = {定义-定理}{定义-定理} + , tchinese = {定義-定理}{定義-定理} + , japanese = {定義-定理}{定義-定理} + , russian = {Определение-Теорема}{Определение-Теорема} + } + } + \endinput %% %% End of file `projlib-theorem.sty'. - - -接下来: -1. ✅ 定义 \SetTheorem,用于处理编号和名称样式的问题 -2. ✅ 定义 complexname 与 simplename -3. ✅ 给出定理类环境的初始化,注意 no-theorem 与 no-theorem-numbering 等选项 -- cgit v1.2.3