OSDN Git Service

update manuals
[luatex-ja/luatexja.git] / src / addons / luatexja-preset.sty
1 % luatexja-preset.sty
2 \ProvidesPackage{luatexja-preset}[2017/07/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_if_empty:NTF \l_ltjpreset_font_list
408   { \tl_set:Nn \l_tmpa_tl {~} }{ \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl }
409 \tl_if_empty:NT \l_tmpa_tl {\tl_set\colon Nn \l_tmpa_tl {~}}
410 \cs_set:Nx \ltjpreset_font_mc_l: {
411    \tl_if_blank:nTF \l_tmpa_tl { \ltjpreset_font_mc_m: } {\tl_use:N \l_tmpa_tl }
412 }
413
414 %% 90JIS/JIS2004 字形指定のオプション
415 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
416   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
417   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
418     \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp90 }
419   }
420   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
421   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
422     \bool_if:NTF \l_ltjpreset_shape_nlck_bool
423       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +nlck } }
424       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { +jp04 } }
425   }
426 } {
427   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
428   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
429     \bool_if:NT \l_ltjpreset_shape_nlck_bool
430       { \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=NLC } }
431   }
432 }
433
434
435 %%%%%%%% 存在判定
436 \msg_new:nnn { luatexja-preset }{ no-font }{
437   Font~ for~ #1~ (#2)~ is~ not~found.~ Hence~ I~ substitute~ #3~ (#4)~ for~ it.
438 }
439 \bool_if:NT \l_ltjpreset_deluxe_bool {
440   \group_begin:
441     \suppressfontnotfounderror=1
442     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_gt_eb:"\relax
443     \ifx \l_ltjpreset_font_test: \nullfont
444       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
445         { \tl_use:N \ltjpreset_font_gt_eb: }{ gt/eb }{ \tl_use:N \ltjpreset_font_gt_bx: }{ gt/bx }
446       \cs_gset_eq:NN \ltjpreset_font_gt_eb: \ltjpreset_font_gt_bx:
447     \fi
448     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_mc_l:"\relax
449     \ifx \l_ltjpreset_font_test: \nullfont
450       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
451         { \tl_use:N \ltjpreset_font_mc_l: }{ mc/l }{ \tl_use:N \ltjpreset_font_mc_m: }{ mc/m }
452       \cs_gset_eq:NN \ltjpreset_font_mc_l: \ltjpreset_font_mc_m:
453     \fi
454     \font \l_ltjpreset_font_test: = "\tl_use:N \ltjpreset_font_mg:"\relax
455     \ifx \l_ltjpreset_font_test: \nullfont
456       \msg_warning:nnxxxx { luatexja-preset }{ no-font }
457         { \tl_use:N \ltjpreset_font_mg: }{ mg/m }{ \tl_use:N \ltjpreset_font_gt_bx: }{ gt/bx }
458       \cs_gset_eq:NN \ltjpreset_font_mg: \ltjpreset_font_gt_bx:
459     \fi
460   \group_end:
461 }
462
463 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
464 %%%%%%%% nfss only
465 \bool_if:NTF \l_ltjpreset_nfssonly_bool {
466 \msg_new:nnn { luatexja-preset }{ scale }{
467   Japanese~fonts~will~be~scaled~by~\fp_use:N \l_ltjpreset_scale_fp.
468 }
469 \msg_warning:nn { luatexja-preset }{ scale }
470
471 \cs_new:Nn \ltj_preset_define_family:nnn {
472   \DeclareFontShape{JY3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
473     {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
474     : jfm=\tl_use:N \ltjpreset_use_jfm_yoko_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl
475     ; script=hani \bool_if:NT \l_ltjpreset_expert_bool { ;+hkna }}
476   } {}
477   \DeclareFontShape{JT3}{#1}{#2}{n}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
478     {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
479     : jfm=\tl_use:N \ltjpreset_use_jfm_tate_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl;
480     ; script=hani \bool_if:NT \l_ltjpreset_expert_bool { ;+vkna }}
481   } {}
482   \bool_if:NT \l_ltjpreset_expert_bool {
483     \DeclareFontShape{JY3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
484       {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
485       : jfm=\tl_use:N \ltjpreset_use_jfm_yoko_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
486       ; script=kana}
487     } {}
488     \DeclareFontShape{JT3}{#1}{#2}{rb}{ <-> s*[\fp_use:N \l_ltjpreset_scale_fp]
489       {\bool_if:NT \l_ltjpreset_noembed_bool {psft:} "#3"
490       : jfm=\tl_use:N \ltjpreset_use_jfm_tate_tl ;-kern;\tl_use:N \l_ltjpreset_kanji_shape_tl ;+ruby
491       ; script=kana}
492     } {}
493   }
494 }
495
496 \DeclareKanjiFamily{JY3}{ltjpm}{}\DeclareKanjiFamily{JT3}{ltjpm}{}
497 \DeclareKanjiFamily{JY3}{ltjpg}{}\DeclareKanjiFamily{JT3}{ltjpg}{}
498
499 \bool_if:NTF \l_ltjpreset_deluxe_bool {
500   \bool_if:NT \l_ltjpreset_bold_bool {
501     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
502   }
503 }{
504   \bool_if:NTF \l_ltjpreset_bold_bool {
505     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
506   }{
507     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
508   }
509   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
510   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
511 }
512
513 \ltj_preset_define_family:nnn {ltjpm} {m}  {\ltjpreset_font_mc_m:}
514 \ltj_preset_define_family:nnn {ltjpm} {bx} {\ltjpreset_font_mc_bx:}
515 \ltj_preset_define_family:nnn {ltjpg} {m}  {\ltjpreset_font_gt_m:}
516 \ltj_preset_define_family:nnn {ltjpg} {bx} {\ltjpreset_font_gt_bx:}
517
518 \def\mcdefault{ltjpm}\def\gtdefault{ltjpg}
519 \normalfont
520
521 \SetSymbolFont{mincho}{normal}{JY3}{ltjpm}{m}{n}
522 \SetSymbolFont{mincho}{bold}{JY3}{ltjpm}{bx}{n}
523 \DeclareMathAlphabet{\mathgt}{JY3}{ltjpg}{m}{n}
524
525 \bool_if:NT \l_ltjpreset_expert_bool {
526   \DeclareRobustCommand\rubyfamily { \kanjishape{rb}\selectfont }
527 }
528
529 \bool_if:NTF \l_ltjpreset_deluxe_bool {
530   \DeclareKanjiFamily{JY3}{ltjpmg}{}\DeclareKanjiFamily{JT3}{ltjpmg}{}
531   \def\ltdefault{l}
532   \DeclareRobustCommand\ltseries { \not@math@alphabet\ltseries\relax\fontseries\ltdefault\selectfont }
533   \ltj_preset_define_family:nnn {ltjpm}  {l} {\ltjpreset_font_mc_l:}
534   \def\ebdefault{eb}
535   \DeclareRobustCommand\ebseries { \not@math@alphabet\ebseries\relax\fontseries\ebdefault\selectfont }
536   \DeclareRobustCommand\gtebfamily { \kanjifamily{ltjpg}\fontseries{\ebdefault}\selectfont }
537   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
538   \ltj_preset_define_family:nnn {ltjpg}  {eb} {\ltjpreset_font_gt_eb:}
539   \DeclareRobustCommand\mgfamily { \not@math@alphabet\mgfamily\relax\kanjifamily{ltjpmg}\selectfont }
540   \DeclareTextFontCommand{\textmg}{\mgfamily}
541   \ltj_preset_define_family:nnn {ltjpmg} {m}  {\ltjpreset_font_mg:}
542 }
543
544 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
545 %%%%%%%% fontspec
546 } {
547 \PassOptionsToPackage { scale = \fp_use:N \l_ltjpreset_scale_fp } { luatexja-fontspec }
548 \RequirePackage{luatexja-fontspec}
549 % scale
550 \msg_new:nnn { luatexja-preset }{ scale }{
551   Japanese~fonts~will~be~scaled~by~\fp_use:N \g_ltj_fontspec_scale_fp.
552 }
553 \msg_warning:nn { luatexja-preset }{ scale }
554
555 % expert 用設定
556 \tl_new:N \l_ltjpreset_add_features_tl
557
558 \tl_set:Nx \l_ltjpreset_add_features_tl {
559   \tl_use:N \l_ltjpreset_kanji_shape_tl,
560   YokoFeatures = { JFM = \tl_use:N \ltjpreset_use_jfm_yoko_tl },
561   TateFeatures = { JFM = \tl_use:N \ltjpreset_use_jfm_tate_tl },
562   Script=CJK,
563 }
564
565 \bool_if:NT \l_ltjpreset_expert_bool {
566   \cs_set:Npn \rubyfamily { \addjfontfeatures {
567     Style=Ruby , YokoFeatures={RawFeature=-hkna} , TateFeatures={RawFeature=-vkna}
568   } }
569   \tl_put_left:Nn \l_ltjpreset_add_features_tl {
570     YokoFeatures = {Style = HorizontalKana},
571     TateFeatures = {Style = VerticalKana},
572   }
573 }
574
575 % (丸)ゴシック体の設定: bold option もここで
576 \bool_if:NTF \l_ltjpreset_deluxe_bool {
577 %% mg
578  \newjfontfamily \mgfamily [
579       BoldFont = \ltjpreset_font_mg:,
580       \bool_if:NT \l_ltjpreset_noembed_bool { NoEmbed,  }
581       \tl_use:N \l_ltjpreset_add_features_tl
582     ] { \ltjpreset_font_mg: }
583     \DeclareTextFontCommand{\textmg}{\mgfamily}
584 %% gt/eb
585   \def\ebdefault{eb}
586   \DeclareRobustCommand\ebseries { \not@math@alphabet\ebseries\relax\fontseries\ebdefault\selectfont }
587   \DeclareRobustCommand\gtebfamily { \kanjifamily{\gtdefault}\fontseries{\ebdefault}\selectfont }
588   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
589 %% mc/l
590   \def\ltdefault{l}
591   \DeclareRobustCommand\ltseries { \not@math@alphabet\ltseries\relax\fontseries\ltdefault\selectfont }
592   \bool_if:NT \l_ltjpreset_bold_bool {
593     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
594   }
595 }{
596   \bool_if:NTF \l_ltjpreset_bold_bool {
597     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
598   }{
599     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
600   }
601   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
602   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
603 }
604
605
606 % 実際の fontspec の呼びだし
607
608 \addjfontfeature{ Kerning=Off }
609
610 \setmainjfont [
611   \bool_if:NT \l_ltjpreset_deluxe_bool {
612     FontFace={l}{n}{\ltjpreset_font_mc_l:},
613   }
614   BoldFont = \ltjpreset_font_mc_bx:
615   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
616   \tl_use:N \l_ltjpreset_add_features_tl
617 ] { \ltjpreset_font_mc_m: }
618 \setsansjfont [
619   \bool_if:NT \l_ltjpreset_deluxe_bool {
620     FontFace={eb}{n}{\ltjpreset_font_gt_eb:},
621   }
622   BoldFont = \ltjpreset_font_gt_bx:
623   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed },
624   \tl_use:N \l_ltjpreset_add_features_tl
625 ] { \ltjpreset_font_gt_m: }
626
627 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
628 }
629 \ExplSyntaxOff
630 \endinput