You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
594 lines
20 KiB
594 lines
20 KiB
% xetexko-font.sty
|
|
%
|
|
% Copyright (c) 2013-2020 Dohyun Kim <nomos at ktug org>
|
|
%
|
|
% 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 2006/05/20 or later.
|
|
|
|
\NeedsTeXFormat{LaTeX2e}[2020/02/02]
|
|
\ProvidesPackage{xetexko-font}[2020/02/17 v2.23 LaTeX Font commands for XeTeX-ko]
|
|
|
|
\RequirePackage{fontspec}[2020/02/03]
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% for old hangul rendering
|
|
\newfontfeature{YetHangul}{script=hang}
|
|
|
|
\ExplSyntaxOn
|
|
%%%%%%%%%%%%%%%%%%%%%
|
|
% hangul font options
|
|
\tl_new:N \l_xtxko_font_opts_tl
|
|
\tl_new:N \l_xtxko_font_opts_init_tl
|
|
\tl_new:N \l_xtxko_hangul_font_opts_init_tl
|
|
\tl_new:N \l_xtxko_hanja_font_opts_init_tl
|
|
\tl_new:N \l_xtxko_rem_tl
|
|
\int_const:Nn \c__xtxko_one_int { 1 }
|
|
\int_const:Nn \c__xtxko_two_int { 2 }
|
|
\tl_set:Nn \l_xtxko_font_opts_init_tl
|
|
{
|
|
\cs_set_eq:NN \xetexkointerhchar \c_empty_tl
|
|
\cs_set_eq:NN \xetexkolowerexclamation \c_empty_tl
|
|
\cs_set_eq:NN \xetexkolowerperiod \c_empty_tl
|
|
\cs_set_eq:NN \xetexkolowercomma \c_empty_tl
|
|
\cs_set_eq:NN \xetexkolowerquestion \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopostexclamationkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopostperiodkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopostcommakern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopostquestionkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopreexclamationkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkopreperiodkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkoprecommakern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkoprequestionkern \c_empty_tl
|
|
\cs_set_eq:NN \xetexkoquoteraise \c_empty_tl
|
|
\cs_set_eq:NN \xetexkoquotewidth \c_empty_tl
|
|
\cs_set_eq:NN \xetexkocharraise \c_empty_tl
|
|
\cs_set_nopar:Npn \xetexkohu {0.05em}
|
|
\cs_set_nopar:Npn \xetexkopostmathskip {\dim_eval:n {\xetexkohu*2}}
|
|
}
|
|
\cs_new:Nn \__xtxko_add_font_opt:Nn
|
|
{
|
|
\tl_put_right:Nn \l_xtxko_font_opts_tl { \cs_set_nopar:Npn #1 {#2} }
|
|
}
|
|
\keys_define:nn { xtxko-font }
|
|
{
|
|
hu .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkohu {#1} } ,
|
|
interhchar .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkointerhchar {#1} } ,
|
|
lowerexclamation .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkolowerexclamation {#1} } ,
|
|
lowerperiod .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkolowerperiod {#1} } ,
|
|
lowercomma .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkolowercomma {#1} } ,
|
|
lowerquestion .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkolowerquestion {#1} } ,
|
|
postexclamationkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopostexclamationkern {#1} } ,
|
|
postmathskip .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopostmathskip {#1} } ,
|
|
postperiodkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopostperiodkern {#1} } ,
|
|
postcommakern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopostcommakern {#1} } ,
|
|
postquestionkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopostquestionkern {#1} } ,
|
|
preexclamationkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopreexclamationkern {#1} } ,
|
|
preperiodkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkopreperiodkern {#1} } ,
|
|
precommakern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkoprecommakern {#1} } ,
|
|
prequestionkern .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkoprequestionkern {#1} } ,
|
|
quoteraise .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkoquoteraise {#1} } ,
|
|
quotewidth .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkoquotewidth {#1} } ,
|
|
charraise .code:n =
|
|
{ \__xtxko_add_font_opt:Nn \xetexkocharraise {#1} } ,
|
|
InterLatinCJK .meta:n = { hu = {#1} } ,
|
|
InterHangul .meta:n = { interhchar = {#1} } ,
|
|
PunctRaise .meta:n = { lowerperiod = { \dim_eval:n {-#1} } } ,
|
|
CharRaise .meta:n = { charraise = {#1} } ,
|
|
}
|
|
\tl_set_eq:NN \l_xtxko_hangul_font_opts_init_tl \l_xtxko_font_opts_init_tl
|
|
\cs_new:Nn \__xtxko_hangul_assign_font_opts:n
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_hangul_font_opts_init_tl
|
|
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
|
|
}
|
|
\tl_set_eq:NN \l_xtxko_hanja_font_opts_init_tl \l_xtxko_font_opts_init_tl
|
|
\cs_new:Nn \__xtxko_hanja_assign_font_opts:n
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_hanja_font_opts_init_tl
|
|
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
|
|
}
|
|
\cs_new:Nn \__xtxko_def_XKhan__fonts:nnn
|
|
{
|
|
\cs_if_eq:NNF #1 \relax
|
|
{
|
|
\str_if_eq:eeT \familydefault #2
|
|
{
|
|
\cs_if_eq:NNTF \XKhangulfont #1
|
|
{
|
|
\cs_set_nopar:Npn #1
|
|
{
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont \c__xtxko_one_int #3
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
{
|
|
\cs_set_nopar:Npn #1
|
|
{
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont \c__xtxko_two_int #3
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
\cs_if_eq:NNTF \rmdefault #2
|
|
{
|
|
\cs_set_eq:NN \XK@default@korean@font \XK@rm@korean@font
|
|
}
|
|
{
|
|
\cs_if_eq:NNTF \sfdefault #2
|
|
{
|
|
\cs_set_eq:NN \XK@default@korean@font \XK@sf@korean@font
|
|
}
|
|
{
|
|
\cs_set_eq:NN \XK@default@korean@font \XK@tt@korean@font
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
% suppress bx font warnings
|
|
\cs_new_nopar:Npn \l_xetexko_pacify_bfseries {
|
|
\tl_map_inline:nn { \mddefault \bfdefault }
|
|
{
|
|
\cs_if_exist:cF { \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
|
|
{
|
|
\cs_set_eq:cc
|
|
{ \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\updefault }
|
|
{ \g_fontspec_encoding_tl/\l_fontspec_family_tl/##1/\shapedefault }
|
|
}
|
|
}
|
|
\tl_map_inline:nn { \shapedefault \updefault \itdefault \sldefault }
|
|
{
|
|
\cs_if_exist:cF { \g_fontspec_encoding_tl/\l_fontspec_family_tl/bx/##1 }
|
|
{
|
|
\cs_set_eq:cc
|
|
{ \g_fontspec_encoding_tl/\l_fontspec_family_tl/bx/##1 }
|
|
{ \g_fontspec_encoding_tl/\l_fontspec_family_tl/\bfdefault/##1 }
|
|
}
|
|
}
|
|
}
|
|
%%%%%%%%%%%%%%%%%%%%
|
|
% user font commands
|
|
\DeclareDocumentCommand \setmainhangulfont { O{} m O{} }
|
|
{
|
|
\__xtxko_hangul_assign_font_opts:n {Ligatures=TeX,#1,#3}
|
|
\setfontfamily \kormainfont {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \kormainfont \l_xtxko_font_opts_tl
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \rmdefault \kormainfont
|
|
\ignorespaces
|
|
}
|
|
\DeclareDocumentCommand \setsanshangulfont { O{} m O{} }
|
|
{
|
|
\__xtxko_hangul_assign_font_opts:n {Ligatures=TeX,#1,#3}
|
|
\setfontfamily \korsansfont {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \korsansfont \l_xtxko_font_opts_tl
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \sfdefault \korsansfont
|
|
\ignorespaces
|
|
}
|
|
\DeclareDocumentCommand \setmonohangulfont { O{} m O{} }
|
|
{
|
|
\setfontfamily \kormonofont {#2} [#1,#3]
|
|
\l_xetexko_pacify_bfseries
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhangulfont \ttdefault \kormonofont
|
|
\ignorespaces
|
|
}
|
|
\DeclareDocumentCommand \setmainhanjafont { O{} m O{} }
|
|
{
|
|
\__xtxko_hanja_assign_font_opts:n {Ligatures=TeX,#1,#3}
|
|
\setfontfamily \hnjmainfont {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \hnjmainfont \l_xtxko_font_opts_tl
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \rmdefault \hnjmainfont
|
|
\ignorespaces
|
|
}
|
|
\DeclareDocumentCommand \setsanshanjafont { O{} m O{} }
|
|
{
|
|
\__xtxko_hanja_assign_font_opts:n {Ligatures=TeX,#1,#3}
|
|
\setfontfamily \hnjsansfont {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \hnjsansfont \l_xtxko_font_opts_tl
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \sfdefault \hnjsansfont
|
|
\ignorespaces
|
|
}
|
|
\DeclareDocumentCommand \setmonohanjafont { O{} m O{} }
|
|
{
|
|
\setfontfamily \hnjmonofont {#2} [#1,#3]
|
|
\l_xetexko_pacify_bfseries
|
|
\__xtxko_def_XKhan__fonts:nnn \XKhanjafont \ttdefault \hnjmonofont
|
|
\ignorespaces
|
|
}
|
|
%% {hangul,hanja}fontspec = adhoc{hangul,hanja}font
|
|
\DeclareDocumentCommand \adhochangulfont { O{} m O{} }
|
|
{
|
|
\__xtxko_hangul_assign_font_opts:n {#1,#3}
|
|
\setfontfamily \XK@adhoc@hangul@font {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \XK@adhoc@hangul@font \l_xtxko_font_opts_tl
|
|
\cs_set_nopar:Npn \XKhangulfont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_one_int
|
|
\XK@adhoc@hangul@font
|
|
\XK@storecjkfont
|
|
}
|
|
\ignorespaces
|
|
}
|
|
\cs_set_eq:NN \hangulfontspec \adhochangulfont
|
|
\DeclareDocumentCommand \adhochanjafont { O{} m O{} }
|
|
{
|
|
\__xtxko_hanja_assign_font_opts:n {#1,#3}
|
|
\setfontfamily \XK@adhoc@hanja@font {#2} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:NV \XK@adhoc@hanja@font \l_xtxko_font_opts_tl
|
|
\cs_set_nopar:Npn \XKhanjafont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_two_int
|
|
\XK@adhoc@hanja@font
|
|
\XK@storecjkfont
|
|
}
|
|
\ignorespaces
|
|
}
|
|
\cs_set_eq:NN \hanjafontspec \adhochanjafont
|
|
%% new{hangul,hanja}font{family,face}
|
|
\DeclareDocumentCommand \newhangulfontfamily { m O{} m O{} }
|
|
{
|
|
\__xtxko_hangul_assign_font_opts:n {#2,#4}
|
|
\exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
|
|
\DeclareRobustCommand #1
|
|
{
|
|
\cs_set_nopar:Npn \XKhangulfont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_one_int
|
|
\use:c { XK@newfont@family \token_to_str:N #1 }
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
}
|
|
\DeclareDocumentCommand \newhanjafontfamily { m O{} m O{} }
|
|
{
|
|
\__xtxko_hanja_assign_font_opts:n {#2,#4}
|
|
\exp_args:Nc \setfontfamily { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
|
|
\l_xetexko_pacify_bfseries
|
|
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
|
|
\DeclareRobustCommand #1
|
|
{
|
|
\cs_set_nopar:Npn \XKhanjafont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_two_int
|
|
\use:c { XK@newfont@family \token_to_str:N #1 }
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
}
|
|
\DeclareDocumentCommand \newhangulfontface { m O{} m O{} }
|
|
{
|
|
\__xtxko_hangul_assign_font_opts:n {#2,#4}
|
|
\exp_args:Nc \setfontface { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
|
|
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
|
|
\DeclareRobustCommand #1
|
|
{
|
|
\cs_set_nopar:Npn \XKhangulfont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_one_int
|
|
\use:c { XK@newfont@family \token_to_str:N #1 }
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
}
|
|
\DeclareDocumentCommand \newhanjafontface { m O{} m O{} }
|
|
{
|
|
\__xtxko_hanja_assign_font_opts:n {#2,#4}
|
|
\exp_args:Nc \setfontface { XK@newfont@family \token_to_str:N #1 } {#3} [\l_xtxko_rem_tl]
|
|
\tl_put_right:cV { XK@newfont@family \token_to_str:N #1 } \l_xtxko_font_opts_tl
|
|
\DeclareRobustCommand #1
|
|
{
|
|
\cs_set_nopar:Npn \XKhanjafont
|
|
{
|
|
\XK@storeltnfont
|
|
\cs_set_eq:NN \XKcurrentfont \c__xtxko_two_int
|
|
\use:c { XK@newfont@family \token_to_str:N #1 }
|
|
\XK@storecjkfont
|
|
}
|
|
}
|
|
}
|
|
%% add{hangul,hanja}fontfeature[s]
|
|
\cs_set_nopar:Npn \xetexkopacifybfseries {
|
|
\tl_map_inline:nn { \mddefault \bfdefault }
|
|
{
|
|
\cs_if_exist:cF { \f@encoding/\f@family/##1/\updefault }
|
|
{
|
|
\cs_gset_eq:cc
|
|
{ \f@encoding/\f@family/##1/\updefault }
|
|
{ \f@encoding/\f@family/##1/\shapedefault }
|
|
}
|
|
}
|
|
\tl_map_inline:nn { \shapedefault \updefault \itdefault \sldefault }
|
|
{
|
|
\cs_if_exist:cF { \f@encoding/\f@family/bx/##1 }
|
|
{
|
|
\cs_gset_eq:cc
|
|
{ \f@encoding/\f@family/bx/##1 }
|
|
{ \f@encoding/\f@family/\bfdefault/##1 }
|
|
}
|
|
}
|
|
}
|
|
\DeclareDocumentCommand \addhangulfontfeature { m }
|
|
{
|
|
\group_begin:
|
|
\fontseries\mddefault\fontshape\shapedefault \XKhangulfont
|
|
\tl_clear:N \l_xtxko_font_opts_tl
|
|
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
|
|
\addfontfeature {\l_xtxko_rem_tl}
|
|
\xetexkopacifybfseries
|
|
\use:x
|
|
{
|
|
\group_end:
|
|
\exp_not:N \cs_set_nopar:Npn \exp_not:N \XKhangulfont
|
|
{
|
|
\exp_not:V \XKhangulfont
|
|
\exp_not:N \fontfamily { \f@family } \exp_not:N \selectfont
|
|
\exp_not:V \l_xtxko_font_opts_tl
|
|
\exp_not:N \XK@storecjkfont
|
|
}
|
|
}
|
|
\ignorespaces
|
|
}
|
|
\cs_set_eq:NN \addhangulfontfeatures \addhangulfontfeature
|
|
\DeclareDocumentCommand \addhanjafontfeature { m }
|
|
{
|
|
\group_begin:
|
|
\fontseries\mddefault\fontshape\shapedefault \XKhanjafont
|
|
\tl_clear:N \l_xtxko_font_opts_tl
|
|
\keys_set_known:nxN { xtxko-font } {#1} \l_xtxko_rem_tl
|
|
\addfontfeature {\l_xtxko_rem_tl}
|
|
\xetexkopacifybfseries
|
|
\use:x
|
|
{
|
|
\group_end:
|
|
\exp_not:N \cs_set_nopar:Npn \exp_not:N \XKhanjafont
|
|
{
|
|
\exp_not:V \XKhanjafont
|
|
\exp_not:N \fontfamily { \f@family } \exp_not:N \selectfont
|
|
\exp_not:V \l_xtxko_font_opts_tl
|
|
\exp_not:N \XK@storecjkfont
|
|
}
|
|
}
|
|
\ignorespaces
|
|
}
|
|
\cs_set_eq:NN \addhanjafontfeatures \addhanjafontfeature
|
|
%% default hangul font features
|
|
\DeclareDocumentCommand \defaulthangulfontfeatures { t+ o m } % o is ignored
|
|
{
|
|
\IfBooleanTF {#1}
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_hangul_font_opts_init_tl
|
|
}
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_font_opts_init_tl
|
|
}
|
|
\keys_set_known:nxN { xtxko-font } {#3} \l_xtxko_rem_tl % rem_tl ignored
|
|
\tl_set_eq:NN \l_xtxko_hangul_font_opts_init_tl \l_xtxko_font_opts_tl
|
|
}
|
|
\DeclareDocumentCommand \defaulthanjafontfeatures { t+ o m } % o is ignored
|
|
{
|
|
\IfBooleanTF {#1}
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_hanja_font_opts_init_tl
|
|
}
|
|
{
|
|
\tl_set_eq:NN \l_xtxko_font_opts_tl \l_xtxko_font_opts_init_tl
|
|
}
|
|
\keys_set_known:nxN { xtxko-font } {#3} \l_xtxko_rem_tl % rem_tl ignored
|
|
\tl_set_eq:NN \l_xtxko_hanja_font_opts_init_tl \l_xtxko_font_opts_tl
|
|
}
|
|
%% math hangul font
|
|
\DeclareDocumentCommand \setmathhangulfont { O{} m O{} }
|
|
{
|
|
\fontspec_set_family:Nnn \xetexko@math@hangul@family {#1,#3} {#2}
|
|
\l_xetexko_pacify_bfseries
|
|
}
|
|
%%%%%%%%%%%%%%%%%%%%
|
|
%% xetexkofontregime
|
|
\keys_define:nn { xtxko-char }
|
|
{
|
|
alphs .code:n = \use:c { #1alphs } ,
|
|
nums .code:n = \use:c { #1nums } ,
|
|
parens .code:n = \use:c { #1parens } ,
|
|
quotes .code:n = \use:c { #1quotes } ,
|
|
puncts .code:n = \use:c { #1puncts } ,
|
|
colons .code:n = \use:c { #1colons } ,
|
|
hyphens .code:n = \use:c { #1hyphens } ,
|
|
cjksymbols .code:n = \use:c { #1cjksymbols } ,
|
|
}
|
|
\DeclareDocumentCommand \xetexkofontregime { O{} m O{} }
|
|
{
|
|
\use:c { #2marks }
|
|
\keys_set:nn { xtxko-char } { #1,#3 }
|
|
}
|
|
\ExplSyntaxOff
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% font switching for latex
|
|
\def\XKstoreprevfont{%
|
|
\ifx\f@family\XKcjkprevfont\let\f@family\XKltnprevfont\fi
|
|
}
|
|
\def\XK@storeltnfont{%
|
|
\ifx\f@family\XKcjkprevfont\else\let\XKltnprevfont\f@family\fi
|
|
}
|
|
\def\XK@storecjkfont{%
|
|
\let\XKcjkprevfont\f@family
|
|
\edef\XKplaincjkprevfont{\the\font}%
|
|
}
|
|
\edef\XKlatinfont{\unexpanded\expandafter{\XKstoreprevfont
|
|
\chardef\XKcurrentfont\z@
|
|
\edef\XK@plain@curr@font{\the\font}%
|
|
\ifx\XK@plain@curr@font\XKplaincjkprevfont
|
|
\selectfont
|
|
\fi
|
|
}}
|
|
|
|
\def\XK@rm@korean@font{%
|
|
\ifx\XKhangulfont\relax\else
|
|
\def\XKhangulfont{%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\@ne\kormainfont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
\ifx\XKhanjafont\relax\else
|
|
\def\XKhanjafont {%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\tw@\hnjmainfont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
}
|
|
\def\XK@sf@korean@font{%
|
|
\ifx\XKhangulfont\relax\else
|
|
\def\XKhangulfont{%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\@ne\korsansfont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
\ifx\XKhanjafont\relax\else
|
|
\def\XKhanjafont {%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\tw@\hnjsansfont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
}
|
|
\def\XK@tt@korean@font{%
|
|
\ifx\XKhangulfont\relax\else
|
|
\def\XKhangulfont{%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\@ne\kormonofont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
\ifx\XKhanjafont\relax\else
|
|
\def\XKhanjafont {%
|
|
\XK@storeltnfont
|
|
\chardef\XKcurrentfont\tw@\hnjmonofont
|
|
\XK@storecjkfont
|
|
}%
|
|
\fi
|
|
\disablehangulspacing
|
|
}
|
|
|
|
% using latex 2020's font family hooks
|
|
\edef\@rmfamilyhook{\unexpanded\expandafter{\@rmfamilyhook \XK@rm@korean@font}}
|
|
\edef\@sffamilyhook{\unexpanded\expandafter{\@sffamilyhook \XK@sf@korean@font}}
|
|
\edef\@ttfamilyhook{\unexpanded\expandafter{\@ttfamilyhook \XK@tt@korean@font}}
|
|
\edef\@defaultfamilyhook{\unexpanded\expandafter{\@defaultfamilyhook
|
|
\XK@default@korean@font }}
|
|
\let\XK@default@korean@font\relax
|
|
|
|
\edef\verbatim@font{\unexpanded\expandafter{\verbatim@font
|
|
\disablehangulspacingandlinebreak
|
|
\let\XKstoreprevfont\XKlatinfont
|
|
}}
|
|
|
|
% for default font loading
|
|
\def\XKiffontfamilyhasunichar#1#2#3#4{%
|
|
\begingroup \fontfamily{#1}\selectfont\expandafter\endgroup
|
|
\iffontchar\font"#2\relax #3\else #4\fi
|
|
}
|
|
|
|
\AtBeginDocument{%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% default main hangul: unbatang
|
|
\ifdefined\kormainfont\else
|
|
\XKiffontfamilyhasunichar{\rmdefault}{AC00}
|
|
{\let\kormainfont\relax}
|
|
{\IfFontExistsTF{UnBatang.ttf}
|
|
{\setmainhangulfont{UnBatang.ttf}[BoldFont=UnBatangBold.ttf]}
|
|
{\let\kormainfont\relax}%
|
|
}%
|
|
\fi
|
|
\ifdefined\hnjmainfont\else \let\hnjmainfont\kormainfont \fi
|
|
|
|
% default sans hangul: undotum
|
|
\ifdefined\korsansfont\else
|
|
\XKiffontfamilyhasunichar{\sfdefault}{AC00}
|
|
{\let\korsansfont\relax}
|
|
{\IfFontExistsTF{UnDotum.ttf}
|
|
{\setsanshangulfont{UnDotum.ttf}[BoldFont=UnDotumBold.ttf]}
|
|
{\let\korsansfont\relax}%
|
|
}%
|
|
\fi
|
|
\ifdefined\hnjsansfont\else \let\hnjsansfont\korsansfont \fi
|
|
|
|
\ifdefined\kormonofont\else \let\kormonofont\korsansfont \fi
|
|
\ifdefined\hnjmonofont\else \let\hnjmonofont\kormonofont \fi
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% reset hangul font and normalfont
|
|
\expandafter\ifx\familydefault\sfdefault
|
|
\let\XK@default@korean@font\XK@sf@korean@font
|
|
\else \expandafter\ifx\familydefault\ttdefault
|
|
\let\XK@default@korean@font\XK@tt@korean@font
|
|
\else
|
|
\let\XK@default@korean@font\XK@rm@korean@font
|
|
\fi\fi
|
|
\XK@default@korean@font
|
|
%%%%%%%%%%%%%%%%%%%%%
|
|
% hangul in math mode
|
|
\begingroup
|
|
\ifx\xetexko@math@hangul@family\undefined
|
|
\edef\@tempb{\sfdefault}\edef\@tempc{\ttdefault}%
|
|
\ifx\f@family\@tempb \korsansfont \else
|
|
\ifx\f@family\@tempc \kormonofont \else
|
|
\kormainfont \fi\fi
|
|
\xdef\xetexko@math@hangul@family{\f@family}\fi
|
|
\endgroup
|
|
\DeclareSymbolFont{mathhangul}\f@encoding\xetexko@math@hangul@family
|
|
\mddefault\updefault
|
|
\ifcsname \f@encoding/\xetexko@math@hangul@family/\bfdefault/\updefault\endcsname
|
|
\SetSymbolFont{mathhangul}{bold}\f@encoding\xetexko@math@hangul@family
|
|
\bfdefault\updefault
|
|
\fi
|
|
\setmathhangulblock{AC00}{D7A3}
|
|
}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%
|
|
% under [hangul] option
|
|
\if@hangul
|
|
\linespread{1.3888}
|
|
\footnotesep=1.3888\footnotesep
|
|
\skip\footins=\glueexpr\skip\footins/72*100\relax
|
|
% frenchspacing is default
|
|
\frenchspacing
|
|
\fi
|
|
|
|
\endinput
|
|
|