diff options
Diffstat (limited to 'macros/luatex/generic/luatexja')
24 files changed, 1082 insertions, 717 deletions
diff --git a/macros/luatex/generic/luatexja/COPYING b/macros/luatex/generic/luatexja/COPYING index 610a7b62b2..b82ffc50fe 100644 --- a/macros/luatex/generic/luatexja/COPYING +++ b/macros/luatex/generic/luatexja/COPYING @@ -1,4 +1,4 @@ -Copyright (c) 2011--2023 The LuaTeX-ja project, All rights reserved. +Copyright (c) 2011--2024 The LuaTeX-ja project, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/macros/luatex/generic/luatexja/README b/macros/luatex/generic/luatexja/README index 4e48f6c82f..0bc40ac643 100644 --- a/macros/luatex/generic/luatexja/README +++ b/macros/luatex/generic/luatexja/README @@ -1,6 +1,6 @@ -The LuaTeX-ja Package 20240219.0 +The LuaTeX-ja Package 20240714.0 -------------------------------- -Copyright (c) 2011--2023 The LuaTeX-ja project +Copyright (c) 2011--2024 The LuaTeX-ja project License: modified BSD (see COPYING) LuaTeX-ja is a macro package for typesetting Japanese documents with LuaTeX. @@ -24,7 +24,8 @@ Installation - LuaTeX 1.10.0 (or later) - luaotfload (v3.1 or later recommended) - adobemapping (Adobe CMap files) - - LaTeX2e 2020-02-02 patch level 5 or later (if you want to use with LaTeX) + - LaTeX2e 2021-06-01 or later (if you want to use with LaTeX) + - l3kernel about 2023-10-10 or later - etoolbox package - ltxcmds package, pdftexcmds package - filehook package, atbegshi package (for LaTeX2e 2020-02-02) @@ -32,7 +33,7 @@ Installation - Harano Aji fonts (https://github.com/trueroad/HaranoAjiFonts) more specifically, HaranoAjiMincho-Regular and HaranoAjiGothic-Medium - Using LuaTeX-ja with LuaHBTeX is not well tested. + Using LuaTeX-ja with Harfbuzz is not well tested. One might be able to typeset documents without an error, but with some unwanted results. @@ -41,7 +42,7 @@ Installation 2. If you must/want to install manually: a. Download the source archive from CTAN, - or tagged as 20240219.0 in the Git repository by + or tagged as 20240714.0 in the Git repository by <https://github.com/luatexja/luatexja/archive/refs/tags/$VER.zip> b. Extract the archive and process following three files by LuaLaTeX @@ -91,4 +92,4 @@ Notes This file and ltj-kinsoku.lua are not used anymore. (Do not remove ltj-kinsoku.tex.) -Last commit date: Mon Feb 19 19:11:46 2024 +0900 +Last commit date: Sun Jul 14 08:56:04 2024 +0900 diff --git a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf Binary files differindex 547c5f9b46..eac7af315d 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-en.pdf +++ b/macros/luatex/generic/luatexja/doc/luatexja-en.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf Binary files differindex 3dc1d9a8d7..ee55789a60 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf +++ b/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf diff --git a/macros/luatex/generic/luatexja/doc/luatexja.dtx b/macros/luatex/generic/luatexja/doc/luatexja.dtx index dace65c689..9ad5209465 100644 --- a/macros/luatex/generic/luatexja/doc/luatexja.dtx +++ b/macros/luatex/generic/luatexja/doc/luatexja.dtx @@ -648,14 +648,9 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %<ja> (DVI出力(\cs{outputmode=0})は対応していない.) \item recent \href{https://github.com/latex3/luaotfload}{\Pkg{luaotfload}} (v3.1 or later recommended) \item \Pkg{adobemapping} (Adobe cmap and pdfmapping files) -\item \LaTeXe\ 2020-02-02 patch level 5 or later -%<en> (if you want to use \LuaTeX-ja with \LaTeXe) -%<ja> (\LaTeXe 下で\LuaTeX-jaを使う場合) \item \href{https://github.com/josephwright/etoolbox/}{\Pkg{etoolbox}} %<en> (if you want to use \LuaTeX-ja with \LaTeXe) %<ja> (\LaTeXe 下で\LuaTeX-jaを使う場合) -\item \Pkg{everysel} (only for \LaTeXe\ 2020-02-02~and~2020-10-01) -\item \Pkg{filehook}, \Pkg{atbegshi} (only for \LaTeXe\ 2020-02-02) \item \Pkg{ltxcmds}, \Pkg{pdftexcmds} \item \href{https://github.com/wspr/fontspec/}{\Pkg{fontspec}} v2.7c (or later) %<*en> @@ -1472,14 +1467,19 @@ Alphabetic fonts &\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule Japanese fonts -&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\ +&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\ +Alphabetic fonts +&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\ +\midrule +Japanese fonts +&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\ Alphabetic fonts -&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\ +&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\ \midrule Japanese fonts -&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ Alphabetic fonts -&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ +&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule \end{tabular}\par} \end{table} @@ -1497,14 +1497,19 @@ Alphabetic fonts &\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule \emph{和文} -&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}\\ +&\cs{newjfontfamily}&\cs{renewjfontfamily}&\cs{setjfontfamily}&\cs{providejfontfamily}\\ +\emph{欧文} +&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}&\cs{providefontfamily}\\ +\midrule +\emph{和文} +&\cs{newjfontface}&\cs{renewjfontface}&\cs{setjfontface}&\cs{providejfontface}\\ \emph{欧文} -&\cs{newfontfamily}&\cs{renewfontfamily}&\cs{setfontfamily}\\ +&\cs{newfontface}&\cs{renewfontface}&\cs{setfontface}&\cs{providefontface}\\ \midrule \emph{和文} -&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ \emph{欧文} -&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ +&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule \end{tabular}\par} \end{table} @@ -7838,7 +7843,7 @@ stretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50} さらに,バージョン20220211.0以降では次の命令が提供される. \begin{cslist} - \item[\cs{ltjghostbeginjachar}] + \item[\cs{ltjghostbeforejachar}] \LuaTeX-ja本体が提供している\cs{ltjfakeparbegin}, \cs{ltjfakeboxbdd}と類似の命令である. 実行された箇所が(限定・非限定を問わず)水平モードであった場合に,実行された箇所は 「文字クラス0の\textbf{JAchar}」の直前であると, @@ -7855,7 +7860,7 @@ A\LG 字 \par% ==> ALchar--(xkanjiskip)--\LG \end{LTXexample} \item[\cs{ltjghostafterjachar}] - \cs{ltjghostbeginjachar}と対を成す命令で,実行された箇所は + \cs{ltjghostbeforejachar}と対を成す命令で,実行された箇所は 「文字クラス0の\textbf{JAchar}」の直後であると, \LuaTeX-jaの和文処理グルー挿入処理に認識させる.以下の実行例を参照. diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty index 76ebf8716c..6ef3ff1751 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec-27c}[2024-02-19 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec-27c}[2024-05-27 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e} \ExplSyntaxOn @@ -359,10 +359,24 @@ \setfontfamily #1 [#2,#4] {#3} \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn } +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} \DeclareDocumentCommand \newjfontface { m O{} m O{} } { \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} } +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} \prop_new:N \l__ltj_fontspec_tmp_prop \prop_new:N \g__ltj_fontspec_fontopts_prop diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty new file mode 100644 index 0000000000..51af33447c --- /dev/null +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29c.sty @@ -0,0 +1,429 @@ +% +% luatexja-fontspec-29c.sty +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{luatexja-fontspec-29c}[2024-05-27 fontspec support of LuaTeX-ja] +\RequirePackage{l3keys2e} +\ExplSyntaxOn + +%%%%%%%% Change Japanese font family by \rmfamily or not +\bool_if:NT \__ltj_fontspec_match_bool { + \renewcommand\jttdefault{\gtdefault} + \@ltj@match@familytrue +} +%%%%%%%% Messages +\msg_new:nnn {luatexja-fontspec} {addjfontfeatures-ignored} +{ + \string\addjfontfeature (s)~ ignored;\\ + it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec. +} + +\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-norange} +{ + ignored~ sublist~ `#1'~ in~ AltFont~ (no~ range~ is~ specified). +} + +\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} +{ + ignored~ sublist~ `#1'~ in~ AltFont~ (only~ range~ is~ specified). +} + +\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx} + +%%%%%%%% Internal control sequences +%% Each CS is ltj_fontspec version that corresponds to original CS of fontspec. +\cs_new:Nn \__ltj_fontspec_define_option:nn { + \__fontspec_keys_define_code:nnn {fontspec} {#1} {#2} +} +\cs_new:Nn \__ltj_fontspec_define_preparse_external:nn { + \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {#1} {#2} +} +\cs_new:Nn \__ltj_fontspec_define_altfont_option:nn { + \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont} {#1} {#2} +} + +%% Alternate Fonts +%% Spec: AltFont = { +%% ... +%% { Range = <range>, <font features> }, +%% { Range = <range>, Font = <font name>, <font features> }, +%% { Range = <range>, Font = <font name> }, +%% ... +%% } +\tl_new:N \l__ltj_fontspec_altname_tl +\tl_new:N \l__ltj_fontspec_altrange_tl +\clist_new:N \l__ltj_fontspec_altfont_clist +\clist_new:N \l__ltj_fontspec_altfont_leftover_clist +\int_new:N \g__ltj_fontspec_altnumber_int + +\__ltj_fontspec_define_altfont_option:nn {Range} { + \tl_set:Nn \l__ltj_fontspec_altrange_tl {#1} +} +\__ltj_fontspec_define_altfont_option:nn {Font} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_altname_tl {#1} +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} { + \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} { + \tl_if_empty:nF {#1} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {#1} + } +} +%% +\clist_new:N \l__ltj_fontspec_fontfeat_yoko_clist +\clist_new:N \l__ltj_fontspec_fontfeat_tate_clist +\tl_new:N \l__ltj_fontspec_fontname_tate_tl + +\cs_new:Npn \__ltj_fontspec_DeclareFontFamily #1 #2 #3 { + \DeclareKanjiFamily {JY3} {#2} {#3} + \DeclareKanjiFamily {JT3} {#2} {#3} +} + +%% save and restore global variable +\tl_new:N \g__ltj_fontspec_kanji_nfss_family_tl +\tl_new:N \g__ltj_fontspec_orig_nfss_family_tl +\seq_new:N \l__ltj_fontspec_kanji_bf_series_seq +\seq_new:N \l__ltj_fontspec_orig_bf_series_seq +\clist_new:N \g__ltj_fontspec_kanji_default_fontopts_clist +\clist_new:N \g__ltj_fontspec_orig_default_fontopts_clist + +\cs_new:Nn \__ltj_set_global_variable_for_kanji: { + \tl_gset_eq:NN \g__ltj_fontspec_orig_nfss_family_tl \g__fontspec_nfss_family_tl + \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_kanji_nfss_family_tl + \seq_set_eq:NN \l__ltj_fontspec_orig_bf_series_seq \l__fontspec_bf_series_seq + \seq_set_eq:NN \l__fontspec_bf_series_seq \l__ltj_fontspec_kanji_bf_series_seq + %\seq_gclear:N \g__fontspec_bf_series_seq + \clist_set_eq:NN \g__ltj_fontspec_orig_default_fontopts_clist \g__fontspec_default_fontopts_clist + \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_kanji_default_fontopts_clist +} + +\cs_new:Nn \__ltj_restore_global_variable: { + \tl_gset_eq:NN \g__ltj_fontspec_kanji_nfss_family_tl \g__fontspec_nfss_family_tl + \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_orig_nfss_family_tl + \seq_set_eq:NN \l__ltj_fontspec_kanji_bf_series_seq \l__fontspec_bf_series_seq + \seq_set_eq:NN \l__fontspec_bf_series_seq \l__ltj_fontspec_orig_bf_series_seq + \clist_set_eq:NN \g__ltj_fontspec_kanji_default_fontopts_clist \g__fontspec_default_fontopts_clist + \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_orig_default_fontopts_clist +} + +\cs_set_eq:NN \__ltj_orig_fontspec_select_font_family:nn \__fontspec_select_font_family:nn +\cs_new_protected:Nn \__ltj_fontspec_select_font_family:nn { + \group_begin: + \__ltj_fontspec_define_option:nn {NoEmbed} {} + \__ltj_fontspec_define_option:nn {AltFont} { + \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {CID} { + \__fontspec_update_featstr:n {cid=##1} + } + \__ltj_fontspec_define_option:nn {Kanjiskip} { + \str_if_eq:eeTF {false} { \str_lower_case:n { ##1 } }{ + \__fontspec_update_featstr:n {-ltjksp} + } { + \__fontspec_update_featstr:n {+ltjksp} + } + } + \__ltj_fontspec_define_option:nn {JFM} { + \__fontspec_update_featstr:n {jfm=##1} + } + % vary by shape + \__ltj_fontspec_define_option:nn {YokoFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {TateFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {TateFont} + { + \tl_if_empty:nF {##1} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {##1} + } + } + \__ltj_fontspec_define_option:nn {JFM-var} { + \__fontspec_update_featstr:n {jfmvar=##1} + } + \__ltj_fontspec_define_preparse_external:nn {NoEmbed} { + \cs_set:Npn \__fontspec_fontname_wrap:n ##1 {psft:##1} + } + + %% Omit the warning message + %% "OpenType feature 'Kerning=Off' (-kern) not available ..." + \keys_define:nn {fontspec-opentype} { + Kerning/Off.code:n=\__fontspec_update_featstr:n {-kern} + } + \clist_set:Ne \g__fontspec_default_fontopts_clist { + YokoFeatures = { JFM=\ltj@stdyokojfm }, TateFeatures = { JFM=\ltj@stdtatejfm }, + Scale=\Cjascale, Kerning=Off, Script=CJK, + \g__ltj_fontspec_kanji_default_fontopts_clist + } + \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop + \cs_set_eq:NN \__fontspec_make_font_shapes:Nnnnn \__ltj_fontspec_make_font_shapes:Nnnnn + \cs_set_eq:NN \DeclareFontFamily \__ltj_fontspec_DeclareFontFamily + \tl_set:Nn \g_fontspec_encoding_tl {JY3} + \__ltj_orig_fontspec_select_font_family:nn{#1}{#2} + + \cs_gset:Npx \__ltj_fontspec_aftergroup { + \exp_not:N \tl_set:Nn \exp_not:N \l_fontspec_family_tl { \l_fontspec_family_tl } + } + \aftergroup \__ltj_fontspec_aftergroup + \group_end: +} + +%% declare_shape + +\cs_new:Nn \__ltj_fontspec_declare_shape_yoko:nnnn { + \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l__ltj_fontspec_fontfeat_yoko_clist } +} +\cs_new:Nn \__ltj_fontspec_declare_shape_tate:nnnn { + \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l__ltj_fontspec_fontfeat_tate_clist } +} +\cs_new:Nn \__ltj_fontspec_declare_shape:nnnn { + \__ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4} + \__ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4} +} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape:nnnn {nnxx} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {nnxx} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_tate:nnnn {nnxx} + +\cs_new:Nn \__ltj_fontspec_declare_shape_aux:nnnnnn +{ + \tl_build_begin:N \l__fontspec_nfss_tl + \tl_build_begin:N \l__fontspec_nfss_sc_tl + \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl + + \tl_set:Nn \g_fontspec_encoding_tl {#5} + \tl_set:Nn \g__fontspec_nfss_enc_tl {#5} + \exp_args:Ne \clist_map_inline:nn {#4} + { \__ltj_fontspec_setup_single_size:nnn {#3} {#6} {##1} } + \tl_build_end:N \l__fontspec_nfss_tl + \tl_build_end:N \l__fontspec_nfss_sc_tl + + \bool_set_true:N \l__fontspec_nosc_bool + \__fontspec_declare_shapes_normal:nn {#1} {#2} + \__fontspec_declare_shape_slanted:nn {#1} {#2} +} + +\cs_new:Nn \__ltj_fontspec_setup_single_size:nnn +{ + \tl_clear:N \l__fontspec_size_tl + \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed + + \keys_set_known:neN {fontspec-sizing} { \exp_after:wN \use:n #3 } + \l__fontspec_sizing_leftover_clist + \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} } + + \str_if_eq:eeTF { \g__fontspec_nfss_enc_tl } { JY3 } { + % "normal" + \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} + } { + \tl_if_empty:NTF \l__ltj_fontspec_fontname_tate_tl + { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} } + { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__ltj_fontspec_fontname_tate_tl} } + } + \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {#2} {} +} + +\cs_new:Nn \__ltj_fontspec_set_family:Nnn { + \__ltj_set_global_variable_for_kanji: + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn + \__ltj_orig_fontspec_set_family:Nnn #1 {#2} {#3} + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_orig_fontspec_select_font_family:nn + \__ltj_restore_global_variable: +} +\cs_set_eq:NN \__ltj_orig_fontspec_set_family:Nnn \fontspec_set_family:Nnn +\cs_set_eq:NN \__ltj_orig_fontspec_make_font_shapes:Nnnnn \__fontspec_make_font_shapes:Nnnnn +\cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape + +\cs_new:Nn \__ltj_fontspec_make_font_shapes:Nnnnn { + \group_begin: + %% 基底フォント + \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn + \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape:nnxx + \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5} + %% + \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3} + {#4, \l__ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 } + \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3} + {#4, \l__ltj_fontspec_fontfeat_tate_clist}{#5} {JT3} + \group_end: + } + +%%% Altfont 内部処理部 +\cs_new:Nn \__ltj_fontspec_make_font_shapes_alt:Nnnnnn { + \group_begin: + \str_if_eq:eeTF { #6 } { JY3 } { + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_yoko:nnxx + }{ + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_tate:nnxx + } + \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 } + \clist_if_empty:NF \l__ltj_fontspec_altfont_clist { + \int_gzero:N \g__ltj_fontspec_altnumber_int + \clist_map_inline:Nn \l__ltj_fontspec_altfont_clist { + \tl_clear:N \l__ltj_fontspec_altrange_tl + \tl_set:Nn \l__ltj_fontspec_altname_tl { #1 } + \tl_set:Nn \l_tmpa_tl { #1 } + + \keys_set_known:neN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 } + \l__ltj_fontspec_altfont_leftover_clist + \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 } + + \tl_if_empty:NT \l__ltj_fontspec_altrange_tl { + \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 } + } { + \bool_if:nTF { + \tl_if_eq_p:NN \l__ltj_fontspec_altname_tl \l_tmpa_tl + && + \tl_if_empty_p:N \l__ltj_fontspec_altfont_leftover_clist + } { + \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 } + } { + \__ltj_orig_fontspec_make_font_shapes:Nnnnn + { \l__ltj_fontspec_altname_tl } {#2} + {#3 _ alt \int_use:N \g__ltj_fontspec_altnumber_int } + {#4, \l__ltj_fontspec_altfont_leftover_clist } + {#5} + \DeclareAlternateKanjiFont + { #6 }{ \g__fontspec_nfss_family_tl }{#2}{#3}% + { #6 }{ \g__fontspec_nfss_family_tl }{#2} + { #3 _alt \int_use:N \g__ltj_fontspec_altnumber_int } + { \l__ltj_fontspec_altrange_tl } + \int_gincr:N \g__ltj_fontspec_altnumber_int + } + } + } + } + \group_end: +} + + +%%%%%%%% User commands +\DeclareDocumentCommand \jfontspec { O{} m O{} } { + \__ltj_fontspec_set_family:Nnn \k@family {#1,#3}{#2} + \selectfont + \ignorespaces +} + +\DeclareDocumentCommand \setmainjfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[mc]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \mcdefault {#1,#3}{#2} + \unless\ifltj@disablejfam + \DeclareSymbolFont{mincho}{JY3}{\mcdefault}{\mddefault}{n} + \SetSymbolFont{mincho}{bold}{JY3}{\mcdefault}{\bfdefault}{n} + \fi + \normalfont +} + +\DeclareDocumentCommand \setsansjfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[gt]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \gtdefault {#1,#3}{#2} + \unless\ifltj@disablejfam + \DeclareMathAlphabet{\mathgt}{JY3}{\gtdefault}{\mddefault}{n} + \fi + \normalfont +} + +\DeclareDocumentCommand \setmonojfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[jtt]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \jttdefault {#1,#3}{#2} + \normalfont +} + +\DeclareDocumentCommand \newjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \newfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \renewjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \renewfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \setjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \setfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} + +\DeclareDocumentCommand \newjfontface { m O{} m O{} } { + \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} + +\prop_new:N \l__ltj_fontspec_tmp_prop +\prop_new:N \g__ltj_fontspec_fontopts_prop +\DeclareDocumentCommand \defaultjfontfeatures { t+ o m } + { + \IfNoValueTF {#2} + { \__ltj_fontspec_set_default_features:nn {#1} {#3} } + { \__ltj_fontspec_set_font_default_features:nnn {#1} {#2} {#3} } + \ignorespaces + } +\cs_new:Nn \__ltj_fontspec_set_default_features:nn + { + \__ltj_set_global_variable_for_kanji: + \__fontspec_set_default_features:nn {#1} {#2} + \__ltj_restore_global_variable: + } +\cs_new:Nn \__ltj_fontspec_set_font_default_features:nnn + { + \prop_set_eq:NN \l__ltj_fontspec_tmp_prop \g__fontspec_fontopts_prop + \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop + \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} + \prop_set_eq:NN \g__ltj_fontspec_fontopts_prop \g__fontspec_fontopts_prop + \prop_set_eq:NN \g__fontspec_fontopts_prop \l__ltj_fontspec_tmp_prop + } + +\DeclareDocumentCommand \addjfontfeatures {m} { + \__ltj_fontspec_if_fontspec_font:TF + { + \__ltj_set_global_variable_for_kanji: + \group_begin: + \tl_set_eq:NN \f@family \k@family + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn + \addfontfeatures {#1} + \group_end: + \kanjifamily\g__fontspec_nfss_family_tl\selectfont + \__ltj_restore_global_variable: + }{ + \msg_warning:nn {luatexja-fontspec} {addjfontfeatures-ignored} + } + \ignorespaces +} + +\cs_set_eq:NN \addjfontfeature \addjfontfeatures + +\prg_new_conditional:Nnn \__ltj_fontspec_if_fontspec_font: {TF,T,F} +{ + \cs_if_exist:cTF {g__fontspec_fontinfo_ \k@family _prop} \prg_return_true: \prg_return_false: +} + +\endinput diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty new file mode 100644 index 0000000000..02a79ad6ca --- /dev/null +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-29e.sty @@ -0,0 +1,429 @@ +% +% luatexja-fontspec-29e.sty +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{luatexja-fontspec-29e}[2024-05-27 fontspec support of LuaTeX-ja] +\RequirePackage{l3keys2e} +\ExplSyntaxOn + +%%%%%%%% Change Japanese font family by \rmfamily or not +\bool_if:NT \__ltj_fontspec_match_bool { + \renewcommand\jttdefault{\gtdefault} + \@ltj@match@familytrue +} +%%%%%%%% Messages +\msg_new:nnn {luatexja-fontspec} {addjfontfeatures-ignored} +{ + \string\addjfontfeature (s)~ ignored;\\ + it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec. +} + +\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-norange} +{ + ignored~ sublist~ `#1'~ in~ AltFont~ (no~ range~ is~ specified). +} + +\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} +{ + ignored~ sublist~ `#1'~ in~ AltFont~ (only~ range~ is~ specified). +} + +\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx} + +%%%%%%%% Internal control sequences +%% Each CS is ltj_fontspec version that corresponds to original CS of fontspec. +\cs_new:Nn \__ltj_fontspec_define_option:nn { + \__fontspec_keys_define_code:nnn {fontspec} {#1} {#2} +} +\cs_new:Nn \__ltj_fontspec_define_preparse_external:nn { + \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {#1} {#2} +} +\cs_new:Nn \__ltj_fontspec_define_altfont_option:nn { + \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont} {#1} {#2} +} + +%% Alternate Fonts +%% Spec: AltFont = { +%% ... +%% { Range = <range>, <font features> }, +%% { Range = <range>, Font = <font name>, <font features> }, +%% { Range = <range>, Font = <font name> }, +%% ... +%% } +\tl_new:N \l__ltj_fontspec_altname_tl +\tl_new:N \l__ltj_fontspec_altrange_tl +\clist_new:N \l__ltj_fontspec_altfont_clist +\clist_new:N \l__ltj_fontspec_altfont_leftover_clist +\int_new:N \g__ltj_fontspec_altnumber_int + +\__ltj_fontspec_define_altfont_option:nn {Range} { + \tl_set:Nn \l__ltj_fontspec_altrange_tl {#1} +} +\__ltj_fontspec_define_altfont_option:nn {Font} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_altname_tl {#1} +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} { + \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { #1 } +} +\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} { + \tl_if_empty:nF {#1} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {#1} + } +} +%% +\clist_new:N \l__ltj_fontspec_fontfeat_yoko_clist +\clist_new:N \l__ltj_fontspec_fontfeat_tate_clist +\tl_new:N \l__ltj_fontspec_fontname_tate_tl + +\cs_new:Npn \__ltj_fontspec_DeclareFontFamily #1 #2 #3 { + \DeclareKanjiFamily {JY3} {#2} {#3} + \DeclareKanjiFamily {JT3} {#2} {#3} +} + +%% save and restore global variable +\tl_new:N \g__ltj_fontspec_kanji_nfss_family_tl +\tl_new:N \g__ltj_fontspec_orig_nfss_family_tl +\seq_new:N \l__ltj_fontspec_kanji_bf_series_seq +\seq_new:N \l__ltj_fontspec_orig_bf_series_seq +\clist_new:N \g__ltj_fontspec_kanji_default_fontopts_clist +\clist_new:N \g__ltj_fontspec_orig_default_fontopts_clist + +\cs_new:Nn \__ltj_set_global_variable_for_kanji: { + \tl_gset_eq:NN \g__ltj_fontspec_orig_nfss_family_tl \g__fontspec_nfss_family_tl + \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_kanji_nfss_family_tl + \seq_set_eq:NN \l__ltj_fontspec_orig_bf_series_seq \l__fontspec_bf_series_seq + \seq_set_eq:NN \l__fontspec_bf_series_seq \l__ltj_fontspec_kanji_bf_series_seq + %\seq_gclear:N \g__fontspec_bf_series_seq + \clist_set_eq:NN \g__ltj_fontspec_orig_default_fontopts_clist \g__fontspec_default_fontopts_clist + \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_kanji_default_fontopts_clist +} + +\cs_new:Nn \__ltj_restore_global_variable: { + \tl_gset_eq:NN \g__ltj_fontspec_kanji_nfss_family_tl \g__fontspec_nfss_family_tl + \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_orig_nfss_family_tl + \seq_set_eq:NN \l__ltj_fontspec_kanji_bf_series_seq \l__fontspec_bf_series_seq + \seq_set_eq:NN \l__fontspec_bf_series_seq \l__ltj_fontspec_orig_bf_series_seq + \clist_set_eq:NN \g__ltj_fontspec_kanji_default_fontopts_clist \g__fontspec_default_fontopts_clist + \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_orig_default_fontopts_clist +} + +\cs_set_eq:NN \__ltj_orig_fontspec_select_font_family:nn \__fontspec_select_font_family:nn +\cs_new_protected:Nn \__ltj_fontspec_select_font_family:nn { + \group_begin: + \__ltj_fontspec_define_option:nn {NoEmbed} {} + \__ltj_fontspec_define_option:nn {AltFont} { + \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {CID} { + \__fontspec_update_featstr:n {cid=##1} + } + \__ltj_fontspec_define_option:nn {Kanjiskip} { + \str_if_eq:eeTF {false} { \str_lower_case:n { ##1 } }{ + \__fontspec_update_featstr:n {-ltjksp} + } { + \__fontspec_update_featstr:n {+ltjksp} + } + } + \__ltj_fontspec_define_option:nn {JFM} { + \__fontspec_update_featstr:n {jfm=##1} + } + % vary by shape + \__ltj_fontspec_define_option:nn {YokoFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {TateFeatures} { + \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { ##1 } + } + \__ltj_fontspec_define_option:nn {TateFont} + { + \tl_if_empty:nF {##1} { + \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {##1} + } + } + \__ltj_fontspec_define_option:nn {JFM-var} { + \__fontspec_update_featstr:n {jfmvar=##1} + } + \__ltj_fontspec_define_preparse_external:nn {NoEmbed} { + \cs_set:Npn \__fontspec_fontname_wrap:n ##1 {psft:##1} + } + + %% Omit the warning message + %% "OpenType feature 'Kerning=Off' (-kern) not available ..." + \keys_define:nn {fontspec-opentype} { + Kerning/Off.code:n=\__fontspec_update_featstr:n {-kern} + } + \clist_set:Ne \g__fontspec_default_fontopts_clist { + YokoFeatures = { JFM=\ltj@stdyokojfm }, TateFeatures = { JFM=\ltj@stdtatejfm }, + Scale=\Cjascale, Kerning=Off, Script=CJK, + \g__ltj_fontspec_kanji_default_fontopts_clist + } + \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop + \cs_set_eq:NN \__fontspec_make_font_shapes:Nnnnn \__ltj_fontspec_make_font_shapes:Nnnnn + \cs_set_eq:NN \DeclareFontFamily \__ltj_fontspec_DeclareFontFamily + \tl_set:Nn \g_fontspec_encoding_tl {JY3} + \__ltj_orig_fontspec_select_font_family:nn{#1}{#2} + + \cs_gset:Npx \__ltj_fontspec_aftergroup { + \exp_not:N \tl_set:Nn \exp_not:N \l_fontspec_family_tl { \l_fontspec_family_tl } + } + \aftergroup \__ltj_fontspec_aftergroup + \group_end: +} + +%% declare_shape + +\cs_new:Nn \__ltj_fontspec_declare_shape_yoko:nnnn { + \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l__ltj_fontspec_fontfeat_yoko_clist } +} +\cs_new:Nn \__ltj_fontspec_declare_shape_tate:nnnn { + \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l__ltj_fontspec_fontfeat_tate_clist } +} +\cs_new:Nn \__ltj_fontspec_declare_shape:nnnn { + \__ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4} + \__ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4} +} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape:nnnn {nnxx} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {nnxx} +\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_tate:nnnn {nnxx} + +\cs_new:Nn \__ltj_fontspec_declare_shape_aux:nnnnnn +{ + \tl_build_begin:N \l__fontspec_nfss_tl + \tl_build_begin:N \l__fontspec_nfss_sc_tl + \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl + + \tl_set:Nn \g_fontspec_encoding_tl {#5} + \tl_set:Nn \g__fontspec_nfss_enc_tl {#5} + \exp_args:Ne \clist_map_inline:nn {#4} + { \__ltj_fontspec_setup_single_size:nn {#3, #6} {##1} } + \tl_build_end:N \l__fontspec_nfss_tl + \tl_build_end:N \l__fontspec_nfss_sc_tl + + \bool_set_true:N \l__fontspec_nosc_bool + \__fontspec_declare_shapes_normal:nn {#1} {#2} + \__fontspec_declare_shape_slanted:nn {#1} {#2} +} + +\cs_new:Nn \__ltj_fontspec_setup_single_size:nn +{ + \tl_clear:N \l__fontspec_size_tl + \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed + + \keys_set_known:neN {fontspec-sizing} { \exp_after:wN \use:n #2 } + \l__fontspec_sizing_leftover_clist + \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} } + + \str_if_eq:eeTF { \g__fontspec_nfss_enc_tl } { JY3 } { + % "normal" + \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} + } { + \tl_if_empty:NTF \l__ltj_fontspec_fontname_tate_tl + { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} } + { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__ltj_fontspec_fontname_tate_tl} } + } + \__fontspec_setup_nfss:Nn \l__fontspec_nfss_tl {#1} +} + +\cs_new:Nn \__ltj_fontspec_set_family:Nnn { + \__ltj_set_global_variable_for_kanji: + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn + \__ltj_orig_fontspec_set_family:Nnn #1 {#2} {#3} + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_orig_fontspec_select_font_family:nn + \__ltj_restore_global_variable: +} +\cs_set_eq:NN \__ltj_orig_fontspec_set_family:Nnn \fontspec_set_family:Nnn +\cs_set_eq:NN \__ltj_orig_fontspec_make_font_shapes:Nnnnn \__fontspec_make_font_shapes:Nnnnn +\cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape + +\cs_new:Nn \__ltj_fontspec_make_font_shapes:Nnnnn { + \group_begin: + %% 基底フォント + \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn + \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape:nnxx + \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5} + %% + \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3} + {#4, \l__ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 } + \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3} + {#4, \l__ltj_fontspec_fontfeat_tate_clist}{#5} {JT3} + \group_end: + } + +%%% Altfont 内部処理部 +\cs_new:Nn \__ltj_fontspec_make_font_shapes_alt:Nnnnnn { + \group_begin: + \str_if_eq:eeTF { #6 } { JY3 } { + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_yoko:nnxx + }{ + \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_tate:nnxx + } + \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 } + \clist_if_empty:NF \l__ltj_fontspec_altfont_clist { + \int_gzero:N \g__ltj_fontspec_altnumber_int + \clist_map_inline:Nn \l__ltj_fontspec_altfont_clist { + \tl_clear:N \l__ltj_fontspec_altrange_tl + \tl_set:Nn \l__ltj_fontspec_altname_tl { #1 } + \tl_set:Nn \l_tmpa_tl { #1 } + + \keys_set_known:neN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 } + \l__ltj_fontspec_altfont_leftover_clist + \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 } + + \tl_if_empty:NT \l__ltj_fontspec_altrange_tl { + \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 } + } { + \bool_if:nTF { + \tl_if_eq_p:NN \l__ltj_fontspec_altname_tl \l_tmpa_tl + && + \tl_if_empty_p:N \l__ltj_fontspec_altfont_leftover_clist + } { + \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 } + } { + \__ltj_orig_fontspec_make_font_shapes:Nnnnn + { \l__ltj_fontspec_altname_tl } {#2} + {#3 _ alt \int_use:N \g__ltj_fontspec_altnumber_int } + {#4, \l__ltj_fontspec_altfont_leftover_clist } + {#5} + \DeclareAlternateKanjiFont + { #6 }{ \g__fontspec_nfss_family_tl }{#2}{#3}% + { #6 }{ \g__fontspec_nfss_family_tl }{#2} + { #3 _alt \int_use:N \g__ltj_fontspec_altnumber_int } + { \l__ltj_fontspec_altrange_tl } + \int_gincr:N \g__ltj_fontspec_altnumber_int + } + } + } + } + \group_end: +} + + +%%%%%%%% User commands +\DeclareDocumentCommand \jfontspec { O{} m O{} } { + \__ltj_fontspec_set_family:Nnn \k@family {#1,#3}{#2} + \selectfont + \ignorespaces +} + +\DeclareDocumentCommand \setmainjfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[mc]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \mcdefault {#1,#3}{#2} + \unless\ifltj@disablejfam + \DeclareSymbolFont{mincho}{JY3}{\mcdefault}{\mddefault}{n} + \SetSymbolFont{mincho}{bold}{JY3}{\mcdefault}{\bfdefault}{n} + \fi + \normalfont +} + +\DeclareDocumentCommand \setsansjfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[gt]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \gtdefault {#1,#3}{#2} + \unless\ifltj@disablejfam + \DeclareMathAlphabet{\mathgt}{JY3}{\gtdefault}{\mddefault}{n} + \fi + \normalfont +} + +\DeclareDocumentCommand \setmonojfont { O{} m O{} } { + \ifdefined\DeclareFontSeriesDefault + \DeclareFontSeriesDefault[jtt]{bf}{\bfdefault} + \fi + \__ltj_fontspec_set_family:Nnn \jttdefault {#1,#3}{#2} + \normalfont +} + +\DeclareDocumentCommand \newjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \newfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \renewjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \renewfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \setjfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \setfontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} +\DeclareDocumentCommand \providejfontfamily { m O{} m O{} } { + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn + \providefontfamily #1 [#2,#4] {#3} + \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn +} + +\DeclareDocumentCommand \newjfontface { m O{} m O{} } { + \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \renewjfontface { m O{} m O{} } { + \renewjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \setjfontface { m O{} m O{} } { + \setjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} +\DeclareDocumentCommand \providejfontface { m O{} m O{} } { + \providejfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3} +} + +\prop_new:N \l__ltj_fontspec_tmp_prop +\prop_new:N \g__ltj_fontspec_fontopts_prop +\DeclareDocumentCommand \defaultjfontfeatures { t+ o m } + { + \IfNoValueTF {#2} + { \__ltj_fontspec_set_default_features:nn {#1} {#3} } + { \__ltj_fontspec_set_font_default_features:nnn {#1} {#2} {#3} } + \ignorespaces + } +\cs_new:Nn \__ltj_fontspec_set_default_features:nn + { + \__ltj_set_global_variable_for_kanji: + \__fontspec_set_default_features:nn {#1} {#2} + \__ltj_restore_global_variable: + } +\cs_new:Nn \__ltj_fontspec_set_font_default_features:nnn + { + \prop_set_eq:NN \l__ltj_fontspec_tmp_prop \g__fontspec_fontopts_prop + \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop + \__fontspec_set_font_default_features:nnn {#1} {#2} {#3} + \prop_set_eq:NN \g__ltj_fontspec_fontopts_prop \g__fontspec_fontopts_prop + \prop_set_eq:NN \g__fontspec_fontopts_prop \l__ltj_fontspec_tmp_prop + } + +\DeclareDocumentCommand \addjfontfeatures {m} { + \__ltj_fontspec_if_fontspec_font:TF + { + \__ltj_set_global_variable_for_kanji: + \group_begin: + \tl_set_eq:NN \f@family \k@family + \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn + \addfontfeatures {#1} + \group_end: + \kanjifamily\g__fontspec_nfss_family_tl\selectfont + \__ltj_restore_global_variable: + }{ + \msg_warning:nn {luatexja-fontspec} {addjfontfeatures-ignored} + } + \ignorespaces +} + +\cs_set_eq:NN \addjfontfeature \addjfontfeatures + +\prg_new_conditional:Nnn \__ltj_fontspec_if_fontspec_font: {TF,T,F} +{ + \cs_if_exist:cTF {g__fontspec_fontinfo_ \k@family _prop} \prg_return_true: \prg_return_false: +} + +\endinput diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty index 19d9952fef..abb2ca986e 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{luatexja-fontspec}[2020-09-14 fontspec support of LuaTeX-ja] +\ProvidesPackage{luatexja-fontspec}[2024-05-14 fontspec support of LuaTeX-ja] \RequirePackage{l3keys2e,luatexja} \ExplSyntaxOn @@ -28,7 +28,15 @@ \ProcessKeysOptions{ luatexja-fontspec } \RequirePackage{fontspec}[2019/03/15]% v2.7c -\RequirePackage{luatexja-fontspec-27c} % v2.7c +\@ifpackagelater{fontspec}{2024-05-03}{% + \@ifpackagelater{fontspec}{2024-05-10}{% + \RequirePackage{luatexja-fontspec-29e} % v2.9e + }{ + \RequirePackage{luatexja-fontspec-29c} % v2.9c + } +}{ + \RequirePackage{luatexja-fontspec-27c} % v2.7c +} \ExplSyntaxOff %%%%%%%% Now we completely ignore kanjifont definition file. diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty index ed2a9084e6..e83a50a615 100644 --- a/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty +++ b/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty @@ -1,5 +1,5 @@ % luatexja-preset.sty -\ProvidesPackage{luatexja-preset}[2022-06-19 Japanese font presets] +\ProvidesPackage{luatexja-preset}[2024-03-30 Japanese font presets] \RequirePackage{expl3,l3keys2e} \RequirePackage{luatexja} @@ -57,7 +57,7 @@ } \seq_put_right:Nn \g__ltjpreset_presets_seq { #1 } } -\cs_generate_variant:Nn \ltjpreset_declare_preset:nn {nx} +\cs_generate_variant:Nn \ltjpreset_declare_preset:nn {ne} \cs_new:Nn \__ltjpreset_declare_bool_option:nn { \bool_new:c { g__ltjpreset_#1_bool } \bool_set_false:c { g__ltjpreset_#1_bool } @@ -100,6 +100,7 @@ mc .groups:n = { preset }, mc .value_required:n = true, mc-bx .code:n = \prop_put:Nnn \g__ltjpreset_font_prop { mc-b } {#1}, + mc-bx .groups:n = { preset }, mc-bx .value_required:n = true, gt .code:n = \prop_put:Nnn \g__ltjpreset_font_prop { gt-u } {#1} \prop_put:Nnn \g__ltjpreset_font_prop { gt-d } {#1} @@ -112,6 +113,7 @@ \prop_put:Nnn \g__ltjpreset_font_prop { gt-d } {#1}, gt .groups:n = { preset }, gt .value_required:n = true, gt-m .groups:n = { preset }, gt-m .value_required:n = true, + gt-bx .groups:n = { preset }, gt-bx .value_required:n = true, } \cs_set:Nn \ltjpreset_define_preset_prop:n { \keys_define:nn { luatexja-preset } { @@ -152,7 +154,7 @@ % 小塚 (Adobe) %% Pro -\ltjpreset_declare_preset:nx{kozuka-pro}{ +\ltjpreset_declare_preset:ne{kozuka-pro}{ mc-m = KozMinPro-Regular, mc-b = KozMinPro-Bold, gt-d = KozGoPro-Regular, gt-b = KozGoPro-Bold, gt-u = KozGoPro-Medium, gt-eb = KozGoPro-Heavy, @@ -160,7 +162,7 @@ __custom = false, __office = false, __noembed = false, } %% Pr6 -\ltjpreset_declare_preset:nx{kozuka-pr6}{ +\ltjpreset_declare_preset:ne{kozuka-pr6}{ mc-m = KozMinProVI-Regular, mc-b = KozMinProVI-Bold, gt-d = KozGoProVI-Regular, gt-b = KozGoProVI-Bold, gt-u = KozGoProVI-Medium, gt-eb = KozGoProVI-Heavy, @@ -168,7 +170,7 @@ __custom = false, __office = false, __noembed = false, } %% Pr6N -\ltjpreset_declare_preset:nx{kozuka-pr6n}{ +\ltjpreset_declare_preset:ne{kozuka-pr6n}{ mc-m = KozMinPr6N-Regular, mc-b = KozMinPr6N-Bold, gt-d = KozGoPr6N-Regular, gt-b = KozGoPr6N-Bold, gt-u = KozGoPr6N-Medium, gt-eb = KozGoPr6N-Heavy, @@ -177,14 +179,14 @@ } % ヒラギノ (OSX) -\ltjpreset_declare_preset:nx{hiragino-pro}{ +\ltjpreset_declare_preset:ne{hiragino-pro}{ mc-m = HiraMinPro-W3, mc-b = HiraMinPro-W6, gt-d = HiraKakuPro-W3, gt-b = HiraKakuPro-W6, gt-u = HiraKakuPro-W6, gt-eb = HiraKakuStd-W8, mg-m = HiraMaruPro-W4, mc-l = HiraMinPro-W2, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{hiragino-pron}{ +\ltjpreset_declare_preset:ne{hiragino-pron}{ mc-m = HiraMinProN-W3, mc-b = HiraMinProN-W6, gt-d = HiraKakuProN-W3, gt-b = HiraKakuProN-W6, gt-u = HiraKakuProN-W6, gt-eb = HiraKakuStdN-W8, @@ -193,21 +195,21 @@ } % モリサワ -\ltjpreset_declare_preset:nx{bizud}{ +\ltjpreset_declare_preset:ne{bizud}{ mc = BIZ-UDMinchoM.ttc, gt-d = BIZ-UDGothicR.ttc, gt-b = BIZ-UDGothicB.ttc, gt-u = BIZ-UDGothicR.ttc, gt-eb = BIZ-UDGothicB.ttc, mg-m = BIZ-UDGothicB.ttc, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{morisawa-pro}{ +\ltjpreset_declare_preset:ne{morisawa-pro}{ mc = A-OTF-RyuminPro-Light.otf, mc-b = A-OTF-FutoMinA101Pro-Bold.otf, gt-d = A-OTF-GothicBBBPro-Medium.otf , gt-b = A-OTF-FutoGoB101Pro-Bold.otf, gt-u = A-OTF-GothicBBBPro-Medium.otf , gt-eb = A-OTF-MidashiGoPro-MB31.otf, mg-m = A-OTF-Jun101Pro-Light.otf, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{morisawa-pr6n}{ +\ltjpreset_declare_preset:ne{morisawa-pr6n}{ mc = A-OTF-RyuminPr6N-Light.otf, mc-b = A-OTF-FutoMinA101Pr6N-Bold.otf, gt-d = A-OTF-GothicBBBPr6N-Medium.otf , gt-b = A-OTF-FutoGoB101Pr6N-Bold.otf, gt-u = A-OTF-GothicBBBPr6N-Medium.otf , gt-eb = A-OTF-MidashiGoPr6N-MB31.otf, @@ -216,7 +218,7 @@ } % 游明朝/游ゴシック (Win8.1) -\ltjpreset_declare_preset:nx{yu-win}{ +\ltjpreset_declare_preset:ne{yu-win}{ mc-m = YuMincho-Regular, mc-b = YuMincho-Demibold, gt-d = YuGothic-Regular, gt-b = YuGothic-Bold, gt-u = YuGothic-Regular, gt-eb = YuGothic-Bold, @@ -224,7 +226,7 @@ __custom = false, __office = false, __noembed = false, } % Win10 -\ltjpreset_declare_preset:nx{yu-win10}{ +\ltjpreset_declare_preset:ne{yu-win10}{ mc-m = YuMincho-Regular, mc-b = YuMincho-Demibold, gt-d = YuGothic-Regular, gt-b = YuGothic-Bold, gt-u = YuGothic-Medium, gt-eb = YuGothic-Bold, @@ -234,7 +236,7 @@ % Yu fonts in OSX % according to http://support.apple.com/kb/HT5944 -\ltjpreset_declare_preset:nx{yu-osx}{ +\ltjpreset_declare_preset:ne{yu-osx}{ mc = YuMincho~Medium, mc-b = YuMincho~Demibold, gt-d = YuGothic~Medium, gt-u = YuGothic~Medium, gt-b = YuGothic~Bold, gt-eb = YuGothic~Bold, @@ -243,14 +245,14 @@ } % moga-mobo -\ltjpreset_declare_preset:nx{moga-mobo}{ +\ltjpreset_declare_preset:ne{moga-mobo}{ mc = Moga90Mincho, mc-b = Moga90Mincho~Bold, gt-d = Moga90Gothic, gt-b = Moga90Gothic~Bold, gt-u = Moga90Gothic, gt-eb = Moga90Gothic~Bold, mg-m = Mobo90Gothic, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{moga-mobo-ex}{ +\ltjpreset_declare_preset:ne{moga-mobo-ex}{ mc = MogaEx90Mincho, mc-b = MogaEx90Mincho~Bold, gt-d = MogaEx90Gothic, gt-b = MogaEx90Gothic~Bold, gt-u = MogaEx90Gothic, gt-eb = MogaEx90Gothic~Bold, @@ -259,7 +261,7 @@ } % Ume fones -\ltjpreset_declare_preset:nx{ume}{ +\ltjpreset_declare_preset:ne{ume}{ mc = Ume~Mincho, gt-d = Ume~Gothic, gt-b = Ume~Gothic~O5, gt-u = Ume~Gothic~O5, gt-eb = Ume~Gothic~O5, @@ -268,7 +270,7 @@ } % Source Han {Serif,Sans} -\ltjpreset_declare_preset:nx{sourcehan}{ +\ltjpreset_declare_preset:ne{sourcehan}{ mc-m = Source~Han~Serif~Regular, mc-b = Source~Han~Serif~Bold, gt-d = Source~Han~Sans~Regular, @@ -279,7 +281,7 @@ mc-l = Source~Han~Serif~Light, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{sourcehan-jp}{ +\ltjpreset_declare_preset:ne{sourcehan-jp}{ mc-m = Source~Han~Serif~JP~Regular, mc-b = Source~Han~Serif~JP~Bold, gt-d = Source~Han~Sans~JP~Regular, @@ -290,7 +292,7 @@ mc-l = Source~Han~Serif~JP~Light, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{noto-otc}{ +\ltjpreset_declare_preset:ne{noto-otc}{ mc-m = Noto~Serif~CJK~Regular, mc-b = Noto~Serif~CJK~Bold, gt-d = Noto~Sans~CJK~Regular, @@ -301,7 +303,7 @@ mc-l = Noto~Serif~CJK~Light, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{noto-otf}{ +\ltjpreset_declare_preset:ne{noto-otf}{ mc-m = Noto~Serif~CJK~JP~Regular, mc-b = Noto~Serif~CJK~JP~Bold, gt-d = Noto~Sans~CJK~JP~Regular, @@ -312,10 +314,10 @@ mc-l = Noto~Serif~CJK~JP~Light, __custom = false, __office = false, __noembed = false, } -\ltjpreset_declare_preset:nx{noto}{ +\ltjpreset_declare_preset:ne{noto}{ noto-otf, } -\ltjpreset_declare_preset:nx{noto-jp}{ +\ltjpreset_declare_preset:ne{noto-jp}{ mc-m = Noto~Serif~JP~Regular, mc-b = Noto~Serif~JP~Bold, gt-d = Noto~Sans~JP~Regular, @@ -328,7 +330,7 @@ } % HaranoAji {Mincho, Gothic} -\ltjpreset_declare_preset:nx{haranoaji}{ +\ltjpreset_declare_preset:ne{haranoaji}{ mc-m = HaranoAjiMincho-Regular.otf, mc-b = HaranoAjiMincho-Bold.otf, gt-d = HaranoAjiGothic-Regular.otf, @@ -342,30 +344,30 @@ % ipa, ipaex, ms -\ltjpreset_declare_preset:nx{ipa}{ +\ltjpreset_declare_preset:ne{ipa}{ \__ltjpreset_set_uni:nn { IPAMincho } { IPAGothic } } -\ltjpreset_declare_preset:nx{ipaex}{ +\ltjpreset_declare_preset:ne{ipaex}{ \__ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic } } -\ltjpreset_declare_preset:nx{ms}{ +\ltjpreset_declare_preset:ne{ms}{ \__ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic } } % {ipa,ipaex,ms}-dx % Office 付属フォントを利用 -\ltjpreset_declare_preset:nx{ipaex-hg}{ +\ltjpreset_declare_preset:ne{ipaex-hg}{ \__ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic } } -\ltjpreset_declare_preset:nx{ipa-hg}{ +\ltjpreset_declare_preset:ne{ipa-hg}{ \__ltjpreset_set_office:nn { IPAMincho } { IPAGothic } } -\ltjpreset_declare_preset:nx{ms-hg}{ +\ltjpreset_declare_preset:ne{ms-hg}{ \__ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic } } % 非埋込 -\ltjpreset_declare_preset:nx{noembed}{ +\ltjpreset_declare_preset:ne{noembed}{ \__ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium }, __custom = false, __office = false, __noembed = true, } @@ -385,12 +387,12 @@ \bool_if:NF \g__ltjpreset_custom_bool { \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 } \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl { - \tl_set:Nx \l_tmpb_tl { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } } + \tl_set:Ne \l_tmpb_tl { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } } \tl_if_in:NnT \l_tmpb_tl { Moga90Mincho } { \prop_clear:N \l_tmpa_prop \prop_map_inline:Nn \g__ltjpreset_font_prop { \tl_set:Nn \l_tmpb_tl { ##2 } \tl_remove_all:Nn \l_tmpb_tl {90} - \prop_put:Nnx \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl } + \prop_put:Nne \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl } } \prop_set_eq:NN \g__ltjpreset_font_prop \l_tmpa_prop } @@ -398,44 +400,44 @@ \prop_clear:N \l_tmpa_prop \prop_map_inline:Nn \g__ltjpreset_font_prop { \tl_set:Nn \l_tmpb_tl { ##2 } \tl_remove_all:Nn \l_tmpb_tl {90} - \prop_put:Nnx \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl } + \prop_put:Nne \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl } } \prop_set_eq:NN \g__ltjpreset_font_prop \l_tmpa_prop } } } %%%% リストからの展開 - \cs_set:Nx \__ltjpreset_font_mc_l: { \prop_item:Nn \g__ltjpreset_font_prop { mc-l } } - \cs_set:Nx \__ltjpreset_font_mc_m: { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } } - \cs_set:Nx \__ltjpreset_font_mc_b: { \prop_item:Nn \g__ltjpreset_font_prop { mc-b } } - \cs_set:Nx \__ltjpreset_font_gt_m: { \prop_item:Nn \g__ltjpreset_font_prop { gt-d } } - \cs_set:Nx \__ltjpreset_font_gt_u: { \prop_item:Nn \g__ltjpreset_font_prop { gt-u } } - \cs_set:Nx \__ltjpreset_font_gt_b: { \prop_item:Nn \g__ltjpreset_font_prop { gt-b } } - \cs_set:Nx \__ltjpreset_font_gt_eb: { \prop_item:Nn \g__ltjpreset_font_prop { gt-eb } } - \cs_set:Nx \__ltjpreset_font_mg_m: { \prop_item:Nn \g__ltjpreset_font_prop { mg-m } } + \cs_set:Ne \__ltjpreset_font_mc_l: { \prop_item:Nn \g__ltjpreset_font_prop { mc-l } } + \cs_set:Ne \__ltjpreset_font_mc_m: { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } } + \cs_set:Ne \__ltjpreset_font_mc_b: { \prop_item:Nn \g__ltjpreset_font_prop { mc-b } } + \cs_set:Ne \__ltjpreset_font_gt_m: { \prop_item:Nn \g__ltjpreset_font_prop { gt-d } } + \cs_set:Ne \__ltjpreset_font_gt_u: { \prop_item:Nn \g__ltjpreset_font_prop { gt-u } } + \cs_set:Ne \__ltjpreset_font_gt_b: { \prop_item:Nn \g__ltjpreset_font_prop { gt-b } } + \cs_set:Ne \__ltjpreset_font_gt_eb: { \prop_item:Nn \g__ltjpreset_font_prop { gt-eb } } + \cs_set:Ne \__ltjpreset_font_mg_m: { \prop_item:Nn \g__ltjpreset_font_prop { mg-m } } %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換 \bool_if:nT { !\g__ltjpreset_custom_bool && \g__ltjpreset_office_bool } { \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 } \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl { - \cs_set:Nx \__ltjpreset_font_mc_b: { hgrme04.ttc } - \cs_set:Nx \__ltjpreset_font_gt_b: { hgrge04.ttc } - \cs_set:Nx \__ltjpreset_font_gt_eb: { hgrsgu04.ttc } - \cs_set:Nx \__ltjpreset_font_mg_m: { hgrsmp04.ttf } + \cs_set:Ne \__ltjpreset_font_mc_b: { hgrme04.ttc } + \cs_set:Ne \__ltjpreset_font_gt_b: { hgrge04.ttc } + \cs_set:Ne \__ltjpreset_font_gt_eb: { hgrsgu04.ttc } + \cs_set:Ne \__ltjpreset_font_mg_m: { hgrsmp04.ttf } \cs_set_eq:NN \__ltjpreset_font_gt_m: \__ltjpreset_font_gt_u: % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う } \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 } \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl { - \cs_set:Nx \__ltjpreset_font_mc_b: { hgrme.ttc } - \cs_set:Nx \__ltjpreset_font_gt_b: { hgrge.ttc } - \cs_set:Nx \__ltjpreset_font_gt_eb: { hgrsgu.ttc } - \cs_set:Nx \__ltjpreset_font_mg_m: { hgrsmp.ttf } + \cs_set:Ne \__ltjpreset_font_mc_b: { hgrme.ttc } + \cs_set:Ne \__ltjpreset_font_gt_b: { hgrge.ttc } + \cs_set:Ne \__ltjpreset_font_gt_eb: { hgrsgu.ttc } + \cs_set:Ne \__ltjpreset_font_mg_m: { hgrsmp.ttf } } } % mc/l - \tl_set:Nx \l_tmpa_tl { \__ltjpreset_font_mc_l: } + \tl_set:Ne \l_tmpa_tl { \__ltjpreset_font_mc_l: } \tl_if_empty:NT \l_tmpa_tl {\tl_set:Nn \l_tmpa_tl {~}} - \cs_set:Nx \__ltjpreset_font_mc_l: { + \cs_set:Ne \__ltjpreset_font_mc_l: { \tl_if_blank:nTF \l_tmpa_tl { \__ltjpreset_font_mc_m: } {\tl_use:N \l_tmpa_tl } } %% bold オプションの処理 @@ -479,7 +481,7 @@ \__ltjpreset_wrap_fontname:e { \cs:w __ltjpreset_font_#1_#2: \cs_end: } \font \g__ltjpreset_font_test: = \l__ltjpreset_font_name:\relax \ifx \g__ltjpreset_font_test: \nullfont - \msg_warning:nnxxxx { luatexja-preset }{ no-font } + \msg_warning:nneeee { luatexja-preset }{ no-font } { \cs:w __ltjpreset_font_#1_#2: \cs_end: }{ #1/#2 } { \cs:w __ltjpreset_font_#3_#4: \cs_end: }{ #3/#4 } \cs_gset_eq:cc { __ltjpreset_font_#1_#2: } { __ltjpreset_font_#3_#4: } @@ -520,7 +522,7 @@ } \fp_compare:nNnF \Cjascale = 1 - { \msg_warning:nnx { luatexja-preset }{ scale }{ \Cjascale } } + { \msg_warning:nne { luatexja-preset }{ scale }{ \Cjascale } } % {1: encoding}{2: family}{3: series}{4: shape}{5: fontname}{6: feature}{7: scale} \cs_new:Nn \__ltjpreset_declare_font_shape:nnnnnnn { @@ -589,7 +591,7 @@ } \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 } \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl { - \tl_set:Nx \l__ltjpreset_kanji_shape_tl { ;+jp04 } + \tl_set:Ne \l__ltjpreset_kanji_shape_tl { ;+jp04 } } \__ltjpreset_define_family:nnn {mc} {m} {\__ltjpreset_font_mc_m:} \__ltjpreset_define_family:nnn {mc} {bx} {\__ltjpreset_font_mc_b:} @@ -610,7 +612,7 @@ } { \RequirePackage{luatexja-fontspec} % scale - \msg_warning:nnx { luatexja-preset }{ scale }{ \Cjascale } + \msg_warning:nne { luatexja-preset }{ scale }{ \Cjascale } \tl_new:N \l__ltjpreset_add_features_tl \bool_if:NT \g__ltjpreset_expert_bool { @@ -621,7 +623,7 @@ \addjfontfeature{ Kerning=Off } % 実際の fontspec の呼びだし \cs_new:Nn \__ltjpreset_do_fontset: { \group_begin: - \tl_gset:Nx \l__ltjpreset_add_features_tl { + \tl_gset:Ne \l__ltjpreset_add_features_tl { \tl_use:N \l__ltjpreset_kanji_shape_tl, YokoFeatures = { JFM = \tl_use:N \__ltjpreset_use_jfm_yoko_tl }, TateFeatures = { JFM = \tl_use:N \__ltjpreset_use_jfm_tate_tl }, diff --git a/macros/luatex/generic/luatexja/src/lltjext.sty b/macros/luatex/generic/luatexja/src/lltjext.sty index a83c9305c9..69e709f02e 100644 --- a/macros/luatex/generic/luatexja/src/lltjext.sty +++ b/macros/luatex/generic/luatexja/src/lltjext.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjext}[2022-08-24 v1.2k-ltj-14 Macros for vertical writing] +\ProvidesPackage{lltjext}[2024-05-16 v1.2k-ltj-15 Macros for vertical writing] \RequirePackage{luatexja} \newcount\ltj@ext@dir \let\ltj@lltjext@orig@tabular=\tabular @@ -541,17 +541,11 @@ \else \let\box@dir\utod \fi \fi -\ifltj@ltfilehook@avail % LaTeX2e >= 2020-10-01 \@defaultunitsset\@picht{#3}\unitlength \@defaultunitsset\@picwd{#2}\unitlength \setbox\@picbox\hbox to\@picwd\bgroup\box@dir \@defaultunitsset\@tempdimc{#4}\unitlength\hskip-\@tempdimc \@defaultunitsset\@tempdimc{#5}\unitlength\lower\@tempdimc\hbox\bgroup -\else % <= 2020-02-02 - \@picwd=#2\unitlength \@picht=#3\unitlength - \setbox\@picbox\hbox to\@picwd\bgroup\box@dir - \hskip-#4\unitlength\lower#5\unitlength\hbox\bgroup -\fi \ltj@@pic@reset@blshift \ignorespaces} \def\endpicture{% diff --git a/macros/luatex/generic/luatexja/src/ltj-base.lua b/macros/luatex/generic/luatexja/src/ltj-base.lua index 2af3908554..e112dfa374 100644 --- a/macros/luatex/generic/luatexja/src/ltj-base.lua +++ b/macros/luatex/generic/luatexja/src/ltj-base.lua @@ -398,6 +398,19 @@ function ltjb.add_to_callback(name,fun,description,priority) return end +--- fix \e@alloc@luafunction@count (gh:5) +do + local t = lua.get_functions_table() + local m = 0 + local n = tex.getcount('e@alloc@luafunction@count') + for i = 1,math.max(n, #t)+100 do-- I think 100 is sufficient + if t[i] then m = i end + end + if m>n then + tex.setcount('global', 'e@alloc@luafunction@count', m) + end +end + -------------------- mock of debug logger if not ltjb.out_debug then local function no_op() end diff --git a/macros/luatex/generic/luatexja/src/ltj-latex.sty b/macros/luatex/generic/luatexja/src/ltj-latex.sty index 7e091d161d..9f6e4d0a36 100644 --- a/macros/luatex/generic/luatexja/src/ltj-latex.sty +++ b/macros/luatex/generic/luatexja/src/ltj-latex.sty @@ -12,45 +12,14 @@ \def\luatexjalatexLoaded{\endinput} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ltj-latex}[2022-10-15 LaTeX support of LuaTeX-ja] +\ProvidesPackage{ltj-latex}[2024-05-16 LaTeX support of LuaTeX-ja] \endlinechar=13 %%% LaTeX version detection -\newif\ifltj@ltfilehook@avail -\@ifl@t@r\fmtversion{2020-10-01}{% - \@ifl@t@r\fmtversion{2020-10-02}% - {\ltj@ltfilehook@availtrue} - {% - \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi - \else\ltj@ltfilehook@availtrue\fi - }% -}{} -\@ifl@t@r\fmtversion{2021-05-01}{\count@=1 }{\count@=0 } -\ifnum \count@<1 -%%%% \shipout - \newluafunction\ltj@@lua@shipout@inner - \directlua{ - local t = lua.get_functions_table() - local getbox, setbox = tex.getbox, tex.setbox - local shipout_lthook = luatexja.direction.shipout_lthook - t[\the\ltj@@lua@shipout@inner]=function () - local a = shipout_lthook(getbox(\the\ltj@afbox)) - if a then setbox(\the\ltj@afbox, a) end - end - } - \protected\luadef\ltj@@lua@shipout\ltj@@lua@shipout@inner - \def\ltj@shipout@{\ltj@@lua@shipout\primitive\shipout\box\ltj@afbox}% - \protected\def\ltj@shipout{\ltj@afterbox\ltj@shipout@} - \ifprimitive\shipout\let\shipout\ltj@shipout\fi - \ifcsname tex_shipout:D\endcsname - \expandafter\let\csname tex_shipout:D\endcsname\ltj@shipout - \fi -\else - \directlua{% - luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1) - } -\fi +\directlua{% + luatexbase.add_to_callback('pre_shipout_filter',luatexja.direction.shipout_lthook, 'ltj.direction', 1) +} %%% patch for LaTeX \usepackage{lltjfont} @@ -59,36 +28,30 @@ \RequirePackage{lltjp-atbegshi} %%% patching commands -\ifltj@ltfilehook@avail - %% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> - %% no-starred version: do nothing if the <package> is loaded - %% starred version: do <code> right away if the <package> is loaded - \def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage} - \def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage} - \@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15 - \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}} - \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}} - \long\def\@@ltj@ExecuteAfterPackage#1#2{% - \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}% - } - \long\def\@@ltj@ExecuteBeforePackage#1#2{% - \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}% - } - }{ - \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}} - \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}} - \long\def\@@ltj@ExecuteAfterPackage@star#1#2{% - \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}% - } - \long\def\@@ltj@ExecuteBeforePackage@star#1#2{% - \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% - } +%% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> +%% no-starred version: do nothing if the <package> is loaded +%% starred version: do <code> right away if the <package> is loaded +\def\ltj@ExecuteAfterPackage{\@ifstar\@@ltj@ExecuteAfterPackage@star\@@ltj@ExecuteAfterPackage} +\def\ltj@ExecuteBeforePackage{\@ifstar\@@ltj@ExecuteBeforePackage@star\@@ltj@ExecuteBeforePackage} +\@ifl@t@r\fmtversion{2021-11-15}{% 2021-11-15 + \def\@@ltj@ExecuteAfterPackage@star#1{\AddToHook{package/#1/after}} + \def\@@ltj@ExecuteBeforePackage@star#1{\AddToHook{package/#1/before}} + \long\def\@@ltj@ExecuteAfterPackage#1#2{% + \@ifpackageloaded{#1}{}{\AddToHook{package/#1/after}{#2}}% } -\else - \RequirePackage{filehook} - \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile - \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile -\fi + \long\def\@@ltj@ExecuteBeforePackage#1#2{% + \@ifpackageloaded{#1}{}{\AddToHook{package/#1/before}{#2}}% + } +}{ + \def\@@ltj@ExecuteAfterPackage#1{\AddToHook{package/after/#1}} + \def\@@ltj@ExecuteBeforePackage#1{\AddToHook{package/before/#1}} + \long\def\@@ltj@ExecuteAfterPackage@star#1#2{% + \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteAfterPackage{#1}{#2}}% + } + \long\def\@@ltj@ExecuteBeforePackage@star#1#2{% + \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% + } +} \def\ltj@pkgpatch@im#1{\@ifnextchar[{\ltj@pkgpatch@im@{#1}}{\ltj@pkgpatch@im@{#1}[lltjp-#1]}}%] \def\ltj@pkgpatch@im@#1[#2]{\ltj@ExecuteAfterPackage*{#1}{\ltj@pkgpatch@im@@{#2}}} \def\ltj@pkgpatch@im@@#1{% @@ -101,11 +64,7 @@ } \def\ltj@pkgpatch#1{\@ifnextchar[{\ltj@pkgpatch@{#1}}{\ltj@pkgpatch@{#1}[lltjp-#1]}}%] -\ifltj@ltfilehook@avail - \def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]} -\else - \def\ltj@pkgpatch@@{\gpreto\@begindocumenthook} -\fi +\def\ltj@pkgpatch@@{\AddToHook{begindocument/before}[luatexja.autopatch]} \def\ltj@pkgpatch@#1[#2]{% \ltj@pkgpatch@@{% \@ifpackageloaded{#1}{\@ifpackageloaded{#2}{}{\RequirePackage{#2}}}{}% @@ -121,18 +80,12 @@ \ltj@pkgpatch{tascmac} \ltj@pkgpatch{ascmac}[lltjp-tascmac] \ltj@pkgpatch@im{stfloats} -\ifltj@ltfilehook@avail\else - \ltj@pkgpatch{preview} %% at \begin{document} - % (preview package has delayed option) -\fi \ltj@pkgpatch{array} %% at \begin{document} \ltj@pkgpatch{collcell} %% at \begin{document} \ltj@pkgpatch@im{unicode-math} \ltj@pkgpatch@im{siunitx} \ltj@pkgpatch@im{microtype} -\ifltj@ltfilehook@avail\else\ltj@pkgpatch@im{everyshi}\fi - \RequirePackage{lltjp-geometry} \ltj@ExecuteBeforePackage{breqn}{% diff --git a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua index 43ecac806c..8f5632be4e 100644 --- a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua +++ b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua @@ -156,16 +156,17 @@ function set_box_stack_level(head, mode) if ltjs.list_dir == dir_tate then for p in traverse_glyph(to_direct(head)) do if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then - local pf = ltjf_replace_altfont(attr_curtfnt, getchar(p), p) + local pc = ltjs_orig_char_table[p] or getchar(p) + local pf = ltjf_replace_altfont(attr_curtfnt, pc, p) if ltjf_font_metric_table[pf].vert_activated then - local pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end + pc = ltjf_font_metric_table[pf].vform[pc]; if pc then setchar(p, pc) end end end end else for p in traverse_glyph(to_direct(head)) do if getlang(p)==lang_ja and has_attr(p, attr_icflag, 0) then - ltjf_replace_altfont(attr_curjfnt, getchar(p), p) + ltjf_replace_altfont(attr_curjfnt, ltjs_orig_char_table[p] or getchar(p), p) end end end diff --git a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua index 88352dd5b2..2b65eb5e5c 100644 --- a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua +++ b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua @@ -15,7 +15,7 @@ do end local cidfont_data = {} local cache_chars = {} -local cache_ver = 13 +local cache_ver = 14 local identifiers = fonts.hashes.identifiers local cid_reg, cid_order, cid_supp, cid_name @@ -147,7 +147,7 @@ do descender = 655360*0.12, }, embedding = "no", cache = "yes", factor = 0, hfactor = 0, vfactor = 0, - tounicode = 1, + tounicode = 1, filename="", properties = { language = "dflt", script = "dflt" }, } cidfont_data[cid_name] = k diff --git a/macros/luatex/generic/luatexja/src/luatexja.sty b/macros/luatex/generic/luatexja/src/luatexja.sty index 164c02d8d3..f9ae793bb4 100644 --- a/macros/luatex/generic/luatexja/src/luatexja.sty +++ b/macros/luatex/generic/luatexja/src/luatexja.sty @@ -27,7 +27,7 @@ \newif\ifltj@disablejfam %%%% VERSION -\def\LuaTeXjaversion{20240219.0} +\def\LuaTeXjaversion{20240714.0} %% Check if LaTeX is used. \begingroup\expandafter\expandafter\expandafter\endgroup diff --git a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty index bb63ac6877..00c858e349 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjdefs}[2022-01-23 Default font settings of LuaTeX-ja] +\ProvidesPackage{lltjdefs}[2024-05-16 Default font settings of LuaTeX-ja] \ifdefined\ltj@stdmcfont\else\def\ltj@stdmcfont{file:HaranoAjiMincho-Regular.otf}\fi \ifdefined\ltj@stdgtfont\else\def\ltj@stdgtfont{file:HaranoAjiGothic-Medium.otf}\fi @@ -18,13 +18,8 @@ \DeclareKanjiEncodingDefaults{}{} \DeclareErrorKanjiFont{JY3}{mc}{m}{n}{10} \kanjifamily{mc} -\ifnum\ltj@@latex@plv<1500 % <=2020-10-01 - \kanjiseries{m} - \kanjishape{n} -\else % >=2021-06-01 - \def\k@series{m} - \def\k@shape{n} -\fi +\def\k@series{m} +\def\k@shape{n} \fontsize{10}{10} \DeclareYokoKanjiEncoding{JY3}{}{} \DeclareKanjiSubstitution{JY3}{mc}{m}{n} @@ -37,12 +32,7 @@ \newcommand\kanjiencodingdefault{JY3} \newcommand\kanjifamilydefault{\mcdefault} \newcommand\kanjiseriesdefault{\mddefault} -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 - %% LaTeX 2020-02-02 - \newcommand\kanjishapedefault{\shapedefault} -\else%% LaTeX 2019-10-01 - \newcommand\kanjishapedefault{\updefault} -\fi +\newcommand\kanjishapedefault{\shapedefault} \DeclareKanjiFamily{JY3}{mc}{} \DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] @@ -90,57 +80,36 @@ \DeclareMathAlphabet{\mathgt}{JY3}{gt}{m}{n} \fi -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 -%%%% LaTeX >= 2020-02-02 \edef\bfseries@mc{\bfdefault} \edef\bfseries@gt{\bfdefault} \def\bfseries@jtt{\bfseries@mc} \edef\mdseries@mc{\mddefault} \edef\mdseries@gt{\mddefault} \def\mdseries@jtt{\mdseries@mc} -\fi \newif\if@ltj@match@family \@ltj@match@familyfalse \def\verbatim@font{\normalfont\ttfamily\kanjifamily\jttdefault\selectfont} -\def\@ltj@hook@family#1#2{% #1: csname #2: contents - \ifltj@ltfilehook@avail % LaTeX 2020-10-01 - \AddToHook{#1}{#2}% - \else\ifcsname @#1hook\endcsname % LaTeX 2020-02-02 - \csappto{@#1hook}{#2}% - \else % LaTeX 2019-10-01 - \ifcsname #1 \endcsname - \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}% - \else - \PackageWarningNoLine{luatexja}{% - Patching to \expandafter\string\csname #1\endcsname\space failed% - }% - \fi - \fi\fi -} -\@ltj@hook@family{rmfamily}{% +\AddToHook{rmfamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{mc}\mcdefault \fi } -\@ltj@hook@family{sffamily}{% +\AddToHook{sffamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{gt}\gtdefault \fi } -\@ltj@hook@family{ttfamily}{% +\AddToHook{ttfamily}{% \if@ltj@match@family \prepare@family@series@update@kanji{jtt}\jttdefault \fi } -\let\@ltj@hook@family\@undefined -\ifltj@ltfilehook@avail % 2020-10-01 - \expandafter\def\expandafter\kanjiseriesdefault - \expandafter{\kanjiseriesdefault\@empty} - \let\kanjiseriesdefault@kernel\kanjiseriesdefault -\fi +\expandafter\def\expandafter\kanjiseriesdefault + \expandafter{\kanjiseriesdefault\@empty} +\let\kanjiseriesdefault@kernel\kanjiseriesdefault %%% \eminnershape \expandafter\patchcmd\csname em \endcsname{\itshape}{\gtfamily\itshape}{}{} diff --git a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty index 2efc9435ab..52ac44d5cc 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty @@ -3,31 +3,10 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjfont}[2023-04-13 Patch to NFSS2 for LuaTeX-ja] +\ProvidesPackage{lltjfont}[2023-05-16 Patch to NFSS2 for LuaTeX-ja] %%%%%%%% LaTeX2e version detection -\newcount\ltj@@latex@plv \ltj@@latex@plv=-1 -\ifltj@ltfilehook@avail -\ExplSyntaxOn - \cs_if_exist:NTF \__shipout_execute_main_cont:Nnnn - {\ltj@@latex@plv=1500}% 2021-06-01 - {\ifnum\patch@level>2\relax \ltj@@latex@plv=1300\else \ltj@@latex@plv=1000\fi}% 2020-10-01 -\ExplSyntaxOff -\else\ifdefined\@rmfamilyhook % 2020-02-02 - \ifx\@forced@seriestrue\@undefined % 2020-02-02 pl0--2 - \@latex@error - {Please update LaTeX2e!^^J\space\space - At least LaTeX2e 2020-02-02 patch level 3 is required}% - {LaTeX2e 2020-02-02 patch level 2 (and 4) has a bug.} - \else - \ltj@@latex@plv=300 - \unless\ifx\series@maybe@drop@one@m@x\@undefined % pl5 + develop - \ltj@@latex@plv=501 - \else\unless\ifx\series@maybe@drop@one@m\@undefined % patch level 5 - \ltj@@latex@plv=500 - \fi\fi - \fi -\fi\fi +\newcount\ltj@@latex@plv \ltj@@latex@plv=1500 %% patching \DeclareTextComposite \def\ltj@chardef@text@cmd#1{% @@ -400,59 +379,7 @@ \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}% }% \fi} -\ifnum\ltj@@latex@plv<1500 % <=2020-10-01 -\protected\def\ltj@selectfont@patch{% - \ltj@@start@time@measure{selectfont}% - \let\tmp@error@fontshape\error@fontshape - \let\error@fontshape\error@kfontshape - \ltj@@is@kyenc{\k@encoding}\ifin@% - \let\cy@encoding\k@encoding - \ensure@KanjiEncodingPair{t}% - \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}% - \else - \ltj@@is@ktenc{\k@encoding}\ifin@% - \let\ct@encoding\k@encoding - \ensure@KanjiEncodingPair{y}% - \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}% - \else - \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha - \fi - \fi - \global\let\ltj@afont@name=\font@name - \ltj@selectfont@tate\ltj@selectfont@yoko -% - \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item - \kenc@update - \global\let\font@name=\ltj@afont@name - \let\error@fontshape\tmp@error@fontshape - \if@knjcmd \@knjcmdfalse - \expandafter\ifx - \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax - \expandafter\ifx - \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax - \else - \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\selectfont - % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり - \fi - \else - \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\selectfont - % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり - \fi - \fi - \global\let\font@name=\ltj@afont@name - \ltj@@stop@time@measure{selectfont}% -} -\RequirePackage{everysel} -\let\ltj@@EverySelectfont@Init=\@EverySelectfont@Init -\expandafter\expandafter\expandafter\let -\expandafter\expandafter\csname ltj@@orig@selectfont\endcsname\csname selectfont\space\endcsname -\@EverySelectfont@Init% for LaTeX2e <=2020-10-01 -\def\@EverySelectfont@Init{% - \expandafter\let\csname selectfont\space \endcsname \ltj@@orig@selectfont - \ltj@@EverySelectfont@Init -} -\EverySelectfont{\ltj@selectfont@patch} -\else % LaTeX2e >=2021-06-01 + \AddToHook{selectfont}[luatexja]{% \ltj@@start@time@measure{selectfont}% \ifx\delayed@k@adjustment\@empty @@ -514,7 +441,6 @@ \global\let\font@name=\ltj@afont@name \ltj@@stop@time@measure{selectfont}% } -\fi \bgroup \def\ltj@@dir@patch#1#2#3{% @@ -721,8 +647,6 @@ } %%%%%% -\ifnum\ltj@@latex@plv>0 -%%%% LaTeX >= 2020-02-02 \newif\if@shape@roman@kanji \def\merge@kanji@series#1{% @@ -740,76 +664,11 @@ \@nil } -\ifnum\ltj@@latex@plv>500 % !!! pl5 + develop \def\set@target@series@kanji#1{% \edef\k@series{#1}% \series@maybe@drop@one@m\k@series\k@series } -\else\ifnum\ltj@@latex@plv>300 % !!! pl5 - \def\set@target@series@kanji#1{% - \edef\k@series{#1}% - \expandafter\series@maybe@drop@one@m\expandafter{\k@series}\k@series - } -\else % !!! pl 3, 4 - \def\set@target@series@kanji#1{% - \edef\k@series{#1}% - \edef\k@series{\expandafter\series@drop@one@m\k@series mm\series@drop@one@m}% - } -\fi\fi -\ifnum\ltj@@latex@plv<1500% <=2020-10-01 -\def\merge@kanji@series@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \set@target@series@kanji{#2}% - \else - \begingroup\let\f@encoding\k@encoding\let\f@family\k@family - \maybe@load@fontshape\endgroup - \edef\reserved@a{\k@encoding /\k@family /#1/\k@shape}% - \ifcsname \reserved@a \endcsname - \set@target@series@kanji{#1}% - \else - \ifcsname \k@encoding /\k@family /#2/\k@shape \endcsname - \set@target@series@kanji{#2}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \else - \set@target@series@kanji{#3}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \fi - \fi - \fi -} -\def\merge@kanji@shape@#1#2#3\@nil{% - \def\reserved@a{#3}% - \ifx\reserved@a\@empty - \if@shape@roman@kanji - \set@safe@kanji@shape{#2}{}% - \else - \edef\k@shape{#2}% - \fi - \else - \begingroup\let\f@encoding\k@encoding\let\f@family\k@family - \maybe@load@fontshape\endgroup - \edef\reserved@a{\k@encoding /\k@family /\k@series/#1}% - \ifcsname \reserved@a\endcsname - \edef\k@shape{#1}% - \else - \ifcsname \k@encoding /\k@family /\k@series/#2\endcsname - \edef\k@shape{#2}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \else - \if@shape@roman@kanji - \set@safe@kanji@shape{#3}% - {{\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}}% - \else - \edef\k@shape{#3}% - {\let\curr@fontshape\curr@kfontshape\@font@shape@subst@warning}% - \fi - \fi - \fi - \fi -} -\else % >=2021-06-01 \def\merge@kanji@series@#1#2#3\@nil{% \def\reserved@a{#3}% \ifx\reserved@a\@empty @@ -892,20 +751,8 @@ \fi } \let\delayed@merge@kanji@shape\merge@kanji@shape@without@substitution -\fi \newif\if@forced@series@kanji -\ifnum\ltj@@latex@plv=300 % 2020-02-02 pl3, 4 - \DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}} - \DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}} - \DeclareRobustCommand\romanseriesforce[1]{\edef\f@series{#1}} - \DeclareRobustCommand\kanjiseriesforce[1]{\edef\k@series{#1}} -\else\ifnum\ltj@@latex@plv<1500% >=2020-02-02 pl5 and <=2020-10-01 - \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse\merge@font@series{#1}} - \DeclareRobustCommand\kanjiseries[1]{\@forced@series@kanjifalse\merge@kanji@series{#1}} - \DeclareRobustCommand\romanseriesforce[1]{\@forced@seriestrue\edef\f@series{#1}} - \DeclareRobustCommand\kanjiseriesforce[1]{\@forced@series@kanjitrue\edef\k@series{#1}} -\else% >=2021-06-01 \DeclareRobustCommand\romanseries[1]{\@forced@seriesfalse \expandafter\def\expandafter\delayed@f@adjustment\expandafter {\delayed@f@adjustment\delayed@merge@font@series{#1}}} @@ -919,22 +766,9 @@ \expandafter\def\expandafter\delayed@k@adjustment\expandafter {\delayed@k@adjustment\edef\k@series{#1}}} \let\delayed@k@adjustment\@empty -\fi\fi \DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}% \DeclareRobustCommand\fontseriesforce[1]{\kanjiseriesforce{#1}\romanseriesforce{#1}}% -\ifnum\ltj@@latex@plv<1500% <=2020-10-01 - \DeclareRobustCommand\romanshape[1]{\merge@font@shape{#1}} - \DeclareRobustCommand\kanjishape[1]{\merge@kanji@shape{#1}} - \DeclareRobustCommand\fontshape[1]{% - \@shape@roman@kanjitrue - \merge@font@shape{#1}\merge@kanji@shape{#1}% - \@shape@roman@kanjifalse - } - \DeclareRobustCommand\romanshapeforce[1]{\edef\f@shape{#1}} - \DeclareRobustCommand\kanjishapeforce[1]{\edef\k@shape{#1}} - \DeclareRobustCommand\fontshapeforce[1]{\set@safe@kanji@shape{#1}{}\romanshapeforce{#1}} -\else% >=2021-06-01 \DeclareRobustCommand\romanshape[1]{% \expandafter\def\expandafter\delayed@f@adjustment\expandafter {\delayed@f@adjustment\delayed@merge@font@shape{#1}}} @@ -956,9 +790,6 @@ \romanshapeforce{#1}% \expandafter\def\expandafter\delayed@k@adjustment\expandafter {\delayed@k@adjustment\set@safe@kanji@shape{#1}{}}} -\fi -\ifnum\ltj@@latex@plv>1499 -%%%% LaTeX >= 2021-06-01 \DeclareRobustCommand\usekanji[4]{% \kanjiencoding{#1}\edef\k@family{#2}% \set@target@series@kanji{#3}\edef\k@shape{#4}% @@ -969,42 +800,6 @@ \set@target@series{#3}\edef\f@shape{#4}% \let\delayed@f@adjustment\@empty \selectfont\ignorespaces} -\else\ifnum\ltj@@latex@plv>1000 -%%%% 2021-10-01 PL3 <= LaTeX < 2021-06-01 -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\edef\k@family{#2}% - \set@target@series@kanji{#3}\edef\k@shape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\edef\f@family{#2}% - \set@target@series{#3}\edef\f@shape{#4}% - \selectfont\ignorespaces} -\else -%%%% 2020-10-01 <= LaTeX < 2020-10-01 PL3 -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\edef\k@family{#2}\edef\k@series{#3}\edef\k@shape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\edef\f@family{#2}\edef\f@series{#3}\edef\f@shape{#4}% - \selectfont\ignorespaces} -\fi\fi -%%%% LaTeX >= 2020-02-02 END -\else -%%%% LaTeX 2019-10-01 -\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}} -\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}} -\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}} -\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}} -\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}} -\DeclareRobustCommand\fontshape[1]{\set@safe@kanji@shape{#1}{}\romanshape{#1}} -\DeclareRobustCommand\usekanji[4]{% - \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}% - \selectfont\ignorespaces} -\DeclareRobustCommand\useroman[4]{% - \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}% - \selectfont\ignorespaces} -%%%% LaTeX 2019-10-01 END -\fi %%%% \def\set@safe@kanji@shape#1#2{% @@ -1026,8 +821,6 @@ \else\useroman{#1}{#2}{#3}{#4}% \fi} -\ifnum 0\ifltj@ltfilehook@avail1\fi\ifdefined\@rmfamilyhook1\fi>0 -%%%% LaTeX >= 2020-02-02 \let\prepare@family@series@update@kanji=\prepare@family@series@update \patchcmd\prepare@family@series@update{\fontfamily}{\romanfamily}{}{} \patchcmd\prepare@family@series@update@kanji{\if@forced@series}{\if@forced@series@kanji}{}{} @@ -1049,34 +842,16 @@ \patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} \def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}\@elt{jtt}} -\def\@ltj@hook@series@default#1#2#3{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{#1/defaults}{#2}% - \else\ifcsname @set#1defaultshook\endcsname %after 2020-04-07 - \expandafter\g@addto@macro\csname @set#1defaultshook\endcsname{#2}% - \else % 2020-02-02 - \expandafter\patchcmd\csname #1 \endcsname{#3}{#3#2}{}{}% - \fi\fi -} -\@ltj@hook@series@default{bfseries}{% +\AddToHook{bfseries/defaults}{% \let\bfseries@mc\bfdef@ult \let\bfseries@gt\bfdef@ult \let\bfseries@jtt\bfdef@ult -}{% - \let\bfseries@rm\bfdef@ult - \let\bfseries@sf\bfdef@ult - \let\bfseries@tt\bfdef@ult } -\@ltj@hook@series@default{mdseries}{% +\AddToHook{mdseries/defaults}{% \let\mdseries@mc\mddef@ult \let\mdseries@gt\mddef@ult \let\mdseries@jtt\mddef@ult -}{% - \let\mdseries@rm\mddef@ult - \let\mdseries@sf\mddef@ult - \let\mdseries@tt\mddef@ult } -\let\@ltj@hook@series@default\@undefined \expandafter\patchcmd\csname bfseries \endcsname{% \ifx\f@family\rmdef@ult \fontseries\bfseries@rm @@ -1105,105 +880,41 @@ \fi\fi\fi }{}{} -\def\@ltj@hook@series#1#2{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{#1}{#2}% - \else % 2020-02-02 - \expandafter\patchcmd\csname #1 \endcsname{\selectfont}{#2\selectfont}{}{}% - \fi -} -\@ltj@hook@series{bfseries}{% +\AddToHook{bfseries}{% \ifx\k@family\mcdef@ult \kanjiseries\bfseries@mc \else\ifx\k@family\gtdef@ult \kanjiseries\bfseries@gt \else\ifx\k@family\jttdef@ult\kanjiseries\bfseries@jtt \else \kanjiseries\bfdefault \fi\fi\fi } -\@ltj@hook@series{mdseries}{% +\AddToHook{mdseries}{% \ifx\k@family\mcdef@ult \kanjiseries\mdseries@mc \else\ifx\k@family\gtdef@ult \kanjiseries\mdseries@gt \else\ifx\k@family\jttdef@ult\kanjiseries\mdseries@jtt \else \kanjiseries\mddefault \fi\fi\fi } -\let\@ltj@hook@series\@undefined -\def\@ltj@hook@efd#1#2{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{expand@font@defaults}{#1}% - \else\ifdefined\@expandfontdefaultshook %after 2020-04-07 - \g@addto@macro\@expandfontdefaultshook{#1#2}% - \else % 2020-02-02 - \appto\expand@font@defaults{#1#2}% - \fi\fi -} -\@ltj@hook@efd{% +\AddToHook{expand@font@defaults}{% \edef\mcdef@ult{\mcdefault}% \edef\gtdef@ult{\gtdefault}% \edef\jttdef@ult{\jttdefault}% -}{\edef\kanjidef@ult{\kanjifamilydefault}} -\let\@ltj@hook@efd\@undefined + \edef\kanjidef@ult{\kanjifamilydefault}} -\ifltj@ltfilehook@avail % 2020-10-01 - \appto\init@series@setup{% - \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel - \mdseries - \let\kanjiseriesdefault\k@series - \fi - } -\else - \appto\init@series@setup{% - \ifx\kanjidef@ult\mcdef@ult \mcfamily - \else\ifx\kanjidef@ult\gtdef@ult \gtfamily - \else\ifx\kanjidef@ult\jttdef@ult \jttfamily - \fi\fi\fi - } -\fi - -\def\@ltj@hook@dfh#1{% - \ifltj@ltfilehook@avail % 2020-10-01 - \AddToHook{normalfont}{#1}% - \else\ifdefined\@defaultfamilyhook - \g@addto@macro\@defaultfamilyhook{#1}% - \else % 2020-02-02 - \expandafter\patchcmd\csname normalfont \endcsname{\selectfont}{#1\selectfont}{}{}% - \let\reset@font\normalfont - \fi\fi +\appto\init@series@setup{% + \ifx\kanjiseriesdefault\kanjiseriesdefault@kernel + \mdseries + \let\kanjiseriesdefault\k@series + \fi } -\ifnum\ltj@@latex@plv>1499 -\@ltj@hook@dfh{% +\AddToHook{normalfont}{% \kanjiencoding{\kanjiencodingdefault}% \edef\k@family{\kanjifamilydefault}% \edef\k@series{\kanjiseriesdefault}% \edef\k@shape{\kanjishapedefault}% \let\delayed@k@adjustment\empty } -\else -\@ltj@hook@dfh{% - \kanjiencoding{\kanjiencodingdefault}% - \edef\k@family{\kanjifamilydefault}% - \edef\k@series{\kanjiseriesdefault}% - \edef\k@shape{\kanjishapedefault}% -} -\fi -\let\@ltj@hook@dfh\@undefined -%%%% LaTeX >= 2020-02-02 END -\else -%%%% LaTeX 2019-10-01 -\DeclareRobustCommand\normalfont{% - \useroman\encodingdefault\familydefault\seriesdefault\shapedefault - \usekanji\kanjiencodingdefault\kanjifamilydefault\kanjiseriesdefault\kanjishapedefault} -\let\reset@font\normalfont -%%%% LaTeX 2019-10-01 END -\fi - - - -\ifdefined\prepare@family@series@update@kanji\else -%%%% LaTeX 2019-10-01 -\def\prepare@family@series@update@kanji#1{\kanjifamily} -\fi \DeclareRobustCommand\mcfamily{% \unless\ifltj@disablejfam\not@math@alphabet\mcfamily\mathmc\fi diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty index 9575dc3c04..8005153571 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-array}[2019-07-18 Patch to array for LuaTeX-ja] +\ProvidesPackage{lltjp-array}[2024-06-10 Patch to array for LuaTeX-ja] \RequirePackage{etoolbox,array} @@ -11,7 +11,14 @@ \ignorespaces\@sharp\unskip }{% \ltj@sharp -}{}{} +}{}{% >=2024-06-01 + \def\ltj@sharp{\relax\pltx@next@inhibitglue\ltjfakeboxbdd\ignorespaces\@sharp\textonly@unskip\ltjfakeboxbdd} + \patchcmd\insert@column{% + \ignorespaces\@sharp\textonly@unskip + }{% + \ltj@sharp + }{}{} +} \@ifpackageloaded{lltjext}{}{% %% remove extra \xkanjiskip (pLaTeX2e 2016/04/17) diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-atbegshi.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-atbegshi.sty index 12605ff11b..202cbf5857 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-atbegshi.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-atbegshi.sty @@ -3,11 +3,10 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-atbegshi}[2022-08-12 Patching \string\shipout\space hooks for LuaTeX-ja] +\ProvidesPackage{lltjp-atbegshi}[2024-05-14 Patching \string\shipout\space hooks for LuaTeX-ja] % concept: execute all hooks inside yoko direction \vbox -\ifltj@ltfilehook@avail %<*ltshipout>----------------------------------- % \RequirePackage{expl3} @@ -60,77 +59,4 @@ \fi: %</ltshipout>----------------------------------- \ExplSyntaxOff -\expandafter\endinput -\fi -\RequirePackage{atbegshi} -%<*atbegshi>------------------------------------- -% patching atbegshi.sty -%%% following codes are almost copied from -%%% pxatbegshi.sty 2019/09/07 v0.5 (in platex-tools bundle, by H. Yamashita). - -\ifdefined\AtBeginShipoutOriginalShipout - \let\AtBeginShipoutOriginalShipout\ltj@shipout -\fi -\AtBeginShipoutInit -\DeclareRobustCommand \AtBeginDvi [1]{% - \global \setbox \@begindvibox - \vbox{\yoko\unvbox \@begindvibox #1}% -} -%% internal macros are locally effective -\begingroup - -% helpers -%% unique tokens -\def\pxabgs@mark{\pxabgs@mark@} -\def\pxabgs@fin{\pxabgs@fin@} - -%% \pxabgs@patch@cmd\CMD{<orig>}{<new>} -\def\pxabgs@patch@cmd#1#2#3{% - \ifx#1\relax\else - \def\pxabgs@next##1#2##2\pxabgs@mark##3\pxabgs@fin{% - \ifx\pxabgs@mark##3\pxabgs@mark\let#1\relax - \else - \def\pxabgs@fragment{##2}\def#1{##1#3##2}% - \fi}% - \expandafter\pxabgs@next#1\pxabgs@mark#2\pxabgs@mark\pxabgs@fin - \fi -} - -% prepare -\ifdefined\AtBegShi@Output - \let\pxabgs@AtBegShi@Output\AtBegShi@Output -\else\let\pxabgs@AtBegShi@Output\relax\fi -% try first patch -\pxabgs@patch@cmd\pxabgs@AtBegShi@Output - {\let\AtBegShi@OrgProtect\protect}% - {\setbox8\vbox\bgroup\yoko\let\AtBegShi@OrgProtect\protect} -\pxabgs@patch@cmd\pxabgs@AtBegShi@Output - {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox}% - {\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox\egroup\setbox8\box\voidb@x} -\pxabgs@patch@cmd\pxabgs@AtBegShi@Output - {% - \begingroup - \setbox\AtBeginShipoutBox\box\AtBeginShipoutBox - \endgroup - \let\protect\AtBegShi@OrgProtect - }{% - \begingroup - \setbox\AtBeginShipoutBox\box\AtBeginShipoutBox - \endgroup - \let\protect\AtBegShi@OrgProtect - \egroup - } -% commit the change only when successful -\ifx\pxabgs@AtBegShi@Output\relax - \@PackageWarningNoLine{lltjp-atbegshi}{% - Failed in patching \string\AtBegShi@Output.\MessageBreak - This may cause error in tate direction% - } -\else - \global\let\AtBegShi@Output\pxabgs@AtBegShi@Output -\fi - -\endgroup -%% internal macros are no longer effective -%</atbegshi>------------------------------------- \endinput diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty index 589a3c5d6e..d688936c5f 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty @@ -35,7 +35,7 @@ { \fontspec_set_family:Nnn \l__fontspec_rmfamily_family_tl {#1} {#2} \tl_set_eq:NN \rmdefault \l__fontspec_rmfamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \rmfamily } { @@ -54,7 +54,7 @@ { \fontspec_set_family:Nnn \l__fontspec_sffamily_family_tl {#1} {#2} \tl_set_eq:NN \sfdefault \l__fontspec_sffamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \sffamily } { @@ -73,7 +73,7 @@ { \fontspec_set_family:Nnn \l__fontspec_ttfamily_family_tl {#1} {#2} \tl_set_eq:NN \ttdefault \l__fontspec_ttfamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \ttfamily } { @@ -94,7 +94,7 @@ { \fontspec_set_family:Nnn \l__fontspec_rmfamily_family_tl {#1} {#2} \tl_set_eq:NN \rmdefault \l__fontspec_rmfamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \rmfamily } { @@ -113,7 +113,7 @@ { \fontspec_set_family:Nnn \l__fontspec_sffamily_family_tl {#1} {#2} \tl_set_eq:NN \sfdefault \l__fontspec_sffamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \sffamily } { @@ -132,7 +132,7 @@ { \fontspec_set_family:Nnn \l__fontspec_ttfamily_family_tl {#1} {#2} \tl_set_eq:NN \ttdefault \l__fontspec_ttfamily_family_tl - \use:x + \use:e { \exp_not:n { \DeclareRobustCommand \ttfamily } { diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty index 67b0f5de7f..641fa4a34d 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjp-geometry}[2021-10-24 Patch to geometry for LuaTeX-ja with vertical writing mode] +\ProvidesPackage{lltjp-geometry}[2024-05-16 Patch to geometry for LuaTeX-ja with vertical writing mode] \RequirePackage{expl3} \ifdefined\if@ltj@@geometry@tate\expandafter\endinput\fi \newif\if@ltj@@geometry@tate @@ -31,15 +31,6 @@ %============================================ \unless\ifdefined\ltj@ExecuteAfterPackage -\expandafter\newif\csname ifltj@ltfilehook@avail\endcsname -\@ifl@t@r\fmtversion{2020-10-01}{% - \@ifl@t@r\fmtversion{2020-10-02}{\ltj@ltfilehook@availtrue} - {% - \ifnum\patch@level<0\relax \ifnum\patch@level<-6 \ltj@ltfilehook@availtrue\fi - \else\ltj@ltfilehook@availtrue\fi - }% -}{} -\ifltj@ltfilehook@avail %% \ltj@ExecuteBeforePackage <package><code> and \ltj@ExecuteAfterPackage <package><code> %% no-starred version: do nothing if the <package> is loaded %% starred version: do <code> right away if the <package> is loaded @@ -64,11 +55,6 @@ \@ifpackageloaded{#1}{#2}{\@@ltj@ExecuteBeforePackage{#1}{#2}}% } } -\else - \RequirePackage{filehook} - \let\ltj@ExecuteAfterPackage=\AtEndOfPackageFile - \let\ltj@ExecuteBeforePackage=\AtBeginOfPackageFile -\fi \fi %============================================ @@ -89,12 +75,8 @@ \else \@gobble\iftrue\csname iftdir\endcsname \bool_set_true:N \l_tmpa_bool \fi \fi -\ifltj@ltfilehook@avail - \prop_map_inline:Nn \g__hook_begindocument_code_prop - { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} } -\else - \tl_if_in:NnT \@begindocumenthook {\tate} {\bool_set_true:N \l_tmpa_bool} -\fi +\prop_map_inline:Nn \g__hook_begindocument_code_prop + { \tl_if_in:nnT {#2} {\tate} {\bool_set_true:N \l_tmpa_bool} } \bool_if:NT \l_tmpa_bool { \if@ltj@@geometry@forceoff \@ltj@@geometry@tatefalse diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty index 9c4526c3fd..292cbf00bf 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty @@ -1,5 +1,5 @@ % -% lltjp-siunitx.sty 2022-12-14 +% lltjp-siunitx.sty 2024-06-10 % \NeedsTeXFormat{LaTeX2e} @@ -7,7 +7,6 @@ \RequirePackage{siunitx} \makeatletter \ExplSyntaxOn -\cs_if_exist:NTF \siunitx_print_text:n {% siunitx v3.00 \cs_set_protected:Npn \siunitx_print_text:n #1 { \text @@ -32,104 +31,26 @@ } } \cs_set_eq:NN \ltj_orig__siunitx_table_collect_begin:w \__siunitx_table_collect_begin:w -\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 \relax - { \ltj_orig__siunitx_table_collect_begin:w } -\RenewDocumentCommand \tablenum { O { } m } - { - \mode_leave_vertical: - \group_begin: - \keys_set:nn { siunitx } {#1} - \siunitx_cell_begin:w - \relax \ignorespaces #2 - \siunitx_cell_end: - \group_end: - } -}% siunitx v3.00 end -{% siunitx v2.xx -\cs_generate_variant:Nn \tl_if_in:NnT { coT } -\cs_new:Nn \__ltj_siunix_patch_inner:n { - \cs_if_exist:cT { #1_tl } { - \tl_if_in:coT { #1_tl } { \tex_char:D } { - \tl_replace_all:cnn { #1_tl } { \tex_char:D } { \ltjalchar } - } +\cs_set_protected:Npn \__siunitx_table_collect_begin:w #1 { + \token_if_eq_meaning:NNTF #1 \relax + {\ltj_orig__siunitx_table_collect_begin:w } + {\ltj_orig__siunitx_table_collect_begin:w #1 } } -} -\cs_new:Nn \__ltj_siunix_patch_inner_math:n { - \__ltj_siunix_patch_inner:n { l__siunitx_#1_math } - \__ltj_siunix_patch_inner:n { l__siunitx_#1_text } -} -\AtBeginDocument { - \__ltj_siunix_patch_inner:n { c__siunitx_minus } - \__ltj_siunix_patch_inner:n { c__siunitx_mu } - \__ltj_siunix_patch_inner_math:n { angstrom } - \__ltj_siunix_patch_inner_math:n { arcminute } - \__ltj_siunix_patch_inner_math:n { arcsecond } - \__ltj_siunix_patch_inner_math:n { ohm } -} - -%%%% new table column: S and s -\bool_new:N \l__ltj_siunitx_table_collect_relax_bool -\cs_set_protected:Npn \__siunitx_table_collect_begin_s: { - \bool_set_false:N \l__ltj_siunitx_table_collect_relax_bool - \cs_set_eq:NN \__siunitx_table_collect_token:N - \__siunitx_table_collect_token_s:N - \cs_set_eq:NN \__siunitx_table_print: \__siunitx_table_print_s: - \__siunitx_table_collect_init_s: - \__siunitx_table_collect_get: -} - -\cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1 +\cs_set_protected:Npn \__siunitx_table_collect_token:N #1 { - \token_if_eq_meaning:NNTF #1 \tex_relax:D { - \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool { - \__siunitx_table_collect_not_braced_aux_i:N #1 - } { - \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool - } - } { - \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd { - \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue { - \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D + \__siunitx_table_collect_search:NnF #1 { - \token_if_eq_meaning:NNF #1 \tex_unskip:D - { \__siunitx_table_collect_not_braced_aux_i:N #1 } + \ignorespaces { \__siunitx_table_collect_ignore_spaces:N #1} + \pltx@next@inhibitglue { \__siunitx_table_collect_loop:} + \ltjfakeboxbdd { \__siunitx_table_collect_loop:} + \textonly@unskip { \__siunitx_table_collect_loop:} + \unskip { \__siunitx_table_collect_loop:} + \end { \tabularnewline \end } + \relax { \__siunitx_table_collect_relax:N #1 } + \tabularnewline { \tabularnewline } + \siunitx_cell_end: { \siunitx_cell_end:} } - }}} - \__siunitx_table_collect_next: - } - -\AtBeginDocument - { - \@ifpackageloaded { mdwtab } - { - \cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1 - { - \token_if_eq_meaning:NNTF #1 \tex_relax:D { - \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool { - \__siunitx_table_collect_not_braced_aux_i:N #1 - } { - \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool - } - } { - \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd { - \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue { - \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D - { - \token_if_eq_meaning:NNF #1 \tex_unskip:D - { - \token_if_eq_meaning:NNF #1 \tab@setcr - { - \token_if_eq_meaning:NNF #1 \@maybe@unskip - { \__siunitx_table_collect_not_braced_aux_i:N #1 } - } - } - } - }}} - \__siunitx_table_collect_next: - } - } - { } - } + { \__siunitx_table_collect_token_aux:N #1 } } \ExplSyntaxOff \endinput diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty index 79ba8cbcf5..bc123e6784 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty @@ -46,9 +46,9 @@ % ltjsclasses: use lua \cs_new:Nn \lltjp_um_unmag_fsize: { - \cs_gset:Nx \lltjp_um_f@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\f@size)}} - \cs_gset:Nx \lltjp_um_sf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\sf@size)}} - \cs_gset:Nx \lltjp_um_ssf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\ssf@size)}} + \cs_gset:Ne \lltjp_um_f@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\f@size)}} + \cs_gset:Ne \lltjp_um_sf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\sf@size)}} + \cs_gset:Ne \lltjp_um_ssf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\ssf@size)}} } }{ % bxjscls: use \jsc@preadjust@extract@font |