% \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