加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
exam-zh-font.sty 20.15 KB
一键复制 编辑 原始数据 按行查看 历史
xkwxdyy 提交于 2023-06-22 19:18 . Update version
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
%
% Copyright (c) 2022 Zeping Lee and AlphaZTX
% Released under the LaTeX Project Public License v1.3c License.
% Repository: https://gitee.com/xkwxdyy/exam-zh
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\RequirePackage{xparse}
\ProvidesExplPackage {exam-zh-font} {2023-06-22} {v0.1.26}
{exam-zh font module}
\RequirePackage { unicode-math }
\RequirePackage { filehook }
\RequirePackage { etoolbox }
\tl_new:N \g__examzh_font_font_tl
\tl_new:N \g__examzh_font_math_font_tl
\keys_define:nn { exam-zh }
{
font .choices:nn =
{
garamond ,
libertinus ,
lm ,
newcm ,
pala ,
stix ,
termes ,
times ,
xits ,
none
}
{
\tl_gset_eq:NN \g__examzh_font_font_tl \l_keys_choice_tl
\use:c { examzh_font_set_font_ \g__examzh_font_font_tl : }
} ,
math-font .choices:nn =
{
asana ,
cambria ,
garamond ,
libertinus ,
lm ,
newcm ,
pala ,
stix ,
termes ,
xits ,
none
}
{
\tl_gset_eq:NN \g__examzh_font_math_font_tl \l_keys_choice_tl
\use:c { examzh_font_set_math_font_ \g__examzh_font_math_font_tl : }
} ,
}
% New Computer Modern
\cs_new:Npn \examzh_font_set_font_newcm:
{
\setmainfont { NewCM10 }
[
Extension = .otf ,
UprightFont = *-Book ,
BoldFont = *-Bold ,
ItalicFont = *-BookItalic ,
BoldItalicFont = *-BoldItalic ,
]
\setsansfont { NewCMSans10 }
[
Extension = .otf ,
UprightFont = *-Book ,
BoldFont = *-Bold ,
ItalicFont = *-BookOblique ,
BoldItalicFont = *-BoldOblique ,
]
\setmonofont { NewCMMono10 }
[
Extension = .otf ,
UprightFont = *-Book ,
ItalicFont = *-BookItalic ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldOblique ,
]
}
% Latin Modern
\cs_new:Npn \examzh_font_set_font_lm:
{
\setmainfont { lmroman10 }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
]
\setsansfont { lmsans10 }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-oblique ,
BoldItalicFont = *-boldoblique ,
]
\setmonofont { lmmonolt10 }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-oblique ,
BoldItalicFont = *-boldoblique ,
]
}
% Times New Roman + Arial
\cs_new:Npn \examzh_font_set_font_times:
{
\setmainfont { Times~ New~ Roman }
\setsansfont { Arial } [ Scale = MatchLowercase ]
\setmonofont { Courier~ New } [ Scale = MatchLowercase ]
}
% TeX Gyre Termes
\cs_new:Npn \examzh_font_set_font_termes:
{
\setmainfont { texgyretermes }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
]
\examzh_font_set_tex_gyre_sans_mono:
}
% Garamond (实际上是 EB Garamond)
\cs_new:Npn \examzh_font_set_font_garamond:
{
\setmainfont { EBGaramond }
[
Extension = .otf ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
ItalicFont = *-Italic ,
BoldItalicFont = *-BoldItalic ,
]
\setsansfont { LinBiolinum }
[
Extension = .otf ,
UprightFont = *_R ,
BoldFont = *_RB ,
ItalicFont = *_RI ,
BoldItalicFont = *_RBO ,
]
\setmonofont { texgyrecursor }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
]
}
% Palatino (TeX Gyre Pagella)
\cs_new:Npn \examzh_font_set_font_pala:
{
\setmainfont { texgyrepagella }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
]
\examzh_font_set_tex_gyre_sans_mono:
}
% TeX Gyre Heros / Cursor
\cs_new:Npn \examzh_font_set_tex_gyre_sans_mono:
{
\setsansfont { texgyreheros }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
Scale = MatchLowercase ,
]
\setmonofont { texgyrecursor }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-italic ,
BoldItalicFont = *-bolditalic ,
Scale = MatchLowercase ,
Ligatures = CommonOff ,
]
}
% STIX Two 字体。
% STIX 文件名在 v2.10 2020-12-19 从
% \file{STIX2Text-Regular.otf}、\file{STIX2Math.otf} 分别改为
% \file{STIXTwoText-Regular.otf}、\file{STIXTwoMath-Regular.otf}。
\tl_new:N \g__examzh_font_font_family_stix_tl
\tl_new:N \g__examzh_font_font_name_stix_math_tl
\cs_new:Npn \examzh_font_set_stix_names:
{
\tl_if_empty:NT \g__examzh_font_font_family_stix_tl
{
\fontspec_font_if_exist:nTF { STIXTwoText-Regular.otf }
{
\tl_gset:Nn \g__examzh_font_font_family_stix_tl { STIXTwoText }
\tl_gset:Nn \g__examzh_font_font_name_stix_math_tl { STIXTwoMath-Regular }
}
{
\tl_gset:Nn \g__examzh_font_font_family_stix_tl { STIX2Text }
\tl_gset:Nn \g__examzh_font_font_name_stix_math_tl { STIX2Math }
}
}
}
\cs_new:Npn \examzh_font_set_font_stix:
{
\examzh_font_set_stix_names:
\setmainfont { \g__examzh_font_font_family_stix_tl }
[
Extension = .otf ,
UprightFont = *-Regular ,
BoldFont = *-Bold ,
ItalicFont = *-Italic ,
BoldItalicFont = *-BoldItalic ,
]
\examzh_font_set_tex_gyre_sans_mono:
}
% XITS 字体。
% XITS 的文件名在 v1.109 2018-09-30
% 从 \file{xits-regular.otf}、\file{xits-math.otf} 分别改为
% \file{XITS-Regular.otf}、\file{XITSMath-Regular.otf}。
\tl_new:N \g__examzh_font_font_family_xits_tl
\tl_new:N \g__examzh_font_font_style_xits_rm_tl
\tl_new:N \g__examzh_font_font_style_xits_bf_tl
\tl_new:N \g__examzh_font_font_style_xits_it_tl
\tl_new:N \g__examzh_font_font_style_xits_bfit_tl
\tl_new:N \g__examzh_font_font_name_xits_math_tl
\cs_new:Npn \examzh_font_set_xits_names:
{
\tl_if_empty:NT \g__examzh_font_font_family_xits_tl
{
\fontspec_font_if_exist:nTF { XITSMath-Regular.otf }
{
\tl_gset:Nn \g__examzh_font_font_family_xits_tl { XITS }
\tl_gset:Nn \g__examzh_font_font_style_xits_rm_tl { Regular }
\tl_gset:Nn \g__examzh_font_font_style_xits_bf_tl { Bold }
\tl_gset:Nn \g__examzh_font_font_style_xits_it_tl { Italic }
\tl_gset:Nn \g__examzh_font_font_style_xits_bfit_tl { BoldItalic }
\tl_gset:Nn \g__examzh_font_font_name_xits_math_tl { XITSMath-Regular }
}
{
\tl_gset:Nn \g__examzh_font_font_family_xits_tl { xits }
\tl_gset:Nn \g__examzh_font_font_style_xits_rm_tl { regular }
\tl_gset:Nn \g__examzh_font_font_style_xits_bf_tl { bold }
\tl_gset:Nn \g__examzh_font_font_style_xits_it_tl { italic }
\tl_gset:Nn \g__examzh_font_font_style_xits_bfit_tl { bolditalic }
\tl_gset:Nn \g__examzh_font_font_name_xits_math_tl { xits-math }
}
}
}
\cs_new:Npn \examzh_font_set_font_xits:
{
\examzh_font_set_xits_names:
\setmainfont { \g__examzh_font_font_family_xits_tl }
[
Extension = .otf ,
UprightFont = *-\g__examzh_font_font_style_xits_rm_tl ,
BoldFont = *-\g__examzh_font_font_style_xits_bf_tl ,
ItalicFont = *-\g__examzh_font_font_style_xits_it_tl ,
BoldItalicFont = *-\g__examzh_font_font_style_xits_bfit_tl ,
]
\examzh_font_set_tex_gyre_sans_mono:
}
% Libertinus 的文件名在 v6.7 2019-04-03 从小写改为驼峰式,
% 在大小写敏感的平台上需要进行判断。
\tl_new:N \g__examzh_font_font_family_libertinus_serif_tl
\tl_new:N \g__examzh_font_font_family_libertinus_sans_tl
\tl_new:N \g__examzh_font_font_style_libertinus_rm_tl
\tl_new:N \g__examzh_font_font_style_libertinus_bf_tl
\tl_new:N \g__examzh_font_font_style_libertinus_it_tl
\tl_new:N \g__examzh_font_font_style_libertinus_bfit_tl
\tl_new:N \g__examzh_font_font_name_libertinus_math_tl
\cs_new:Npn \examzh_font_set_libertinus_names:
{
\tl_if_empty:NT \g__examzh_font_font_family_libertinus_serif_tl
{
\fontspec_font_if_exist:nTF { LibertinusSerif-Regular.otf }
{
\tl_gset:Nn \g__examzh_font_font_family_libertinus_serif_tl { LibertinusSerif }
\tl_gset:Nn \g__examzh_font_font_family_libertinus_sans_tl { LibertinusSans }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_rm_tl { Regular }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_bf_tl { Bold }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_it_tl { Italic }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_bfit_tl { BoldItalic }
\tl_gset:Nn \g__examzh_font_font_name_libertinus_math_tl { LibertinusMath-Regular }
}
{
\tl_gset:Nn \g__examzh_font_font_family_libertinus_serif_tl { libertinusserif }
\tl_gset:Nn \g__examzh_font_font_family_libertinus_sans_tl { libertinussans }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_rm_tl { regular }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_bf_tl { bold }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_it_tl { italic }
\tl_gset:Nn \g__examzh_font_font_style_libertinus_bfit_tl { bolditalic }
\tl_gset:Nn \g__examzh_font_font_name_libertinus_math_tl { libertinusmath-regular }
}
}
}
\cs_new:Npn \examzh_font_set_font_libertinus:
{
\examzh_font_set_libertinus_names:
\setmainfont { \g__examzh_font_font_family_libertinus_serif_tl }
[
Extension = .otf ,
UprightFont = *-\g__examzh_font_font_style_libertinus_rm_tl ,
BoldFont = *-\g__examzh_font_font_style_libertinus_bf_tl ,
ItalicFont = *-\g__examzh_font_font_style_libertinus_it_tl ,
BoldItalicFont = *-\g__examzh_font_font_style_libertinus_bfit_tl ,
]
\setsansfont { \g__examzh_font_font_family_libertinus_sans_tl }
[
Extension = .otf ,
UprightFont = *-\g__examzh_font_font_style_libertinus_rm_tl ,
BoldFont = *-\g__examzh_font_font_style_libertinus_bf_tl ,
ItalicFont = *-\g__examzh_font_font_style_libertinus_it_tl ,
]
\setmonofont { lmmonolt10 }
[
Extension = .otf ,
UprightFont = *-regular ,
BoldFont = *-bold ,
ItalicFont = *-oblique ,
BoldItalicFont = *-boldoblique ,
]
}
% 数学字体
% 按照国标样式配置 unicode-math
\tl_new:N \l__examzh_save_leq_tl
\tl_new:N \l__examzh_save_geq_tl
\AtEndOfPackageFile* { unicode-math }
{
\unimathsetup
{
math-style = ISO ,
bold-style = ISO ,
partial = upright ,
}
\AtBeginDocument
{
\tl_set_eq:NN \leq \l__examzh_save_leq_tl
\tl_set_eq:NN \geq \l__examzh_save_geq_tl
\tl_set_eq:NN \leq \leqslant
\tl_set_eq:NN \geq \geqslant
}
\cs_set_protected:Npn \mathellipsis { \mathinner { \unicodecdots } }
}
% 数学符号样式
% \tl_new:N \l__examzh_font_uppercase_greek_tl
% \tl_new:N \l__examzh_font_leq_style_tl
\tl_new:N \l__examzh_font_integral_style_tl
% \bool_new:N \l__examzh_font_integral_limits_bool
% \tl_new:N \l__examzh_font_partial_style_tl
% \tl_new:N \l__examzh_font_math_ellipsis_tl
% \tl_new:N \l__examzh_font_real_part_tl
\tl_set:Nn \l__examzh_font_integral_style_tl { upright }
% \keys_define:nn { exam-zh }
% {
% math-style .choices:nn =
% { GB , ISO , TeX }
% { \exp_args:NV \examzh_font_set_math_style:n \l_keys_choice_tl } ,
% uppercase-greek .choices:nn =
% { italic , upright }
% { \tl_set_eq:NN \l__examzh_font_uppercase_greek_tl \l_keys_choice_tl } ,
% less-than-or-equal .choices:nn =
% { slanted , horizontal }
% { \tl_set_eq:NN \l__examzh_font_leq_style_tl \l_keys_choice_tl } ,
% integral .choices:nn =
% { upright , slanted }
% { \tl_set_eq:NN \l__examzh_font_integral_style_tl \l_keys_choice_tl } ,
% integral-limits .bool_set:N = \l__examzh_font_integral_limits_bool ,
% partial .choices:nn =
% { upright , slanted }
% { \tl_set_eq:NN \l__examzh_font_partial_style_tl \l_keys_choice_tl } ,
% math-ellipsis .choices:nn =
% { centered , lower , AMS }
% { \tl_set_eq:NN \l__examzh_font_math_ellipsis_tl \l_keys_choice_tl } ,
% real-part .choices:nn =
% { roman , fraktur }
% { \tl_set_eq:NN \l__examzh_font_real_part_tl \l_keys_choice_tl } ,
% }
% New Computer Modern Math
\tl_new:N \l__examzh_font_stylistic_set_tl
\cs_new:Npn \examzh_font_set_math_font_newcm:
{
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\tl_if_eq:NnTF \l__examzh_font_integral_style_tl { upright }
{ \tl_set:Nn \l__examzh_font_stylistic_set_tl { 2 } }
{ \tl_clear:N \l__examzh_font_stylistic_set_tl }
\setmathfont { NewCMMath-Book }
[
Extension = .otf,
StylisticSet = \l__examzh_font_stylistic_set_tl ,
]
\setmathfont { NewCMMath-Book }
[
Extension = .otf,
StylisticSet = 1,
range = { scr , bfscr } ,
]
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement, \bigstar } ,
]
\setmathrm { NewCM10 }
[
Extension = .otf,
UprightFont = *-Book,
BoldFont = *-Bold,
ItalicFont = *-BookItalic,
BoldItalicFont = *-BoldItalic,
]
\setmathsf { NewCMSans10 }
[
Extension = .otf,
UprightFont = *-Book,
BoldFont = *-Bold,
ItalicFont = *-BookOblique,
BoldItalicFont = *-BoldOblique,
]
\setmathtt { NewCMMono10 }
[
Extension = .otf,
UprightFont = *-Book,
ItalicFont = *-BookItalic,
BoldFont = *-Bold,
BoldItalicFont = *-BoldOblique,
]
}
% Latin Modern Math
\cs_new:Npn \examzh_font_set_math_font_lm:
{
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\setmathfont { latinmodern-math } [ Extension = .otf ]
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement, \bigstar } ,
]
\setmathrm { lmroman10 }
[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
BoldItalicFont = *-bolditalic,
]
\setmathsf { lmsans10 }
[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-oblique,
BoldItalicFont = *-boldoblique,
]
\setmathtt { lmmonolt10 }
[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-oblique,
BoldItalicFont = *-boldoblique,
]
}
% STIX Two Math
\cs_new:Npn \examzh_font_set_math_font_stix:
{
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\examzh_font_set_stix_names:
\tl_if_eq:NnTF \l__examzh_font_integral_style_tl { upright }
{ \tl_set:Nn \l__examzh_font_stylistic_set_tl { 8 } }
{ \tl_clear:N \l__examzh_font_stylistic_set_tl }
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
StylisticSet = \l__examzh_font_stylistic_set_tl,
]
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
StylisticSet = 1,
range = { scr , bfscr },
]
}
% XITS Math
\cs_new:Npn \examzh_font_set_math_font_xits:
{
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\examzh_font_set_xits_names:
\tl_if_eq:NnTF \l__examzh_font_integral_style_tl { upright }
{ \tl_set:Nn \l__examzh_font_stylistic_set_tl { 8 } }
{ \tl_clear:N \l__examzh_font_stylistic_set_tl }
\setmathfont { \g__examzh_font_font_name_xits_math_tl }
[
Extension = .otf ,
StylisticSet = \l__examzh_font_stylistic_set_tl ,
]
\setmathfont { \g__examzh_font_font_name_xits_math_tl }
[
Extension = .otf ,
StylisticSet = 1 ,
range = { cal , bfcal } ,
]
}
% Libertinus Math
\cs_new:Npn \examzh_font_set_math_font_libertinus: {
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\examzh_font_set_libertinus_names:
\tl_if_eq:NnTF \l__examzh_font_integral_style_tl { slanted }
{ \tl_set:Nn \l__examzh_font_stylistic_set_tl { 8 } }
{ \tl_clear:N \l__examzh_font_stylistic_set_tl }
\setmathfont { \g__examzh_font_font_name_libertinus_math_tl }
[
Extension = .otf,
StylisticSet = \l__examzh_font_stylistic_set_tl,
]
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement } ,
]
}
% Cambria Math
\cs_new:Npn \examzh_font_set_math_font_cambria: {
% \examzh_font_load_unimath:
% \examzh_font_set_unimath_style:
\setmathfont { Cambria~ Math }
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement, \bigstar } ,
]
\message
{
Please~note~that~the~Cambria~font~family~cannot~be~used~on~commercial~purpose~unless~you~are~using~Windows~7/8/10/11~PROFESSIONAL.
}
}
% 新增的 asana, garamond, pala
\cs_new:Npn \examzh_font_set_math_font_asana:
{
\setmathfont { Asana-Math.otf }
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement } ,
]
}
\cs_new:Npn \examzh_font_set_math_font_garamond:
{
\setmathfont { Garamond-Math.otf }
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement } ,
]
}
\cs_new:Npn \examzh_font_set_math_font_pala:
{
\setmathfont { texgyrepagella-math.otf }
\examzh_font_set_stix_names:
\setmathfont { \g__examzh_font_font_name_stix_math_tl }
[
Extension = .otf,
range = { \complement, \bigstar } ,
]
}
\AtEndPreamble
{
\tl_if_empty:NT \g__examzh_font_font_tl
{ \keys_set:nn { exam-zh } { font = newcm } }
\tl_if_empty:NT \g__examzh_font_math_font_tl
{ \keys_set:nn { exam-zh } { math-font = newcm } }
}
% unicode-math 的配置
% 兼容旧的粗体命令:\pkg{bm} 的 \cs{bm} 和 \pkg{amsmath} 的 \cs{boldsymbol}。
\AtEndOfPackageFile* { unicode-math }
{
\NewDocumentCommand \bm { m }
{
\tl_if_head_eq_catcode:nNTF { ##1 } A
{ \symbfit{#1} }
{
#1
\PackageWarning { exam-zh-font }
{
Do~not~use~\string\bm \space ~with~`unicode-math',~normal~font~instead.
}
}
}
\RenewDocumentCommand \boldsymbol { } { \bm }
% 兼容 \pkg{amsfonts} 和 \pkg{amssymb} 中的一些命令。
\NewDocumentCommand \square { } { \mdlgwhtsquare }
\NewDocumentCommand \blacksquare { } { \mdlgblksquare }
\AtBeginDocument { \RenewDocumentCommand \checkmark { } { \ensuremath{} } }
}
\endinput
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化