2 \ProvidesPackage{luatexja-preset}[2015/04/05 Japanese font presets]
8 \bool_new:N \l_ltjpreset_nfssonly_bool % nfssonly
9 \bool_set_false:N \l_ltjpreset_nfssonly_bool
10 \DeclareOption{nfssonly} {\bool_set_true:N \l_ltjpreset_nfssonly_bool}
12 \bool_new:N \l_ltjpreset_bold_bool % bold
13 \bool_set_false:N \l_ltjpreset_bold_bool
14 \DeclareOption{bold} {\bool_set_true:N \l_ltjpreset_bold_bool}
15 \DeclareOption{nobold}{\bool_set_false:N \l_ltjpreset_bold_bool}
17 \bool_new:N \l_ltjpreset_expert_bool % expert
18 \bool_set_false:N \l_ltjpreset_expert_bool
19 \DeclareOption{expert} {\bool_set_true:N \l_ltjpreset_expert_bool}
20 \DeclareOption{noexpert}{\bool_set_false:N \l_ltjpreset_expert_bool}
22 \int_new:N \l_ltjpreset_deluxe_int % deluxe
23 \int_set:Nn \l_ltjpreset_deluxe_int { 0 }
24 \DeclareOption{deluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 2 }} % 6 fonts
25 \DeclareOption{nodeluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 0 }} % 2 fonts
28 \cs_set:Npn \ltjpreset_use_jfm: {ujis} % 使用する JFM
29 %%% \DeclareOption{min}{\cs_set:Npn \ltjpreset_use_jfm: {min}} % min
30 %%% ↑jfm-min.lua が横組み・縦組み専用仮名に追いついていないので使用禁止
31 \DeclareOption{jis}{\cs_set:Npn \ltjpreset_use_jfm: {jis}} % jis
32 \DeclareOption{ujis}{\cs_set:Npn \ltjpreset_use_jfm: {ujis}} % ujis
35 \tl_new:N \l_ltjpreset_kanji_shape_tl
36 \DeclareOption{90jis}{ \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
37 \DeclareOption{jis2004}{\tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
40 \bool_new:N \l_ltjpreset_office_bool % MS Office の HG 系フォントを使っているか
41 \bool_new:N \l_ltjpreset_noembed_bool % 非埋込か
42 \clist_new:N \l_ltjpreset_font_list
44 \cs_new:Npn \ltjpreset_set_uni:nn #1#2 {
45 \ltjpreset_set_multi:n { #1, #1, #2, #2, #2, #2, #1 }
47 \cs_new:Npn \ltjpreset_set_multi:n #1 {
48 \clist_set:Nn \l_ltjpreset_font_list { #1 }
49 \bool_set_false:N \l_ltjpreset_office_bool
50 \bool_set_false:N \l_ltjpreset_noembed_bool
52 \cs_new:Npn \ltjpreset_set_office:nn #1 #2{
53 \ltjpreset_set_multi:n {
54 #1, HGMinchoE , % mc/m, mc/bx
55 HGGothicM , HGGothicE , % gt/m, gt/bx (multiweight))
56 #2 , HGSoeiKakugothicUB , % gt/m (uni), gt/eb
57 HGMaruGothicMPRO % mg/m
59 \bool_set_true:N \l_ltjpreset_office_bool
65 \DeclareOption{kozuka-pro}{
66 \ltjpreset_set_multi:n {
67 KozMinPro-Regular , % mc/m
68 KozMinPro-Bold , % mc/bx
69 KozGoPro-Regular , % gt/m (multi)
70 KozGoPro-Bold , % gt/bx
71 KozGoPro-Medium , % gt/m (uni)
72 KozGoPro-Heavy , % gt/eb
77 \DeclareOption{kozuka-pr6}{
78 \ltjpreset_set_multi:n {
79 KozMinProVI-Regular , % mc/m
80 KozMinProVI-Bold , % mc/bx
81 KozGoProVI-Regular , % gt/m (multi)
82 KozGoProVI-Bold , % gt/bx
83 KozGoProVI-Medium , % gt/m (uni)
84 KozGoProVI-Heavy , % gt/eb
85 KozGoProVI-Heavy % mg/m
89 \DeclareOption{kozuka-pr6n}{
90 \ltjpreset_set_multi:n {
91 KozMinPr6N-Regular , % mc/m
92 KozMinPr6N-Bold , % mc/bx
93 KozGoPr6N-Regular , % gt/m (multi)
94 KozGoPr6N-Bold , % gt/bx
95 KozGoPr6N-Medium , % gt/m (uni)
96 KozGoPr6N-Heavy , % gt/eb
97 KozGoPr6N-Heavy % mg/m
102 \DeclareOption{hiragino-pro}{
103 \ltjpreset_set_multi:n {
106 HiraKakuPro-W3 , % gt/m (multi)
108 HiraKakuPro-W6 , % gt/m (uni)
113 \DeclareOption{hiragino-pron}{
114 \ltjpreset_set_multi:n {
117 HiraKakuProN-W3 , % gt/m (multi)
119 HiraKakuProN-W6 , % gt/m (uni)
126 \DeclareOption{morisawa-pro}{
127 \ltjpreset_set_multi:n {
128 A-OTF-RyuminPro-Light.otf , A-OTF-FutoMinA101Pro-Bold.otf , % mc/m, mc/bx
129 A-OTF-GothicBBBPro-Medium.otf , A-OTF-FutoGoB101Pro-Bold.otf , % gt/m, gt/bx (multiweight))
130 A-OTF-GothicBBBPro-Medium.otf , A-OTF-MidashiGoPro-MB31.otf , % gt/m (uni), gt/eb
131 A-OTF-Jun101Pro-Light.otf % mg/m
134 \DeclareOption{morisawa-pr6n}{
135 \ltjpreset_set_multi:n {
136 A-OTF-RyuminPr6N-Light.otf , A-OTF-FutoMinA101Pr6N-Bold.otf , % mc/m, mc/bx
137 A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-FutoGoB101Pr6N-Bold.otf , % gt/m, gt/bx (multiweight))
138 A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-MidashiGoPr6N-MB31.otf , % gt/m (uni), gt/eb
139 A-OTF-ShinMGoPr6N-Light.otf % mg/m
144 \DeclareOption{yu-win}{
145 \ltjpreset_set_multi:n {
146 YuMincho-Regular , YuMincho-Demibold , % mc/m, mc/bx
147 YuGothic-Regular , YuGothic-Bold , % gt/m, gt/bx (multiweight))
148 YuGothic-Bold , YuGothic-Bold , % gt/m (uni), gt/eb
154 % according to http://support.apple.com/kb/HT5944
155 \DeclareOption{yu-osx}{
156 \ltjpreset_set_multi:n {
157 YuMincho~Medium , YuMincho~Demibold , % mc/m, mc/bx
158 YuGothic~Medium , YuGothic~Bold , % gt/m, gt/bx (multiweight))
159 YuGothic~Bold , YuGothic~Bold , % gt/m (uni), gt/eb
166 \ltjpreset_set_uni:nn { IPAMincho } { IPAGothic }
168 \DeclareOption{ipaex}{
169 \ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic }
172 \ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic }
175 % {ipa,ipaex,ms}-dx % Office 付属フォントを利用
176 \DeclareOption{ipaex-hg}{
177 \ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }
179 \DeclareOption{ipa-hg}{
180 \ltjpreset_set_office:nn { IPAMincho } { IPAGothic }
182 \DeclareOption{ms-hg}{
183 \ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }
188 \DeclareOption{noembed}{
189 \ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium }
190 \bool_set_true:N \l_ltjpreset_noembed_bool
193 \ExecuteOptions{ipaex}
196 \DeclareOption{match} {
197 \bool_if:NF \ltj_fontspec_match_bool {
198 \ltj_fontspec_match_cmd
199 \bool_set_true:N \ltj_fontspec_match_bool
204 %%%%%%%% main routine
206 \bool_new:N \l_ltjpreset_shape_nlck_bool
208 %% KozMinPr6N, HiraMinProN-W3 の場合はjp04 feature がないので,nlck にする
209 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
210 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
211 \clist_if_in:NnT \l_ltjpreset_font_list { KozMinPr6N-Regular }
212 { \bool_set_true:N \l_ltjpreset_shape_nlck_bool }
213 \clist_if_in:NnT \l_ltjpreset_font_list { HiraMinProN-W3 }
214 { \bool_set_true:N \l_ltjpreset_shape_nlck_bool }
219 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
220 \cs_set:Nx \ltjpreset_font_mc_m: { \tl_use:N \l_tmpa_tl }
223 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
224 \cs_set:Nx \ltjpreset_font_mc_bx: { \tl_use:N \l_tmpa_tl }
227 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
228 \cs_set:Nx \ltjpreset_font_gt_m: { \tl_use:N \l_tmpa_tl }
231 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
232 \cs_set:Nx \ltjpreset_font_gt_bx: { \tl_use:N \l_tmpa_tl }
235 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
236 \cs_set:Nx \ltjpreset_font_gt_n_uni: { \tl_use:N \l_tmpa_tl }
239 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
240 \cs_set:Nx \ltjpreset_font_gt_eb: { \tl_use:N \l_tmpa_tl }
243 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
244 \cs_set:Nx \ltjpreset_font_mg: { \tl_use:N \l_tmpa_tl }
246 %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換
247 \bool_if:NT \l_ltjpreset_office_bool {
248 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
249 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
250 \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme04.ttc }
251 \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge04.ttc }
252 \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu04.ttc }
253 \cs_set:Nx \ltjpreset_font_mg: { hgrsmp04.ttf }
254 \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
255 % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う
257 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
258 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
259 \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme.ttc }
260 \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge.ttc }
261 \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu.ttc }
262 \cs_set:Nx \ltjpreset_font_mg: { hgrsmp.ttf }
266 %% 90JIS/JIS2004 字形指定のオプション
267 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
268 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
269 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
270 \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp90 }
272 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
273 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
274 \bool_if:NTF \l_ltjpreset_shape_nlck_bool
275 { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +nlck } }
276 { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp04 } }
279 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
280 \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
281 \bool_if:NT \l_ltjpreset_shape_nlck_bool
282 { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=NLC } }
286 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
288 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
291 \fp_new:N \l_ltjpreset_scale_fp
293 \fontsize{10}{10}\selectfont
294 \fp_gset:Nn \l_ltjpreset_scale_fp {\zw / 10}
296 \msg_new:nnn { luatexja-preset }{ scale }{
297 Japanese~fonts~will~be~scaled~by~\fp_use:N \l_ltjpreset_scale_fp.
299 \msg_warning:nn { luatexja-preset }{ scale }
301 \cs_new:Nn \ltj_preset_define_family:nnn {
302 \DeclareFontShape{JY3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
303 {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} #3
304 : jfm=\ltjpreset_use_jfm: ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl
305 ; script=latn \bool_if:NT \l_ltjpreset_expert_bool { ;+hkna }}
307 \DeclareFontShape{JT3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
308 {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} #3
309 : jfm=ujisv ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl
310 ; script=latn \bool_if:NT \l_ltjpreset_expert_bool { ;+vkna }}
312 \bool_if:NT \l_ltjpreset_expert_bool {
313 \DeclareFontShape{JY3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
314 {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} #3
315 : jfm=\ltjpreset_use_jfm: ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
318 \DeclareFontShape{JT3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
319 {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} #3
320 : jfm=ujisv ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
326 \DeclareKanjiFamily{JY3}{ltjpm}{}\DeclareKanjiFamily{JT3}{ltjpm}{}
327 \DeclareKanjiFamily{JY3}{ltjpg}{}\DeclareKanjiFamily{JT3}{ltjpg}{}
329 \int_compare:nTF { \l_ltjpreset_deluxe_int == 2 } {
330 \bool_if:NT \l_ltjpreset_bold_bool {
331 \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
334 \bool_if:NTF \l_ltjpreset_bold_bool {
335 \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
337 \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
339 \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
340 \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
343 \ltj_preset_define_family:nnn {ltjpm} {m} {\ltjpreset_font_mc_m:}
344 \ltj_preset_define_family:nnn {ltjpm} {bx} {\ltjpreset_font_mc_bx:}
345 \ltj_preset_define_family:nnn {ltjpg} {m} {\ltjpreset_font_gt_m:}
346 \ltj_preset_define_family:nnn {ltjpg} {bx} {\ltjpreset_font_gt_bx:}
348 \def\mcdefault{ltjpm}\def\gtdefault{ltjpg}
351 \SetSymbolFont{mincho}{normal}{JY3}{ltjpm}{m}{n}
352 \SetSymbolFont{mincho}{bold}{JY3}{ltjpm}{bx}{n}
353 \DeclareMathAlphabet{\mathgt}{JY3}{ltjpg}{m}{n}
355 \bool_if:NT \l_ltjpreset_expert_bool {
356 \DeclareRobustCommand\rubyfamily { \kanjishape{rb}\selectfont }
359 \int_compare:nTF { \l_ltjpreset_deluxe_int == 2 } {
360 \DeclareKanjiFamily{JY3}{ltjpmg}{}\DeclareKanjiFamily{JT3}{ltjpmg}{}
361 \ltj_preset_define_family:nnn {ltjpmg} {m} {\ltjpreset_font_mg:}
362 \ltj_preset_define_family:nnn {ltjpg} {eb} {\ltjpreset_font_gt_eb:}
363 \DeclareRobustCommand\gtebfamily { \kanjifamily{ltjpg}\kanjiseries{eb}\selectfont }
364 \DeclareTextFontCommand{\textgteb}{\gtebfamily}
365 \DeclareRobustCommand\mgfamily { \kanjifamily{ltjpmg}\selectfont }
366 \DeclareTextFontCommand{\textmg}{\mgfamily}
369 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
373 \RequirePackage{luatexja-fontspec}
375 \msg_new:nnn { luatexja-preset }{ scale }{
376 Japanese~fonts~will~be~scaled~by~\fp_use:N \g_ltj_fontspec_scale_fp.
378 \msg_warning:nn { luatexja-preset }{ scale }
381 \tl_new:N \l_ltjpreset_add_features_tl
383 \tl_set:Nx \l_ltjpreset_add_features_tl {
384 \tl_use:N \l_ltjpreset_kanji_shape_tl,
385 YokoFeatures = { JFM = \ltjpreset_use_jfm: },
388 \bool_if:NT \l_ltjpreset_expert_bool {
389 \cs_set:Npn \rubyfamily { \addjfontfeatures {
390 Style=Ruby , YokoFeatures={RawFeature=-hkna} , TateFeatures={RawFeature=-vkna}
392 \tl_put_left:Nn \l_ltjpreset_add_features_tl {
393 YokoFeatures = {Style = HorizontalKana},
394 TateFeatures = {Style = VerticalKana},
398 % (丸)ゴシック体の設定: bold option もここで
399 \int_compare:nTF { \l_ltjpreset_deluxe_int == 2 } {
401 \newjfontfamily \mgfamily [
402 BoldFont = \ltjpreset_font_mg:,
403 \tl_use:N \l_ltjpreset_add_features_tl
404 \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
405 \tl_use:N \l_ltjpreset_add_features_tl
406 ] { \ltjpreset_font_mg: }
407 \DeclareTextFontCommand{\textmg}{\mgfamily}
409 %% 注意: ファミリは 'gteb'.シリーズは \mdseries のまま.
410 %% \bfseries を追加したほうが良い?
411 \newjfontfamily \gtebfamily [
412 BoldFont = \ltjpreset_font_gt_eb:,
413 \tl_use:N \l_ltjpreset_add_features_tl
414 \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
415 \tl_use:N \l_ltjpreset_add_features_tl
416 ] { \ltjpreset_font_gt_eb: }
417 \DeclareTextFontCommand{\textgteb}{\gtebfamily}
418 \bool_if:NT \l_ltjpreset_bold_bool {
419 \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
422 \bool_if:NTF \l_ltjpreset_bold_bool {
423 \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
425 \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
427 \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
428 \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
434 \addjfontfeature{ Kerning=Off }
437 BoldFont = \ltjpreset_font_mc_bx:
438 \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
439 \tl_use:N \l_ltjpreset_add_features_tl
440 ] { \ltjpreset_font_mc_m: }
442 BoldFont = \ltjpreset_font_gt_bx:
443 \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
444 \tl_use:N \l_ltjpreset_add_features_tl
445 ] { \ltjpreset_font_gt_m: }
447 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%