OSDN Git Service

9bebaf5b9e8193888a306f1e5cf55f046ef89505
[luatex-ja/luatexja.git] / src / addons / luatexja-preset.sty
1 % luatexja-preset.sty
2 \ProvidesPackage{luatexja-preset}[2017/06/30 Japanese font presets]
3
4 \RequirePackage{expl3,l3keys2e}
5 \RequirePackage{luatexja}
6 \ExplSyntaxOn
7
8 \fp_new:N \l_ltjpreset_scale_fp
9 \group_begin:
10 \fontsize{10}{10}\selectfont
11 \fp_gset:Nn \l_ltjpreset_scale_fp {\zw / 10}
12 \group_end:
13
14 \keys_define:nn { luatexja-preset }{
15   unknown .code:n = \PassOptionsToPackage { \l_keys_key_tl } { luatexja-fontspec },
16   scale .fp_gset:N = \l_ltjpreset_scale_fp,
17   match .code: n =
18     \renewcommand\jttdefault{\gtdefault}\@ltj@match@familytrue
19     \PassOptionsToPackage { match } { luatexja-fontspec },
20   match .value_forbidden:n = true
21 }
22 \cs_new:Nn \ltjpreset_declare_option:nn {
23   \keys_define:nn { luatexja-preset }{
24     #1 .code:n = #2,
25     #1 .value_forbidden:n = true
26   }
27 }
28 \cs_new:Nn \ltjpreset_declare_bool_option:nn {
29   \bool_new:c { l_ltjpreset_#1_bool }
30   \bool_set_false:c { l_ltjpreset_#1_bool }
31   \keys_define:nn { luatexja-preset }{
32     #1 .bool_set:c =  { l_ltjpreset_#1_bool },
33     #2 .bool_set_inverse:c =  { l_ltjpreset_#1_bool },
34     #1 .default:n =  true,
35     #2 .default:n =  true,
36   }
37 }
38
39 %%%%%%%% bool options
40 \ltjpreset_declare_bool_option:nn { nfssonly }{ fontspec }
41 \ltjpreset_declare_bool_option:nn { bold }{ nobold }
42 \ltjpreset_declare_bool_option:nn { expert }{ noexpert }
43 \ltjpreset_declare_bool_option:nn { deluxe }{ nodeluxe }
44
45 % JFM
46 \tl_new:N \ltjpreset_use_jfm_yoko_tl % 使用する JFM(横)
47 \tl_set:Nn \ltjpreset_use_jfm_yoko_tl {ujis}
48 \tl_new:N \ltjpreset_use_jfm_tate_tl % 使用する JFM(縦)
49 \tl_set:Nn \ltjpreset_use_jfm_tate_tl {ujisv}
50 \ltjpreset_declare_option:nn{jis}{\tl_set:Nn  \ltjpreset_use_jfm_yoko_tl {jis}}     % jis
51 \ltjpreset_declare_option:nn{ujis}{\tl_set:Nn  \ltjpreset_use_jfm_yoko_tl {ujis}}   % ujis
52
53 % 漢字字形
54 \tl_new:N \l_ltjpreset_kanji_shape_tl
55 \ltjpreset_declare_option:nn{90jis}{  \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
56 \ltjpreset_declare_option:nn{jis2004}{\tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
57
58 % font preset
59 \bool_new:N \l_ltjpreset_office_bool  % MS Office の HG 系フォントを使っているか
60 \bool_new:N \l_ltjpreset_noembed_bool % 非埋込か
61 \clist_new:N \l_ltjpreset_font_list
62
63 \cs_new:Npn \ltjpreset_set_uni:nn #1#2 {
64   \ltjpreset_set_multi:n { #1, #2, #2, #2, #2, #2, #2 }
65 }
66 \cs_new:Npn \ltjpreset_set_multi:n #1 {
67   \clist_set:Nn \l_ltjpreset_font_list { #1 }
68   \bool_set_false:N \l_ltjpreset_office_bool
69   \bool_set_false:N \l_ltjpreset_noembed_bool
70 }
71 \cs_new:Npn \ltjpreset_set_office:nn #1 #2{
72   \ltjpreset_set_multi:n {
73     #1, HGMinchoE ,           % mc/m, mc/bx
74     HGGothicM , HGGothicE ,   % gt/m, gt/bx (multiweight))
75     #2 , HGSoeiKakugothicUB , % gt/m (uni), gt/eb
76     HGMaruGothicMPRO          % mg/m
77   }
78   \bool_set_true:N \l_ltjpreset_office_bool
79 }
80
81
82 %%%%%%%% プリセット達
83
84 % カスタム指定
85  \keys_define:nn { luatexja-preset }{
86     custom .code:n = \ltjpreset_set_multi:n { #1 },
87     custom .value_required:n = true,
88     jfm_yoko .tl_set:N = \ltjpreset_use_jfm_yoko_tl,
89     jfm_tate .tl_set:N = \ltjpreset_use_jfm_tate_tl,
90 }
91
92 % 小塚 (Adobe)
93 %% Pro
94 \ltjpreset_declare_option:nn{kozuka-pro}{
95   \ltjpreset_set_multi:n {
96     KozMinPro-Regular, % mc/m
97     KozMinPro-Bold,    % mc/bx
98     KozGoPro-Regular,  % gt/m  (multi)
99     KozGoPro-Bold,     % gt/bx
100     KozGoPro-Medium,   % gt/m  (uni)
101     KozGoPro-Heavy,    % gt/eb
102     KozGoPro-Heavy,    % mg/m
103     KozMinPro-Light,   % mc/l
104   }
105 }
106 %% Pr6
107 \ltjpreset_declare_option:nn{kozuka-pr6}{
108   \ltjpreset_set_multi:n {
109     KozMinProVI-Regular, % mc/m
110     KozMinProVI-Bold,    % mc/bx
111     KozGoProVI-Regular,  % gt/m  (multi)
112     KozGoProVI-Bold,     % gt/bx
113     KozGoProVI-Medium,   % gt/m  (uni)
114     KozGoProVI-Heavy,    % gt/eb
115     KozGoProVI-Heavy,    % mg/m
116     KozMinProVI-Light,   % mc/l
117   }
118 }
119 %% Pr6N
120 \ltjpreset_declare_option:nn{kozuka-pr6n}{
121   \ltjpreset_set_multi:n {
122     KozMinPr6N-Regular, % mc/m
123     KozMinPr6N-Bold,    % mc/bx
124     KozGoPr6N-Regular,  % gt/m  (multi)
125     KozGoPr6N-Bold,     % gt/bx
126     KozGoPr6N-Medium,   % gt/m  (uni)
127     KozGoPr6N-Heavy,    % gt/eb
128     KozGoPr6N-Heavy,    % mg/m
129     KozMinPr6N-Light,   % mc/l
130   }
131 }
132
133 % ヒラギノ (OSX)
134 \ltjpreset_declare_option:nn{hiragino-pro}{
135   \ltjpreset_set_multi:n {
136     HiraMinPro-W3 ,
137     HiraMinPro-W6 ,
138     HiraKakuPro-W3 , % gt/m (multi)
139     HiraKakuPro-W6 ,
140     HiraKakuPro-W6 , % gt/m (uni)
141     HiraKakuStd-W8 ,
142     HiraMaruPro-W4 ,
143     HiraMinPro-W2,
144   }
145 }
146 \ltjpreset_declare_option:nn{hiragino-pron}{
147   \ltjpreset_set_multi:n {
148     HiraMinProN-W3 ,
149     HiraMinProN-W6 ,
150     HiraKakuProN-W3 , % gt/m (multi)
151     HiraKakuProN-W6 ,
152     HiraKakuProN-W6 , % gt/m (uni)
153     HiraKakuStdN-W8 ,
154     HiraMaruProN-W4 ,
155     HiraMinProN-W2 ,
156   }
157 }
158
159 % モリサワ
160 \ltjpreset_declare_option:nn{morisawa-pro}{
161   \ltjpreset_set_multi:n {
162     A-OTF-RyuminPro-Light.otf , A-OTF-FutoMinA101Pro-Bold.otf ,    % mc/m, mc/bx
163     A-OTF-GothicBBBPro-Medium.otf , A-OTF-FutoGoB101Pro-Bold.otf , % gt/m, gt/bx (multiweight))
164     A-OTF-GothicBBBPro-Medium.otf , A-OTF-MidashiGoPro-MB31.otf ,  % gt/m (uni), gt/eb
165     A-OTF-Jun101Pro-Light.otf % mg/m
166   }
167 }
168 \ltjpreset_declare_option:nn{morisawa-pr6n}{
169   \ltjpreset_set_multi:n {
170     A-OTF-RyuminPr6N-Light.otf , A-OTF-FutoMinA101Pr6N-Bold.otf ,    % mc/m, mc/bx
171     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-FutoGoB101Pr6N-Bold.otf , % gt/m, gt/bx (multiweight))
172     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-MidashiGoPr6N-MB31.otf ,  % gt/m (uni), gt/eb
173     A-OTF-ShinMGoPr6N-Light.otf                                      % mg/m
174   }
175 }
176
177 % 游明朝/游ゴシック (Win8.1)
178 \ltjpreset_declare_option:nn{yu-win}{
179   \ltjpreset_set_multi:n {
180     YuMincho-Regular , YuMincho-Demibold , % mc/m, mc/bx
181     YuGothic-Regular , YuGothic-Bold ,     % gt/m, gt/bx (multiweight))
182     YuGothic-Regular , YuGothic-Bold ,     % gt/m (uni), gt/eb
183     YuGothic-Bold,     YuMincho-Light      % mg/m, mc/l
184   }
185 }
186 % Win10
187 \ltjpreset_declare_option:nn{yu-win10}{
188   \ltjpreset_set_multi:n {
189     YuMincho-Regular , YuMincho-Demibold , % mc/m, mc/bx
190     YuGothic-Regular , YuGothic-Bold     , % gt/m, gt/bx (multiweight))
191     YuGothic-Medium  , YuGothic-Bold ,     % gt/m (uni), gt/eb
192     YuGothic-Bold,     YuMincho-Light      % mg/m, mc/l
193   }
194 }
195
196 % Yu fonts in OSX
197 % according to http://support.apple.com/kb/HT5944
198 \ltjpreset_declare_option:nn{yu-osx}{
199   \ltjpreset_set_multi:n {
200     YuMincho~Medium , YuMincho~Demibold , % mc/m, mc/bx
201     YuGothic~Medium , YuGothic~Bold ,     % gt/m, gt/bx (multiweight))
202     YuGothic~Medium   , YuGothic~Bold ,   % gt/m (uni), gt/eb
203     YuGothic~Bold                         % mg/m
204   }
205 }
206
207 % moga-mobo
208 \ltjpreset_declare_option:nn{moga-mobo}{
209   \ltjpreset_set_multi:n {
210     Moga90Mincho, Moga90Mincho~Bold ,  % mc/m, mc/bx
211     Moga90Gothic, Moga90Gothic~Bold,   % gt/m, gt/bx (multiweight))
212     Moga90Gothic, Moga90Gothic~Bold,   % gt/m (uni), gt/eb
213     Mobo90Gothic                       % mg/m
214   }
215 }
216 \ltjpreset_declare_option:nn{moga-mobo-ex}{
217   \ltjpreset_set_multi:n {
218     MogaEx90Mincho, MogaEx90Mincho~Bold ,  % mc/m, mc/bx
219     MogaEx90Gothic, MogaEx90Gothic~Bold,   % gt/m, gt/bx (multiweight))
220     MogaEx90Gothic, MogaEx90Gothic~Bold,   % gt/m (uni), gt/eb
221     MoboEx90Gothic                         % mg/m
222   }
223 }
224
225 % Ume fones
226 \ltjpreset_declare_option:nn{ume}{
227   \ltjpreset_set_multi:n {
228     Ume~Mincho, Ume~Mincho,
229     Ume~Gothic, Ume~Gothic~O5,
230     Ume~Gothic~O5, Ume~Gothic~O5,
231     Ume~Gothic~O4
232   }
233 }
234
235 % Source Han {Serif,Sans}
236 \ltjpreset_declare_option:nn{sourcehan}{
237   \ltjpreset_set_multi:n {
238     Source~Han~Serif~Regular, % mc/m
239     Source~Han~Serif~Bold,    % mc/bx
240     Source~Han~Sans~Regular,  % gt/m  (multi)
241     Source~Han~Sans~Bold,     % gt/bx
242     Source~Han~Sans~Medium,   % gt/m  (uni)
243     Source~Han~Sans~Heavy,    % gt/eb
244     Source~Han~Sans~Heavy,    % mg/m
245     Source~Han~Serif~Light,   % mc/l
246   }
247 }
248 \ltjpreset_declare_option:nn{sourcehan-jp}{
249   \ltjpreset_set_multi:n {
250     Source~Han~Serif~JP~Regular, % mc/m
251     Source~Han~Serif~JP~Bold,    % mc/bx
252     Source~Han~Sans~JP~Regular,  % gt/m  (multi)
253     Source~Han~Sans~JP~Bold,     % gt/bx
254     Source~Han~Sans~JP~Medium,   % gt/m  (uni)
255     Source~Han~Sans~JP~Heavy,    % gt/eb
256     Source~Han~Sans~JP~Heavy,    % mg/m
257     Source~Han~Serif~JP~Light,   % mc/l
258   }
259 }
260 \ltjpreset_declare_option:nn{noto-otc}{
261   \ltjpreset_set_multi:n {
262     Noto~Serif~CJK~Regular, % mc/m
263     Noto~Serif~CJK~Bold,    % mc/bx
264     Noto~Sans~CJK~Regular,  % gt/m  (multi)
265     Noto~Sans~CJK~Bold,     % gt/bx
266     Noto~Sans~CJK~Medium,   % gt/m  (uni)
267     Noto~Sans~CJK~Black,    % gt/eb
268     Noto~Sans~CJK~Black,    % mg/m
269     Noto~Serif~CJK~Light,   % mc/l
270   }
271 }
272 \ltjpreset_declare_option:nn{noto-otf}{
273   \ltjpreset_set_multi:n {
274     Noto~Serif~CJK~JP~Regular, % mc/m
275     Noto~Serif~CJK~JP~Bold,    % mc/bx
276     Noto~Sans~CJK~JP~Regular,  % gt/m  (multi)
277     Noto~Sans~CJK~JP~Bold,     % gt/bx
278     Noto~Sans~CJK~JP~Medium,   % gt/m  (uni)
279     Noto~Sans~CJK~JP~Black,    % gt/eb
280     Noto~Sans~CJK~JP~Black,    % mg/m
281     Noto~Serif~CJK~JP~Light,   % mc/l
282   }
283 }
284
285
286 % ipa, ipaex, ms
287 \ltjpreset_declare_option:nn{ipa}{
288   \ltjpreset_set_uni:nn { IPAMincho } { IPAGothic }
289 }
290 \ltjpreset_declare_option:nn{ipaex}{
291   \ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic }
292 }
293 \ltjpreset_declare_option:nn{ms}{
294   \ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic }
295 }
296
297 % {ipa,ipaex,ms}-dx % Office 付属フォントを利用
298 \ltjpreset_declare_option:nn{ipaex-hg}{
299   \ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }
300 }
301 \ltjpreset_declare_option:nn{ipa-hg}{
302   \ltjpreset_set_office:nn { IPAMincho } { IPAGothic }
303 }
304 \ltjpreset_declare_option:nn{ms-hg}{
305   \ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }
306 }
307
308
309 % 非埋込
310 \ltjpreset_declare_option:nn{noembed}{
311   \ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium }
312   \bool_set_true:N \l_ltjpreset_noembed_bool
313 }
314
315 \keys_set:nn { luatexja-preset }{ ipaex }
316 \ProcessKeysOptions { luatexja-preset }
317
318 %%%%%%%% main routine
319
320 \msg_new:nnn { luatexja-preset }{ ltj-fontspec }{
321   The~ luatexja-fontspec~ package~ is~ loaded~ already.~
322   Hence~ we~ ignore~ `nfssonly'~option.
323 }
324 \@ifpackageloaded{luatexja-fontspec}{
325   \bool_if:NT \l_ltjpreset_nfssonly_bool
326     { \msg_warning:nn { luatexja-preset }{ ltj-fontspec } }
327   \bool_set_false:N \l_ltjpreset_nfssonly_bool
328 }{}
329
330 \bool_new:N \l_ltjpreset_shape_nlck_bool
331 %% KozMinPr6N, HiraMinProN-W3 の場合はjp04 feature がないので,nlck にする
332 \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
333 \tl_if_eq:NNTF \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
334   \clist_if_in:NnT \l_ltjpreset_font_list { KozMinPr6N-Regular }
335    { \bool_set_true:N \l_ltjpreset_shape_nlck_bool }
336   \clist_if_in:NnT \l_ltjpreset_font_list { HiraMinProN-W3 }
337    { \bool_set_true:N \l_ltjpreset_shape_nlck_bool }
338    \clist_if_in:NnT \l_ltjpreset_font_list { Moga90Mincho }
339    {
340      \tl_remove_all:Nn \l_ltjpreset_font_list {90}
341      \tl_clear:N \l_ltjpreset_kanji_shape_tl
342    }
343    \clist_if_in:NnT \l_ltjpreset_font_list { MogaEx90Mincho }
344    {
345      \tl_remove_all:Nn \l_ltjpreset_font_list {90}
346      \tl_clear:N \l_ltjpreset_kanji_shape_tl
347    }
348 }{
349   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
350   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
351     \clist_if_in:NnT \l_ltjpreset_font_list { Moga90Mincho }
352      { \tl_clear:N \l_ltjpreset_kanji_shape_tl }
353   }
354 }
355
356 %%%%  リストからの展開
357 % mc/m
358 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
359 \cs_set:Nx \ltjpreset_font_mc_m: { \tl_use:N \l_tmpa_tl }
360
361 % mc/bx
362 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
363 \cs_set:Nx \ltjpreset_font_mc_bx: { \tl_use:N \l_tmpa_tl }
364
365 % gt/m
366 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
367 \cs_set:Nx \ltjpreset_font_gt_m: { \tl_use:N \l_tmpa_tl }
368
369 % gt/bx
370 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
371 \cs_set:Nx \ltjpreset_font_gt_bx: { \tl_use:N \l_tmpa_tl }
372
373 % gt/m-uni
374 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
375 \cs_set:Nx \ltjpreset_font_gt_n_uni: { \tl_use:N \l_tmpa_tl }
376
377 % gt/eb
378 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
379 \cs_set:Nx \ltjpreset_font_gt_eb: { \tl_use:N \l_tmpa_tl }
380
381 % mg/m
382 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
383 \cs_set:Nx \ltjpreset_font_mg: { \tl_use:N \l_tmpa_tl }
384
385
386 %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換
387 \bool_if:NT \l_ltjpreset_office_bool {
388   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
389   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
390     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme04.ttc }
391     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge04.ttc }
392     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu04.ttc }
393     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp04.ttf }
394     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
395     % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う
396   }
397   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
398   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
399     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme.ttc }
400     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge.ttc }
401     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu.ttc }
402     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp.ttf }
403   }
404 }
405
406 % mc/l
407 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
408 \cs_set:Nx \ltjpreset_font_mc_l: {
409    \tl_if_blank:nTF \l_tmpa_tl { \ltjpreset_font_mc_m: } {\tl_use:N \l_tmpa_tl }
410 }
411
412 %% 90JIS/JIS2004 字形指定のオプション
413 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
414   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
415   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
416     \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp90 }
417   }
418   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
419   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
420     \bool_if:NTF \l_ltjpreset_shape_nlck_bool
421       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +nlck } }
422       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp04 } }
423   }
424 } {
425   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
426   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
427     \bool_if:NT \l_ltjpreset_shape_nlck_bool
428       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=NLC } }
429   }
430 }
431
432
433 %%%%%%%% 存在判定
434 \msg_new:nnn { luatexja-preset }{ no-font }{
435   Font~ for~ #1~ (#2)~ is~ not~found.~ Hence~ I~ substitute~ #3~ (#4)~ for~ it.
436 }
437 \bool_if:NT \l_ltjpreset_deluxe_bool {
438   \group_begin:
439     \suppressfontnotfounderror=1
440     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_gt_eb:"\relax
441     \ifx \l_ltjpreset_font_test: \nullfont
442       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
443         { \tl_use:N \ltjpreset_font_gt_eb: }{ gt/eb }{ \tl_use:N \ltjpreset_font_gt_bx: }{ gt/bx }
444       \cs_gset_eq:NN \ltjpreset_font_gt_eb: \ltjpreset_font_gt_bx:
445     \fi
446     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_mc_l:"\relax
447     \ifx \l_ltjpreset_font_test: \nullfont
448       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
449         { \tl_use:N \ltjpreset_font_mc_l: }{ mc/l }{ \tl_use:N \ltjpreset_font_mc_m: }{ mc/m }
450       \cs_gset_eq:NN \ltjpreset_font_mc_l: \ltjpreset_font_mc_m:
451     \fi
452     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_mg:"\relax
453     \ifx \l_ltjpreset_font_test: \nullfont
454       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
455         { \tl_use:N \ltjpreset_font_mg: }{ mg/m }{ \tl_use:N \ltjpreset_font_gt_bx: }{ gt/bx }
456       \cs_gset_eq:NN \ltjpreset_font_mg: \ltjpreset_font_gt_bx:
457     \fi
458   \group_end:
459 }
460
461 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
462 %%%%%%%% nfss only
463 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
464 \msg_new:nnn { luatexja-preset }{ scale }{
465   Japanese~fonts~will~be~scaled~by~\fp_use:N \l_ltjpreset_scale_fp.
466 }
467 \msg_warning:nn { luatexja-preset }{ scale }
468
469 \cs_new:Nn \ltj_preset_define_family:nnn {
470   \DeclareFontShape{JY3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
471     {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
472     : jfm=\tl_use:N \ltjpreset_use_jfm_yoko_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl
473     ; script=hani \bool_if:NT \l_ltjpreset_expert_bool { ;+hkna }}
474   } {}
475   \DeclareFontShape{JT3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
476     {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
477     : jfm=\tl_use:N \ltjpreset_use_jfm_tate_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl;
478     ; script=hani \bool_if:NT \l_ltjpreset_expert_bool { ;+vkna }}
479   } {}
480   \bool_if:NT \l_ltjpreset_expert_bool {
481     \DeclareFontShape{JY3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
482       {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
483       : jfm=\tl_use:N \ltjpreset_use_jfm_yoko_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
484       ; script=kana}
485     } {}
486     \DeclareFontShape{JT3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
487       {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
488       : jfm=\tl_use:N \ltjpreset_use_jfm_tate_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
489       ; script=kana}
490     } {}
491   }
492 }
493
494 \DeclareKanjiFamily{JY3}{ltjpm}{}\DeclareKanjiFamily{JT3}{ltjpm}{}
495 \DeclareKanjiFamily{JY3}{ltjpg}{}\DeclareKanjiFamily{JT3}{ltjpg}{}
496
497 \bool_if:NTF \l_ltjpreset_deluxe_bool {
498   \bool_if:NT \l_ltjpreset_bold_bool {
499     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
500   }
501 }{
502   \bool_if:NTF \l_ltjpreset_bold_bool {
503     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
504   }{
505     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
506   }
507   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
508   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
509 }
510
511 \ltj_preset_define_family:nnn {ltjpm} {m}  {\ltjpreset_font_mc_m:}
512 \ltj_preset_define_family:nnn {ltjpm} {bx} {\ltjpreset_font_mc_bx:}
513 \ltj_preset_define_family:nnn {ltjpg} {m}  {\ltjpreset_font_gt_m:}
514 \ltj_preset_define_family:nnn {ltjpg} {bx} {\ltjpreset_font_gt_bx:}
515
516 \def\mcdefault{ltjpm}\def\gtdefault{ltjpg}
517 \normalfont
518
519 \SetSymbolFont{mincho}{normal}{JY3}{ltjpm}{m}{n}
520 \SetSymbolFont{mincho}{bold}{JY3}{ltjpm}{bx}{n}
521 \DeclareMathAlphabet{\mathgt}{JY3}{ltjpg}{m}{n}
522
523 \bool_if:NT \l_ltjpreset_expert_bool {
524   \DeclareRobustCommand\rubyfamily { \kanjishape{rb}\selectfont }
525 }
526
527 \bool_if:NTF \l_ltjpreset_deluxe_bool {
528   \DeclareKanjiFamily{JY3}{ltjpmg}{}\DeclareKanjiFamily{JT3}{ltjpmg}{}
529   \def\ltdefault{l}
530   \DeclareRobustCommand\ltseries { \not@math@alphabet\ltseries\relax\fontseries\ltdefault\selectfont }
531   \ltj_preset_define_family:nnn {ltjpm}  {l} {\ltjpreset_font_mc_l:}
532   \def\ebdefault{eb}
533   \DeclareRobustCommand\ebseries { \not@math@alphabet\ebseries\relax\fontseries\ebdefault\selectfont }
534   \DeclareRobustCommand\gtebfamily { \kanjifamily{ltjpg}\fontseries{\ebdefault}\selectfont }
535   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
536   \ltj_preset_define_family:nnn {ltjpg}  {eb} {\ltjpreset_font_gt_eb:}
537   \DeclareRobustCommand\mgfamily { \not@math@alphabet\mgfamily\relax\kanjifamily{ltjpmg}\selectfont }
538   \DeclareTextFontCommand{\textmg}{\mgfamily}
539   \ltj_preset_define_family:nnn {ltjpmg} {m}  {\ltjpreset_font_mg:}
540 }
541
542 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
543 %%%%%%%% fontspec
544 } {
545 \PassOptionsToPackage { scale = \fp_use:N \l_ltjpreset_scale_fp } { luatexja-fontspec }
546 \RequirePackage{luatexja-fontspec}
547 % scale
548 \msg_new:nnn { luatexja-preset }{ scale }{
549   Japanese~fonts~will~be~scaled~by~\fp_use:N \g_ltj_fontspec_scale_fp.
550 }
551 \msg_warning:nn { luatexja-preset }{ scale }
552
553 % expert 用設定
554 \tl_new:N \l_ltjpreset_add_features_tl
555
556 \tl_set:Nx \l_ltjpreset_add_features_tl {
557   \tl_use:N \l_ltjpreset_kanji_shape_tl,
558   YokoFeatures = { JFM = \tl_use:N \ltjpreset_use_jfm_yoko_tl },
559   TateFeatures = { JFM = \tl_use:N \ltjpreset_use_jfm_tate_tl },
560   Script=CJK,
561 }
562
563 \bool_if:NT \l_ltjpreset_expert_bool {
564   \cs_set:Npn \rubyfamily { \addjfontfeatures {
565     Style=Ruby , YokoFeatures={RawFeature=-hkna} , TateFeatures={RawFeature=-vkna}
566   } }
567   \tl_put_left:Nn \l_ltjpreset_add_features_tl {
568     YokoFeatures = {Style = HorizontalKana},
569     TateFeatures = {Style = VerticalKana},
570   }
571 }
572
573 % (丸)ゴシック体の設定: bold option もここで
574 \bool_if:NTF \l_ltjpreset_deluxe_bool {
575 %% mg
576  \newjfontfamily \mgfamily [
577       BoldFont = \ltjpreset_font_mg:,
578       \bool_if:NT \l_ltjpreset_noembed_bool { NoEmbed,  }
579       \tl_use:N \l_ltjpreset_add_features_tl
580     ] { \ltjpreset_font_mg: }
581     \DeclareTextFontCommand{\textmg}{\mgfamily}
582 %% gt/eb
583   \def\ebdefault{eb}
584   \DeclareRobustCommand\ebseries { \not@math@alphabet\ebseries\relax\fontseries\ebdefault\selectfont }
585   \DeclareRobustCommand\gtebfamily { \kanjifamily{\gtdefault}\fontseries{\ebdefault}\selectfont }
586   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
587 %% mc/l
588   \def\ltdefault{l}
589   \DeclareRobustCommand\ltseries { \not@math@alphabet\ltseries\relax\fontseries\ltdefault\selectfont }
590   \bool_if:NT \l_ltjpreset_bold_bool {
591     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
592   }
593 }{
594   \bool_if:NTF \l_ltjpreset_bold_bool {
595     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
596   }{
597     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
598   }
599   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
600   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
601 }
602
603
604 % 実際の fontspec の呼びだし
605
606 \addjfontfeature{ Kerning=Off }
607
608 \setmainjfont [
609   \bool_if:NT \l_ltjpreset_deluxe_bool {
610     FontFace={l}{n}{\ltjpreset_font_mc_l:},
611   }
612   BoldFont = \ltjpreset_font_mc_bx:
613   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
614   \tl_use:N \l_ltjpreset_add_features_tl
615 ] { \ltjpreset_font_mc_m: }
616 \setsansjfont [
617   \bool_if:NT \l_ltjpreset_deluxe_bool {
618     FontFace={eb}{n}{\ltjpreset_font_gt_eb:},
619   }
620   BoldFont = \ltjpreset_font_gt_bx:
621   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
622   \tl_use:N \l_ltjpreset_add_features_tl
623 ] { \ltjpreset_font_gt_m: }
624
625 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
626 }
627 \ExplSyntaxOff
628 \endinput