%% %% This is file `xdufont.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% xduts.dtx (with options: `sty,xdufont') %% %% Copyright 2022--2023 by @note286 in GitHub and CTAN %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `author-maintained'. %% %% The Current Maintainer of this work is @note286 in GitHub and CTAN. %% %% This work consists of the files README.md, xduts.dtx, and xduts.ins %% and the derived files xduts.pdf, xdufont.sty, %% xduugtp.cls, xduugthesis.cls, and xdupgthesis.cls. %% %% The copyright of xdulogo.pdf is Xidian University. %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3} \ProvidesExplPackage{xdufont} {2023/03/23}{6.1.4.2} {Xidian University Font package} \RequirePackage { xparse, l3keys2e } \PassOptionsToPackage { no-math } { fontspec } \PassOptionsToPackage { quiet } { xeCJK } \RequirePackage { xeCJK } \tl_new:N \l__xdu_cjk_font_tl \tl_new:N \l__xdu_fake_bold_tl \tl_new:N \l__xdu_fake_slant_tl \tl_new:N \l__xdu_latin_font_tl \tl_new:N \l__xdu_latin_sans_scale_tl \tl_new:N \l__xdu_latin_mono_scale_tl \tl_new:N \l__xdu_math_font_tl \tl_new:N \l__xdu_unicode_math_tl \tl_new:N \l__xdu_font_type_tl \tl_new:N \l__xdu_font_path_tl \keys_define:nn { xdu / style } { cjk-font .choices:nn = { win, adobe, founder, hanyi, sinotype, fandol, none } { \tl_set_eq:NN \l__xdu_cjk_font_tl \l_keys_choice_tl }, cjk-fake-bold .tl_set:N = \l__xdu_fake_bold_tl, cjk-fake-slant .tl_set:N = \l__xdu_fake_slant_tl, latin-sans-scale .choices:nn = { upper, lower, off } { \tl_set_eq:NN \l__xdu_latin_sans_scale_tl \l_keys_choice_tl }, latin-mono-scale .choices:nn = { upper, lower, off } { \tl_set_eq:NN \l__xdu_latin_mono_scale_tl \l_keys_choice_tl }, latin-font .choices:nn = { gyre, tac, tacn, tcc, thcs, tll, none } { \tl_set_eq:NN \l__xdu_latin_font_tl \l_keys_choice_tl }, math-font .choices:nn = { asana, bonum, cambria, cm, concrete, dejavu, erewhon, euler, fira, garamond, gfsneohellenic, kp, libertinus, lm, newcm, pagella, schola, stix, stix2, termes, xcharter, xits, none } { \tl_set_eq:NN \l__xdu_math_font_tl \l_keys_choice_tl }, unicode-math .tl_set:N = \l__xdu_unicode_math_tl, font-type .choices:nn = { font, file } { \tl_set_eq:NN \l__xdu_font_type_tl \l_keys_choice_tl }, font-path .tl_set:N = \l__xdu_font_path_tl } \keys_set:nn { xdu } { style / cjk-font = fandol, style / cjk-fake-bold = 3, style / cjk-fake-slant = 0.2, style / latin-font = gyre, style / latin-sans-scale = off, style / latin-mono-scale = off, style / math-font = cm, style / unicode-math = { }, style / font-type = font, style / font-path = fonts } \cs_new:Npn \__xdu_select_font:nn #1#2 { \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { #1 } { #2 } } \cs_new:Npn \__xdu_font_path: { \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { } { Path = \l__xdu_font_path_tl / , } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_b:n #1 { BoldFont = { #1 } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_fb:n #1 { BoldFont = { #1 }, BoldFeatures = { FakeBold = \l__xdu_fake_bold_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_fs:n #1 { SlantedFont = { #1 }, SlantedFeatures = { FakeSlant = \l__xdu_fake_slant_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_fbfs:n #1 { BoldSlantedFont = { #1 }, BoldSlantedFeatures = { FakeBold = \l__xdu_fake_bold_tl, FakeSlant = \l__xdu_fake_slant_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_bfs:n #1 { BoldSlantedFont = { #1 }, BoldSlantedFeatures = { FakeSlant = \l__xdu_fake_slant_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_i:n #1 { ItalicFont = { #1 } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_fi:n #1 { ItalicFont = { #1 }, ItalicFeatures = { FakeSlant = \l__xdu_fake_slant_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_ifb:n #1 { BoldItalicFont = { #1 }, BoldItalicFeatures = { FakeBold = \l__xdu_fake_bold_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_sub_fifb:n #1 { BoldItalicFont = { #1 }, BoldItalicFeatures = { FakeBold = \l__xdu_fake_bold_tl, FakeSlant = \l__xdu_fake_slant_tl } } \cs_new:Npn \__xdu_cfg_cjk_font_r:n #1 { \__xdu_cfg_cjk_font_sub_fb:n { #1 }, \__xdu_cfg_cjk_font_sub_fs:n { #1 }, \__xdu_cfg_cjk_font_sub_fbfs:n { #1 }, \__xdu_cfg_cjk_font_sub_fi:n { #1 }, \__xdu_cfg_cjk_font_sub_fifb:n { #1 } } \cs_new:Npn \__xdu_cfg_cjk_font_rb:nn #1#2 { \__xdu_cfg_cjk_font_sub_b:n { #2 }, \__xdu_cfg_cjk_font_sub_fs:n { #1 }, \__xdu_cfg_cjk_font_sub_bfs:n { #2 }, \__xdu_cfg_cjk_font_sub_fi:n { #1 }, \__xdu_cfg_cjk_font_sub_fifb:n { #1 } } \cs_new:Npn \__xdu_cfg_cjk_font_ri:nn #1#2 { \__xdu_cfg_cjk_font_sub_fb:n { #1 }, \__xdu_cfg_cjk_font_sub_fs:n { #1 }, \__xdu_cfg_cjk_font_sub_fbfs:n { #1 }, \__xdu_cfg_cjk_font_sub_i:n { #2 }, \__xdu_cfg_cjk_font_sub_ifb:n { #2 } } \cs_new:Npn \__xdu_cfg_cjk_font_rbi:nnn #1#2#3 { \__xdu_cfg_cjk_font_sub_b:n { #2 }, \__xdu_cfg_cjk_font_sub_fs:n { #1 }, \__xdu_cfg_cjk_font_sub_bfs:n { #2 }, \__xdu_cfg_cjk_font_sub_i:n { #3 }, \__xdu_cfg_cjk_font_sub_ifb:n { #3 } } \cs_new:Npn \__xdu_set_cjk_main_font:nn #1#2 { \setCJKmainfont { #1 } [ \__xdu_font_path: \__xdu_cfg_cjk_font_ri:nn { #1 } { #2 } ] } \cs_new:Npn \__xdu_set_cjk_main_font:nnn #1#2#3 { \setCJKmainfont { #1 } [ \__xdu_font_path: \__xdu_cfg_cjk_font_rbi:nnn { #1 } { #2 } { #3 } ] } \cs_new:Npn \__xdu_set_cjk_sans_font:n #1 { \setCJKsansfont { #1 } [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ] } \cs_new:Npn \__xdu_set_cjk_sans_font:nn #1#2 { \setCJKsansfont { #1 } [ \__xdu_font_path: \__xdu_cfg_cjk_font_rb:nn { #1 } { #2 } ] } \cs_new:Npn \__xdu_set_cjk_mono_font:n #1 { \setCJKmonofont { #1 } [ \__xdu_font_path: \__xdu_cfg_cjk_font_r:n { #1 } ] } \cs_new:Npn \__xdu_load_cjk_font_win: { \__xdu_set_cjk_main_font:nn { \__xdu_select_font:nn { SimSun } { simsun.ttc } } { \__xdu_select_font:nn { KaiTi } { simkai.ttf } } \__xdu_set_cjk_sans_font:n { \__xdu_select_font:nn { SimHei } { simhei.ttf } } \__xdu_set_cjk_mono_font:n { \__xdu_select_font:nn { FangSong } { simfang.ttf } } } \cs_new:Npn \__xdu_load_cjk_font_adobe: { \__xdu_set_cjk_main_font:nn { \__xdu_select_font:nn { Adobe~Song~Std } { adobesongstd-light.otf } } { \__xdu_select_font:nn { Adobe~Kaiti~Std } { adobekaitistd-regular.otf } } \__xdu_set_cjk_sans_font:n { \__xdu_select_font:nn { Adobe~Heiti~Std } { adobeheitistd-regular.otf } } \__xdu_set_cjk_mono_font:n { \__xdu_select_font:nn { Adobe~Fangsong~Std } { Adobe-Fangsong-Std-R-Font.otf } } } \cs_new:Npn \__xdu_load_cjk_font_founder: { \__xdu_set_cjk_main_font:nn { \__xdu_select_font:nn { FZShuSong-Z01 } { FZShuSong-Z01.ttf } } { \__xdu_select_font:nn { FZKai-Z03 } { FZKai-Z03.ttf } } \__xdu_set_cjk_sans_font:n { \__xdu_select_font:nn { FZHei-B01 } { FZHei-B01.ttf } } \__xdu_set_cjk_mono_font:n { \__xdu_select_font:nn { FZFangSong-Z02 } { FZFSK.TTF } } } \cs_new:Npn \__xdu_load_cjk_font_hanyi: { \__xdu_set_cjk_main_font:nn { \__xdu_select_font:nn { HYShuSongErS } { HYShuSongErS.ttf } } { \__xdu_select_font:nn { HYKaiTiS } { HYKaiTiS.ttf } } \__xdu_set_cjk_sans_font:n { \__xdu_select_font:nn { HYZhongHei } { HYZhongHeiTiS.ttf } } \__xdu_set_cjk_mono_font:n { \__xdu_select_font:nn { HYFangSongS } { HYFangSongS.ttf } } } \cs_new:Npn \__xdu_load_cjk_font_sinotype: { \__xdu_set_cjk_main_font:nn { \__xdu_select_font:nn { STSong } { STSONG.TTF } } { \__xdu_select_font:nn { STKaiti } { STKAITI.TTF } } \__xdu_set_cjk_sans_font:nn { \__xdu_select_font:nn { STXihei } { STXIHEI.TTF } } { \__xdu_select_font:nn { STHeiti } { STHeiti.ttf } } \__xdu_set_cjk_mono_font:n { \__xdu_select_font:nn { STFangsong } { STFANGSO.TTF } } } \cs_new:Npn \__xdu_load_cjk_font_fandol: { \__xdu_set_cjk_main_font:nnn { FandolSong-Regular.otf } { FandolSong-Bold.otf } { FandolKai-Regular.otf } \__xdu_set_cjk_sans_font:nn { FandolHei-Regular.otf } { FandolHei-Bold.otf } \__xdu_set_cjk_mono_font:n { FandolFang-Regular.otf } } \cs_new:Npn \__xdu_load_cjk_font_none: { } \cs_new:Npn \__xdu_set_latin_font:nnn #1#2#3 { BoldFont = { #1 }, SlantedFont = { #2 }, BoldSlantedFont = { #3 }, ItalicFont = { #2 }, BoldItalicFont = { #3 } } \cs_new:Npn \__xdu_set_latin_sans_scale: { } \cs_new:Npn \__xdu_set_latin_mono_scale: { } \ctex_at_end_preamble:n { \tl_if_eq:NnTF \l__xdu_latin_sans_scale_tl { upper } { \cs_set:Npn \__xdu_set_latin_sans_scale: { Scale = MatchUppercase , } } { \tl_if_eq:NnT \l__xdu_latin_sans_scale_tl { lower } { \cs_set:Npn \__xdu_set_latin_sans_scale: { Scale = MatchLowercase , } } } \tl_if_eq:NnTF \l__xdu_latin_mono_scale_tl { upper } { \cs_set:Npn \__xdu_set_latin_mono_scale: { Scale = MatchUppercase , } } { \tl_if_eq:NnT \l__xdu_latin_mono_scale_tl { lower } { \cs_set:Npn \__xdu_set_latin_mono_scale: { Scale = MatchLowercase , } } } } \cs_new:Npn \__xdu_off_latin_ligatures: { Ligatures = CommonOff , } \cs_new:Npn \__xdu_set_latin_main_font:nnnnn #1#2#3#4#5 { \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { \setmainfont { #1 } } { \setmainfont { #2 } [ \__xdu_font_path: \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } } \cs_new:Npn \__xdu_set_latin_sans_font:nnnnn #1#2#3#4#5 { \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { \setsansfont { #1 } [ \__xdu_set_latin_sans_scale: ] } { \setsansfont { #2 } [ \__xdu_font_path: \__xdu_set_latin_sans_scale: \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } } \cs_new:Npn \__xdu_set_latin_mono_font:nnnnn #1#2#3#4#5 { \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { \setmonofont { #1 } [ \__xdu_set_latin_mono_scale: \__xdu_off_latin_ligatures: ] } { \setmonofont { #2 } [ \__xdu_font_path: \__xdu_set_latin_mono_scale: \__xdu_off_latin_ligatures: \__xdu_set_latin_font:nnn { #3 } { #4 } { #5 } ] } } \cs_new:Npn \__xdu_set_latin_main_font:nnnn #1#2#3#4 { \setmainfont { #1 } [ \__xdu_set_latin_font:nnn { #2 } { #3 } { #4 } ] } \cs_new:Npn \__xdu_set_latin_sans_font:nnnn #1#2#3#4 { \setsansfont { #1 } [ \__xdu_set_latin_sans_scale: \__xdu_set_latin_font:nnn { #2 } { #3 } { #4 } ] } \cs_new:Npn \__xdu_set_latin_mono_font:nnnn #1#2#3#4 { \setmonofont { #1 } [ \__xdu_set_latin_mono_scale: \__xdu_off_latin_ligatures: \__xdu_set_latin_font:nnn { #2 } { #3 } { #4 } ] } \cs_new:Npn \__xdu_load_latin_font_tac: { \__xdu_set_latin_main_font:nnnnn { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } \__xdu_set_latin_sans_font:nnnnn { Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf } \__xdu_set_latin_mono_font:nnnnn { Consolas } { consola.ttf } { consolab.ttf } { consolai.ttf } { consolaz.ttf } } \cs_new:Npn \__xdu_load_latin_font_tacn: { \__xdu_set_latin_main_font:nnnnn { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } \__xdu_set_latin_sans_font:nnnnn { Arial } { arial.ttf } { arialbd.ttf } { ariali.ttf } { arialbi.ttf } \__xdu_set_latin_mono_font:nnnnn { Courier~New } { cour.ttf } { courbd.ttf } { couri.ttf } { courbi.ttf } } \cs_new:Npn \__xdu_load_latin_font_tcc: { \__xdu_set_latin_main_font:nnnnn { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } \__xdu_set_latin_sans_font:nnnn { cmunss.otf } { cmunsx.otf } { cmunsi.otf } { cmunso.otf } \__xdu_set_latin_mono_font:nnnn { cmuntt.otf } { cmuntb.otf } { cmunit.otf } { cmuntx.otf } } \cs_new:Npn \__xdu_load_latin_font_thcs: { \__xdu_set_latin_main_font:nnnnn { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } \__xdu_set_latin_sans_font:nnnnn { Helvetica } { Helvetica.ttf } { Helvetica~Bold.ttf } { Helvetica~Oblique.ttf } { Helvetica~Bold~Oblique.ttf } \__xdu_set_latin_mono_font:nnnnn { Courier~Std } { CourierStd.otf } { CourierStd-Bold.otf } { CourierStd-Oblique.otf } { CourierStd-BoldOblique.otf } } \cs_new:Npn \__xdu_load_latin_font_tll: { \__xdu_set_latin_main_font:nnnnn { Times~New~Roman } { times.ttf } { timesbd.ttf } { timesi.ttf } { timesbi.ttf } \__xdu_set_latin_sans_font:nnnn { LinBiolinum_R.otf } { LinBiolinum_RB.otf } { LinBiolinum_RI.otf } { LinBiolinum_RBO.otf } \__xdu_set_latin_mono_font:nnnn { LinLibertine_M.otf } { LinLibertine_MB.otf } { LinLibertine_MO.otf } { LinLibertine_MBO.otf } } \cs_new:Npn \__xdu_load_latin_font_gyre: { \__xdu_set_latin_main_font:nnnn { texgyretermes-regular.otf } { texgyretermes-bold.otf } { texgyretermes-italic.otf } { texgyretermes-bolditalic.otf } \__xdu_set_latin_sans_font:nnnn { texgyreheros-regular.otf } { texgyreheros-bold.otf } { texgyreheros-italic.otf } { texgyreheros-bolditalic.otf } \__xdu_set_latin_mono_font:nnnn { texgyrecursor-regular.otf } { texgyrecursor-bold.otf } { texgyrecursor-italic.otf } { texgyrecursor-bolditalic.otf } } \cs_new:Npn \__xdu_load_latin_font_none: { } \cs_new:Npn \__xdu_load_unicode_math_pkg: { \PassOptionsToPackage { \l__xdu_unicode_math_tl } { unicode-math } \RequirePackage { unicode-math } \setoperatorfont { \symup } \hypersetup { psdextra } } \cs_new:Npn \__xdu_load_math_font_cambria: { \__xdu_load_unicode_math_pkg: \str_if_eq:NNTF { \l__xdu_font_type_tl } { font } { \setmathfont { Cambria~Math } } { \setmathfont { cambria.ttc } [ Path = \l__xdu_font_path_tl/, FontIndex = 1 ] } } \cs_new:Npn \__xdu_define_math_font:nn #1#2 { \cs_new:cpn { __xdu_load_math_font_ #1 : } { \__xdu_load_unicode_math_pkg: \setmathfont { #2 } } } \clist_map_inline:nn { { asana } { Asana-Math.otf }, { concrete } { Concrete-Math.otf }, { erewhon } { Erewhon-Math.otf }, { euler } { Euler-Math.otf }, { fira } { FiraMath-Regular.otf }, { garamond } { Garamond-Math.otf }, { gfsneohellenic } { GFSNeohellenicMath.otf }, { kp } { KpMath-Regular.otf }, { libertinus } { LibertinusMath-Regular.otf }, { lm } { latinmodern-math.otf }, { newcm } { NewCMMath-Regular.otf }, { stix } { STIXMath-Regular.otf }, { stix2 } { STIXTwoMath-Regular.otf }, { xcharter } { XCharter-Math.otf }, { xits } { XITSMath-Regular.otf }, { bonum } { texgyrebonum-math.otf }, { dejavu } { texgyredejavu-math.otf }, { pagella } { texgyrepagella-math.otf }, { schola } { texgyreschola-math.otf }, { termes } { texgyretermes-math.otf } } { \__xdu_define_math_font:nn #1 } \cs_new:Npn \__xdu_load_math_font_cm: { } \cs_new:Npn \__xdu_load_math_font_none: { } \cs_new:Npn \__xdu_load_font: { \use:c { __xdu_load_cjk_font_ \l__xdu_cjk_font_tl : } \use:c { __xdu_load_latin_font_ \l__xdu_latin_font_tl : } \use:c { __xdu_load_math_font_ \l__xdu_math_font_tl : } } \ctex_at_end_preamble:n { \__xdu_load_font: } \NewDocumentCommand \xdusetup { m } { \keys_set:nn { xdu } { #1 } } \keys_define:nn { xdu } { style .meta:nn = { xdu / style } { #1 }, info .meta:nn = { xdu / info } { #1 } } \ProcessKeysOptions { xdu / style } %% %% %% End of file `xdufont.sty'.