OSDN Git Service

luatexja-preset.sty: using 'fontname' instead of filename
[luatex-ja/luatexja.git] / src / addons / luatexja-preset.sty
1 % luatexja-preset.sty
2 \ProvidesPackage{luatexja-preset}[2013/10/28 Japanese font presets]
3
4 \RequirePackage{expl3}
5 \RequirePackage{luatexja-fontspec}
6 \ExplSyntaxOn
7
8 %%%% message
9
10 \bool_new:N \l_ltjpreset_bold_bool % bold
11 \bool_set_false:N \l_ltjpreset_bold_bool
12 \DeclareOption{bold}  {\bool_set_true:N \l_ltjpreset_bold_bool}
13 \DeclareOption{nobold}{\bool_set_false:N \l_ltjpreset_bold_bool}
14
15 \bool_new:N \l_ltjpreset_expert_bool % expert
16 \bool_set_false:N \l_ltjpreset_expert_bool
17 \DeclareOption{expert}  {\bool_set_true:N \l_ltjpreset_expert_bool}
18 \DeclareOption{noexpert}{\bool_set_false:N \l_ltjpreset_expert_bool}
19
20 \int_new:N \l_ltjpreset_deluxe_int % expert
21 \int_set:Nn \l_ltjpreset_deluxe_int { 0 }
22 \DeclareOption{deluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 2 }}   % 6 fonts
23 \DeclareOption{nodeluxe}{\int_set:Nn \l_ltjpreset_deluxe_int { 0 }} % 2 fonts
24
25 % scale
26 \msg_new:nnn { luatexja-preset }{ scale }{
27   Japanese~fonts~will~be~scaled~by~\fp_use:N \g_ltj_fontspec_scale_fp.
28 }
29 \msg_warning:nn { luatexja-preset }{ scale }
30
31 % JFM
32 \cs_set:Npn \ltjpreset_use_jfm: {ujis}  % 使用する JFM
33 %%% \DeclareOption{min}{\cs_set:Npn  \ltjpreset_use_jfm: {min}} % min
34 %%% ↑jfm-min.lua が横組み・縦組み専用仮名に追いついていないので使用禁止
35 \DeclareOption{jis}{\cs_set:Npn  \ltjpreset_use_jfm: {jis}}     % jis
36 \DeclareOption{ujis}{\cs_set:Npn  \ltjpreset_use_jfm: {ujis}}   % ujis
37
38 % 漢字字形
39 \tl_new:N \l_ltjpreset_kanji_shape_tl
40 \DeclareOption{90jis}{  \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
41 \DeclareOption{jis2004}{\tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
42
43 % font preset
44 \bool_new:N \l_ltjpreset_office_bool  % MS Office の HG 系フォントを使っているか
45 \bool_new:N \l_ltjpreset_noembed_bool % 非埋込か
46 \clist_new:N \l_ltjpreset_font_list
47
48 \cs_new:Npn \ltjpreset_set_uni:nn #1#2 {
49   \ltjpreset_set_multi:n { #1, #1, #2, #2, #2, #2, #1 }
50 }
51 \cs_new:Npn \ltjpreset_set_multi:n #1 {
52   \clist_set:Nn \l_ltjpreset_font_list { #1 }
53   \bool_set_false:N \l_ltjpreset_office_bool
54   \bool_set_false:N \l_ltjpreset_noembed_bool
55 }
56 \cs_new:Npn \ltjpreset_set_office:nn #1 #2{
57   \ltjpreset_set_multi:n {
58     #1, HGMinchoE ,           % mc/m, mc/bx
59     HGGothicM , HGGothicE ,   % gt/m, gt/bx (multiweight))
60     #2 , HGSoeiKakugothicUB , % gt/m (uni), gt/eb
61     HGMaruGothicMPRO          % mg/m
62   }
63   \bool_set_true:N \l_ltjpreset_office_bool
64 }
65
66
67 % 小塚 (Adobe)
68 %% Pro
69 \DeclareOption{kozuka-pro}{
70   \ltjpreset_set_multi:n {
71     KozMinPro-Regular , % mc/m
72     KozMinPro-Bold ,    % mc/bx
73     KozGoPro-Regular , % gt/m  (multi)
74     KozGoPro-Bold ,    % gt/bx
75     KozGoPro-Medium  , % gt/m  (uni)
76     KozGoPro-Heavy ,   % gt/eb
77     KozGoPro-Heavy     % mg/m
78   }
79 }
80 %% Pr6
81 \DeclareOption{kozuka-pr6}{
82   \ltjpreset_set_multi:n {
83     KozMinProVI-Regular , % mc/m
84     KozMinProVI-Bold ,    % mc/bx
85     KozGoProVI-Regular , % gt/m  (multi)
86     KozGoProVI-Bold ,    % gt/bx
87     KozGoProVI-Medium  , % gt/m  (uni)
88     KozGoProVI-Heavy ,   % gt/eb
89     KozGoProVI-Heavy     % mg/m
90   }
91 }
92 %% Pr6N
93 \DeclareOption{kozuka-pr6n}{
94   \ltjpreset_set_multi:n {
95     KozMinPr6N-Regular , % mc/m
96     KozMinPr6N-Bold ,    % mc/bx
97     KozGoPr6N-Regular , % gt/m  (multi)
98     KozGoPr6N-Bold ,    % gt/bx
99     KozGoPr6N-Medium  , % gt/m  (uni)
100     KozGoPr6N-Heavy ,   % gt/eb
101     KozGoPr6N-Heavy     % mg/m
102   }
103 }
104
105 % ヒラギノ (OSX)
106 \DeclareOption{hiragino-pro}{
107   \ltjpreset_set_multi:n {
108     HiraMinPro-W3.otf      , HiraMinPro-W6.otf,   % mc/m, mc/bx
109     HiraKakuPro-W3.otf     , HiraKakuPro-W6.otf,  % gt/m, gt/bx (multiweight))
110     HiraKakuPro-W6.otf     , HiraKakuStd-W8.otf,  % gt/m (uni), gt/eb
111     HiraMaruPro-W4.otf                            % mg/m
112   }
113 }
114 \DeclareOption{hiragino-pron}{
115   \ltjpreset_set_multi:n {
116     HiraMinProN-W3.otf      , HiraMinProN-W6.otf,   % mc/m, mc/bx
117     HiraKakuProN-W3.otf     , HiraKakuProN-W6.otf,  % gt/m, gt/bx (multiweight))
118     HiraKakuProN-W6.otf     , HiraKakuStdN-W8.otf,  % gt/m (uni), gt/eb
119     HiraMaruProN-W4.otf                             % mg/m
120   }
121 }
122
123 % モリサワ
124 \DeclareOption{morisawa-pro}{
125   \ltjpreset_set_multi:n {
126     A-OTF-RyuminPro-Light.otf , A-OTF-FutoMinA101Pro-Bold.otf ,    % mc/m, mc/bx
127     A-OTF-GothicBBBPro-Medium.otf , A-OTF-FutoGoB101Pro-Bold.otf , % gt/m, gt/bx (multiweight))
128     A-OTF-GothicBBBPro-Medium.otf , A-OTF-MidashiGoPro-MB31.otf ,  % gt/m (uni), gt/eb
129     A-OTF-Jun101Pro-Light.otf % mg/m
130   }
131 }
132 \DeclareOption{morisawa-pr6n}{
133   \ltjpreset_set_multi:n {
134     A-OTF-RyuminPr6N-Light.otf , A-OTF-FutoMinA101Pr6N-Bold.otf ,    % mc/m, mc/bx
135     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-FutoGoB101Pr6N-Bold.otf , % gt/m, gt/bx (multiweight))
136     A-OTF-GothicBBBPr6N-Medium.otf , A-OTF-MidashiGoPr6N-MB31.otf ,  % gt/m (uni), gt/eb
137     A-OTF-Jun101Pr6N-Light.otf                                       % mg/m
138   }
139 }
140
141 % 游明朝/游ゴシック (Win8.1)
142 \DeclareOption{yu}{
143   \ltjpreset_set_multi:n {
144     YuMincho-Regular , YuMincho-Demibold , % mc/m, mc/bx
145     YuGothic-Regular , YuGothic-Bold ,     % gt/m, gt/bx (multiweight))
146     YuGothic-Bold    , YuGothic-Bold ,     % gt/m (uni), gt/eb
147     YuGothic-Bold                          % mg/m
148   }
149 }
150
151
152 % ipa, ipaex, ms
153 \DeclareOption{ipa}{
154   \ltjpreset_set_uni:nn { IPAMincho } { IPAGothic }
155 }
156 \DeclareOption{ipaex}{
157   \ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic }
158 }
159 \DeclareOption{ms}{
160   \ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic }
161 }
162
163 % {ipa,ipaex,ms}-dx % Office 付属フォントを利用
164 \DeclareOption{ipaex-hg}{
165   \ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }
166 }
167 \DeclareOption{ipa-hg}{
168   \ltjpreset_set_office:nn { IPAMincho } { IPAGothic }
169 }
170 \DeclareOption{ms-hg}{
171   \ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }
172 }
173
174
175 % 非埋込
176 \DeclareOption{noembed}{
177   \ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium }
178   \bool_set_true:N \l_ltjpreset_noembed_bool
179 }
180
181 \ExecuteOptions{noembed}
182 \ProcessOptions*
183
184 %% KozMinPr6N の場合はjp04 feature がないので,nlck にする
185 \clist_if_in:NnT \l_ltjpreset_font_list { KozMinPr6N-Regular } {
186   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
187   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl {
188     \tl_set:Nn \l_ltjpreset_kanji_shape_tl { , CJKShape=NLC }
189   }
190 }
191
192 %%%%%%%% main routine
193
194 %%%%  リストからの展開
195 % mc/m
196 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
197 \cs_set:Nx \ltjpreset_font_mc_m: { \tl_use:N \l_tmpa_tl }
198
199 % mc/bx
200 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
201 \cs_set:Nx \ltjpreset_font_mc_bx: { \tl_use:N \l_tmpa_tl }
202
203 % gt/m
204 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
205 \cs_set:Nx \ltjpreset_font_gt_m: { \tl_use:N \l_tmpa_tl }
206
207 % gt/bx
208 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
209 \cs_set:Nx \ltjpreset_font_gt_bx: { \tl_use:N \l_tmpa_tl }
210
211 % gt/m-uni
212 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
213 \cs_set:Nx \ltjpreset_font_gt_n_uni: { \tl_use:N \l_tmpa_tl }
214
215 % gt/eb
216 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
217 \cs_set:Nx \ltjpreset_font_gt_eb: { \tl_use:N \l_tmpa_tl }
218
219 % mg/m
220 \clist_pop:NN \l_ltjpreset_font_list \l_tmpa_tl
221 \cs_set:Nx \ltjpreset_font_mg: { \tl_use:N \l_tmpa_tl }
222
223 %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換
224 \bool_if:NT \l_ltjpreset_office_bool {
225   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
226   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl { 
227     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme04.ttc }
228     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge04.ttc }
229     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu04.ttc }
230     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp04.ttf }
231     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
232     % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う
233   }
234   \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
235   \tl_if_eq:NNT \l_ltjpreset_kanji_shape_tl \l_tmpa_tl { 
236     \cs_set:Nx \ltjpreset_font_mc_bx: { hgrme.ttc }
237     \cs_set:Nx \ltjpreset_font_gt_bx: { hgrge.ttc }
238     \cs_set:Nx \ltjpreset_font_gt_eb: { hgrsgu.ttc }
239     \cs_set:Nx \ltjpreset_font_mg:    { hgrsmp.ttf }
240   }
241 }
242
243 % expert 用設定
244 \tl_new:N \l_ltjpreset_add_features_tl
245
246 \tl_set:Nx \l_ltjpreset_add_features_tl {
247   \tl_use:N \l_ltjpreset_kanji_shape_tl, 
248   JFM   = \ltjpreset_use_jfm:
249 }
250
251 \bool_if:NT \l_ltjpreset_expert_bool {
252   \cs_set:Npn \rubyfamily { \addfontfeatures { Style = Ruby} }
253   \tl_put_left:Nn \l_ltjpreset_add_features_tl { Style = HorizontalKana, }
254 }
255
256 % (丸)ゴシック体の設定: bold option もここで
257 \int_compare:nTF { \l_ltjpreset_deluxe_int ==  2 } {
258 %% mg
259  \newjfontfamily \mgfamily [
260       BoldFont = \ltjpreset_font_mg:,
261       \tl_use:N \l_ltjpreset_add_features_tl
262       \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
263       \tl_use:N \l_ltjpreset_add_features_tl 
264     ] { \ltjpreset_font_mg: }
265     \DeclareTextFontCommand{\textmg}{\mgfamily}
266 %% gt/eb
267 %% 注意: ファミリは 'gteb'.シリーズは \mdseries のまま.
268 %%       \bfseries を追加したほうが良い?
269   \newjfontfamily \gtebfamily [
270       BoldFont = \ltjpreset_font_gt_eb:, 
271       \tl_use:N \l_ltjpreset_add_features_tl
272       \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
273       \tl_use:N \l_ltjpreset_add_features_tl 
274     ] { \ltjpreset_font_gt_eb: }
275   \DeclareTextFontCommand{\textgteb}{\gtebfamily}
276   \bool_if:NT \l_ltjpreset_bold_bool {
277     \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_bx:
278   }
279 }{
280   \bool_if:NTF \l_ltjpreset_bold_bool {
281     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_bx:
282   }{
283     \cs_set_eq:NN \ltjpreset_font_gt_m: \ltjpreset_font_gt_n_uni:
284   }
285   \cs_set_eq:NN \ltjpreset_font_gt_bx: \ltjpreset_font_gt_m:
286   \cs_set_eq:NN \ltjpreset_font_mc_bx: \ltjpreset_font_gt_m:
287 }
288
289
290 % 実際の fontspec の呼びだし
291
292 \defaultjfontfeatures{ Kerning=Off }
293
294 \setmainjfont [ 
295   BoldFont = \ltjpreset_font_mc_bx:
296   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
297   \tl_use:N \l_ltjpreset_add_features_tl 
298 ] { \ltjpreset_font_mc_m: }
299 \setsansjfont [ 
300   BoldFont = \ltjpreset_font_gt_bx: 
301   \bool_if:NT \l_ltjpreset_noembed_bool { , NoEmbed }, 
302   \tl_use:N \l_ltjpreset_add_features_tl 
303 ] { \ltjpreset_font_gt_m: }
304
305 \ExplSyntaxOff
306 \endinput