OSDN Git Service

Fixed lltjfont.sty and luatexja-core.sty for uninvited spaces
[luatex-ja/luatexja.git] / src / lltjfont.sty
1 %%
2 %% luatexja-latex-fonts.sty: derived from plfonts.dtx in pLaTeX.
3 %% 
4 \makeatletter
5 \let\k@encoding\@empty
6 \let\ck@encoding\@empty
7 % LuaTeX-ja uses JY3 and JT3 encodings.
8 \def\cy@encoding{JY3}\def\ct@encoding{JT3}
9
10
11 \let\k@family\@empty
12 \let\k@series\@empty
13 \let\k@shape\@empty
14 \def\curr@kfontshape{\k@encoding/\k@family/\k@series/\k@shape}
15 \def\rel@fontshape{\f@encoding/\f@family/\f@series/\f@shape}
16 \newdimen\Cht
17 \newdimen\cht
18 \newdimen\Cdp
19 \newdimen\cdp
20 \newdimen\Cwd
21 \newdimen\cwd
22 \newdimen\Cvs
23 \newdimen\cvs
24 \newdimen\Chs
25 \newdimen\chs
26 \newdimen\cHT
27 %\let\afont\font
28 \def\inlist@#1#2{%
29   \def\in@@##1<#1>##2##3\in@@{%
30     \ifx\in@##2\in@false\else\in@true\fi}%
31   \in@@#2<#1>\in@\in@@}
32 \def\fam@elt{\noexpand\fam@elt}
33 \def\enc@elt{\noexpand\enc@elt}
34 \def\fenc@list{\enc@elt<OML>\enc@elt<T1>\enc@elt<OT1>\enc@elt<OMS>%
35                \enc@elt<OMX>\enc@elt<TS1>\enc@elt<U>}
36 \let\kenc@list\@empty
37 \let\kyenc@list\@empty
38 \let\ktenc@list\@empty
39 \def\kfam@list{\fam@elt<mc>\fam@elt<gt>}
40 \def\ffam@list{\fam@elt<cmr>\fam@elt<cmss>\fam@elt<cmtt>%
41                \fam@elt<cmm>\fam@elt<cmsy>\fam@elt<cmex>}
42 \let\notkfam@list\ffam@list
43 \let\notffam@list\kfam@list
44 \newbox\tstrutbox
45 \newbox\zstrutbox
46 \def\strut{\relax
47 %  \ifydir
48     \ifmmode\copy\strutbox\else\unhcopy\strutbox\fi
49 %  \else
50 %    \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi
51 %  \fi}
52 }
53 \def\tstrut{\relax\hbox{\tate
54    \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi}}
55 \def\zstrut{\relax\hbox{\tate
56    \ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}}
57 \def\DeclareFontEncoding{%
58   \begingroup
59   \nfss@catcodes
60   \expandafter\endgroup
61   \DeclareFontEncoding@}
62 \def\DeclareFontEncoding@#1#2#3{%
63   \expandafter
64   \ifx\csname T@#1\endcsname\relax
65      \def\cdp@elt{\noexpand\cdp@elt}%
66      \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
67                     {\default@family}{\default@series}%
68                     {\default@shape}}%
69      \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
70      \def\enc@elt{\noexpand\enc@elt}%
71      \xdef\fenc@list{\fenc@list\enc@elt<#1>}%
72   \else
73      \@font@info{Redeclaring font encoding #1}%
74   \fi
75   \global\@namedef{T@#1}{#2}%
76   \global\@namedef{M@#1}{\default@M#3}%
77   \xdef\LastDeclaredEncoding{#1}%
78   }
79 \def\DeclareKanjiEncoding#1{%
80   \@latex@warning{%
81      The \string\DeclareKanjiEncoding\space is obsoleted command.  Please use
82      \MessageBreak
83      the \string\DeclareTateKanjiEncoding\space for `Tate-kumi' encoding, and
84      \MessageBreak
85      the \string\DeclareYokoKanjiEncoding\space for `Yoko-kumi' encoding.
86      \MessageBreak
87      I treat the `#1' encoding as `Yoko-kumi'.}
88   \DeclareYokoKanjiEncoding{#1}%
89 }
90 \def\DeclareYokoKanjiEncoding{%
91   \begingroup
92   \nfss@catcodes
93   \expandafter\endgroup
94   \DeclareYokoKanjiEncoding@}
95 \def\DeclareYokoKanjiEncoding@#1#2#3{%
96   \expandafter
97   \ifx\csname T@#1\endcsname\relax
98     \def\cdp@elt{\noexpand\cdp@elt}%
99     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
100                     {\default@k@family}{\default@k@series}%
101                     {\default@k@shape}}%
102     \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
103     \def\enc@elt{\noexpand\enc@elt}%
104     \xdef\kyenc@list{\kyenc@list\enc@elt<#1>}%
105     \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
106   \else
107     \@font@info{Redeclaring KANJI (yoko) font encoding #1}%
108   \fi
109   \global\@namedef{T@#1}{#2}%
110   \global\@namedef{M@#1}{\default@KM#3}%
111   }
112 \def\DeclareTateKanjiEncoding{%
113   \begingroup
114   \nfss@catcodes
115   \expandafter\endgroup
116   \DeclareTateKanjiEncoding@}
117 \def\DeclareTateKanjiEncoding@#1#2#3{%
118   \expandafter
119   \ifx\csname T@#1\endcsname\relax
120     \def\cdp@elt{\noexpand\cdp@elt}%
121     \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
122                     {\default@k@family}{\default@k@series}%
123                     {\default@k@shape}}%
124     \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
125     \def\enc@elt{\noexpand\enc@elt}%
126     \xdef\ktenc@list{\ktenc@list\enc@elt<#1>}%
127     \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
128   \else
129     \@font@info{Redeclaring KANJI (tate) font encoding #1}%
130   \fi
131   \global\@namedef{T@#1}{#2}%
132   \global\@namedef{M@#1}{\default@KM#3}%
133   }
134 \@onlypreamble\DeclareKanjiEncoding
135 \@onlypreamble\DeclareYokoKanjiEncoding
136 \@onlypreamble\DeclareYokoKanjiEncoding@
137 \@onlypreamble\DeclareTateKanjiEncoding
138 \@onlypreamble\DeclareTateKanjiEncoding@
139 \def\DeclareKanjiEncodingDefaults#1#2{%
140   \ifx\relax#1\else
141     \ifx\default@KT\@empty\else
142       \@font@info{Overwriting KANJI encoding scheme text defaults}%
143     \fi
144     \gdef\default@KT{#1}%
145   \fi
146   \ifx\relax#2\else
147     \ifx\default@KM\@empty\else
148       \@font@info{Overwriting KANJI encoding scheme math defaults}%
149     \fi
150     \gdef\default@KM{#2}%
151   \fi}
152 \let\default@KT\@empty
153 \let\default@KM\@empty
154 \@onlypreamble\DeclareKanjiEncodingDefaults
155 \def\DeclareFontFamily#1#2#3{%
156  \@ifundefined{T@#1}%
157     {\@latex@error{Encoding scheme `#1' unknown}\@eha}%
158     {\edef\tmp@item{{#2}}%
159      \expandafter\expandafter\expandafter
160      \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
161      \ifin@ \else
162         \def\fam@elt{\noexpand\fam@elt}%
163         \xdef\ffam@list{\ffam@list\fam@elt<#2>}%
164      \fi
165      \def\reserved@a{#3}%
166      \global
167      \expandafter\let\csname #1+#2\expandafter\endcsname
168             \ifx \reserved@a\@empty
169               \@empty
170             \else \reserved@a
171             \fi
172     }%
173 }
174 \def\DeclareKanjiFamily#1#2#3{%
175  \@ifundefined{T@#1}%
176     {\@latex@error{KANJI Encoding scheme `#1' unknown}\@eha}%
177     {\edef\tmp@item{{#2}}%
178      \expandafter\expandafter\expandafter
179      \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
180      \ifin@ \else
181         \def\fam@elt{\noexpand\fam@elt}%
182         \xdef\kfam@list{\kfam@list\fam@elt<#2>}%
183      \fi
184      \def\reserved@a{#3}%
185      \global
186      \expandafter\let\csname #1+#2\expandafter\endcsname
187             \ifx \reserved@a\@empty
188               \@empty
189             \else \reserved@a
190             \fi
191      }%
192 }
193 \def\DeclareKanjiSubstitution#1#2#3#4{%
194   \expandafter\ifx\csname T@#1\endcsname\relax
195     \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
196   \else
197     \begingroup
198        \def\reserved@a{#1}%
199        \toks@{}%
200        \def\cdp@elt##1##2##3##4{%
201          \def\reserved@b{##1}%
202          \ifx\reserved@a\reserved@b
203            \addto@hook\toks@{\cdp@elt{#1}{#2}{#3}{#4}}%
204          \else
205            \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}%
206          \fi}%
207        \cdp@list
208        \xdef\cdp@list{\the\toks@}%
209     \endgroup
210     \global\@namedef{D@#1}{\def\default@family{#2}%
211                            \def\default@series{#3}%
212                            \def\default@shape{#4}}%
213   \fi}
214 \def\DeclareErrorKanjiFont#1#2#3#4#5{%
215    \xdef\error@kfontshape{%
216       \noexpand\expandafter\noexpand\split@name\noexpand\string
217       \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
218       \noexpand\@nil}%
219    \gdef\default@k@family{#2}%
220    \gdef\default@k@series{#3}%
221    \gdef\default@k@shape{#4}%
222    \global\let\k@family\default@k@family
223    \global\let\k@series\default@k@series
224    \global\let\k@shape\default@k@shape
225    \gdef\f@size{#5}%
226    \gdef\f@baselineskip{#5pt}}
227 \@onlypreamble\DeclareKanjiSubstitution
228 \@onlypreamble\DeclareErrorKanjiFont
229 \def\DeclareFixedFont#1#2#3#4#5#6{%
230    \begingroup
231       \math@fontsfalse
232       \every@math@size{}%
233       \fontsize{#6}\z@
234       \edef\tmp@item{{#2}}%
235       \expandafter\expandafter\expandafter
236       \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
237       \ifin@
238         \usekanji{#2}{#3}{#4}{#5}%
239         \global\let#1\getjfont
240       \else
241         %\expandafter\expandafter\expandafter
242         %\inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
243         %\ifin@
244         %  \usekanji{#2}{#3}{#4}{#5}%
245         %  \let\font\tfont
246         %\else
247           \useroman{#2}{#3}{#4}{#5}%
248           \global\expandafter\let\expandafter#1\the\font
249         %\fi
250       \fi
251    \endgroup
252   }
253 \def\reDeclareMathAlphabet#1#2#3{%
254   \edef#1{\noexpand\protect\expandafter\noexpand\csname%
255     \expandafter\@gobble\string#1\space\space\endcsname}%
256   \edef\@tempa{\expandafter\@gobble\string#2}%
257   \edef\@tempb{\expandafter\@gobble\string#3}%
258   \edef\@tempc{\string @\expandafter\@gobbletwo\string#2}%
259   \ifx\@tempc\@tempa%
260     \edef\@tempa{\expandafter\@gobbletwo\string#2}%
261     \edef\@tempb{\expandafter\@gobbletwo\string#3}%
262   \fi
263   \expandafter\edef\csname\expandafter\@gobble\string#1\space\space\endcsname%
264     {\noexpand\DualLang@mathalph@bet%
265       {\expandafter\noexpand\csname\@tempa\space\endcsname}%
266       {\expandafter\noexpand\csname\@tempb\space\endcsname}%
267   }%
268 }
269 \@onlypreamble\reDeclareMathAlphabet
270 \def\DualLang@mathalph@bet#1#2{%
271   \relax\ifmmode
272     \ifx\math@bgroup\bgroup%     2e normal style     (\mathrm{...})
273       \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
274     \else
275       \ifx\math@bgroup\relax%    2e two letter style (\rm->\mathrm)
276         \let\DualLang@Mfontsw\DLMfontsw@oldstyle
277       \else
278         \bgroup\let\DualLang@Mfontsw\DLMfontsw@standard
279       \fi
280     \fi
281   \else
282     \let\DualLang@Mfontsw\@firstoftwo
283   \fi
284   \DualLang@Mfontsw{#1}{#2}%
285 }
286 \def\DLMfontsw@standard#1#2#3{#1{#2{#3}}\egroup}
287 \def\DLMfontsw@oldstyle#1#2{#1\relax\@fontswitch\relax{#2}}
288 \def\DLMfontsw@oldlfont#1#2{#1\relax#2\relax}
289 \def\all@shape{all}%
290 \def\DeclareRelationFont#1#2#3#4#5#6#7#8{%
291   \def\rel@shape{#4}%
292   \ifx\rel@shape\@empty
293      \global
294      \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
295        \romanencoding{#5}\romanfamily{#6}%
296        \romanseries{#7}}%
297   \else
298      \global
299      \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
300        \romanencoding{#5}\romanfamily{#6}%
301        \romanseries{#7}\romanshape{#8}}%
302   \fi
303 }
304 \def\SetRelationFont#1#2#3#4#5#6#7#8{%
305   \def\rel@shape{#4}%
306   \ifx\rel@shape\@empty
307      \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
308        \romanencoding{#5}\romanfamily{#6}%
309        \romanseries{#7}}%
310   \else
311      \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
312        \romanencoding{#5}\romanfamily{#6}%
313        \romanseries{#7}\romanshape{#8}}%
314   \fi
315 }
316 \newif\if@knjcmd
317 \def\userelfont{\@knjcmdtrue}
318 \DeclareRobustCommand\selectfont{%
319   \let\tmp@error@fontshape\error@fontshape
320   \let\error@fontshape\error@kfontshape
321   \edef\tmp@item{{\k@encoding}}%
322   \expandafter\expandafter\expandafter
323   \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
324   \ifin@
325     \let\cy@encoding\k@encoding
326     \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
327   \else
328     \expandafter\expandafter\expandafter
329     \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
330     \ifin@
331       \let\ct@encoding\k@encoding
332       \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
333     \else
334       \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
335     \fi
336   \fi
337   %\let\font\tfont
338   %\let\k@encoding\ct@encoding
339   %\xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
340   %\pickup@font
341   %\font@name
342   \let\k@encoding\cy@encoding
343   \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
344   \pickup@jfont
345   \font@name
346   \expandafter\def\expandafter\k@encoding\tmp@item
347   \kenc@update
348   \let\error@fontshape\tmp@error@fontshape
349   \if@knjcmd \@knjcmdfalse
350     \expandafter\ifx
351     \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
352       \expandafter\ifx
353          \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
354       \else
355          \csname rel@\k@encoding/\k@family/\k@series/all\endcsname
356       \fi
357     \else
358        \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
359     \fi
360   \fi
361   %\let\font\afont
362   \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
363   \pickup@font
364   \font@name
365   \enc@update
366   \ifx\f@linespread\baselinestretch \else
367     \set@fontsize\baselinestretch\f@size\f@baselineskip
368   \fi
369   \size@update}
370 \def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
371 \KanjiEncodingPair{JY3}{JT3}
372 \def\set@fontsize#1#2#3{%
373     \@defaultunits\@tempdimb#2pt\relax\@nnil
374     \edef\f@size{\strip@pt\@tempdimb}%
375     \@defaultunits\@tempskipa#3pt\relax\@nnil
376     \edef\f@baselineskip{\the\@tempskipa}%
377     \edef\f@linespread{#1}%
378     \let\baselinestretch\f@linespread
379     \def\size@update{%
380       \baselineskip\f@baselineskip\relax
381       \baselineskip\f@linespread\baselineskip
382       \normalbaselineskip\baselineskip
383       \adjustbaseline
384       \setbox\strutbox\hbox{%\yoko
385           \vrule\@width\z@
386                 \@height.7\baselineskip \@depth.3\baselineskip}%
387       \setbox\tstrutbox\hbox{%\tate
388           \vrule\@width\z@
389                 \@height.5\baselineskip \@depth.5\baselineskip}%
390       \setbox\zstrutbox\hbox{%\tate
391           \vrule\@width\z@
392                 \@height.7\baselineskip \@depth.3\baselineskip}%
393         \let\size@update\relax}}
394 \newbox\adjust@box
395 \newdimen\adjust@dimen
396 \def\adjustbaseline{%
397     \setbox\adjust@box\hbox{\ltjsetparameter{yjabaselineshift=\z@}あ}%
398     \cht\ht\adjust@box
399     \cdp\dp\adjust@box
400     \cwd\wd\adjust@box
401     \cvs\normalbaselineskip
402     \chs\cwd
403     \cHT\cht \advance\cHT\cdp
404   % \iftdir
405   %   \setbox\adjust@box\hbox{\tbaselineshift\z@ M}%
406   %   \adjust@dimen\ht\adjust@box
407   %   \advance\adjust@dimen\dp\adjust@box
408   %   \advance\adjust@dimen-\cHT
409   %   \divide\adjust@dimen\tw@
410   %   \advance\adjust@dimen\cdp
411   %   \advance\adjust@dimen-\dp\adjust@box
412   %   \tbaselineshift\adjust@dimen
413   % \fi
414   }
415 \DeclareRobustCommand\romanencoding[1]{%
416     \expandafter\ifx\csname T@#1\endcsname\relax
417       \@latex@error{Encoding scheme `#1' unknown}\@eha
418     \else
419       \edef\f@encoding{#1}%
420       \ifx\cf@encoding\f@encoding
421         \let\enc@update\relax
422       \else
423         \let\enc@update\@@enc@update
424       \fi
425     \fi
426 }
427 \DeclareRobustCommand\kanjiencoding[1]{%
428     \expandafter\ifx\csname T@#1\endcsname\relax
429       \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
430     \else
431       \edef\k@encoding{#1}%
432       \ifx\ck@encoding\k@encoding
433          \let\kenc@update\relax
434       \else
435          \let\kenc@update\@@kenc@update
436       \fi
437     \fi
438 }
439 \DeclareRobustCommand\fontencoding[1]{%
440   \edef\tmp@item{{#1}}%
441   \expandafter\expandafter\expandafter
442   \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
443   \ifin@ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
444 \def\@@kenc@update{%
445   \default@KT
446   \csname T@\k@encoding\endcsname
447   \csname D@\k@encoding\endcsname
448   \let\kenc@update\relax
449   \let\ck@encoding\k@encoding
450   \edef\tmp@item{{\k@encoding}}%
451   \expandafter\expandafter\expandafter
452   \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
453   \ifin@ \let\cy@encoding\k@encoding
454   \else
455     \expandafter\expandafter\expandafter
456     \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
457     \ifin@ \let\ct@encoding\k@encoding
458     \else
459       \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
460     \fi
461   \fi
462 }
463 \let\kenc@update\relax
464 \def\@changed@kcmd#1#2{%
465    \ifx\protect\@typeset@protect
466       \@inmathwarn#1%
467       \expandafter\ifx\csname\ck@encoding\string#1\endcsname\relax
468          \expandafter\ifx\csname ?\string#1\endcsname\relax
469             \expandafter\def\csname ?\string#1\endcsname{%
470                \TextSymbolUnavailable#1%
471             }%
472          \fi
473          \global\expandafter\let
474                \csname\cf@encoding \string#1\expandafter\endcsname
475                \csname ?\string#1\endcsname
476       \fi
477       \csname\ck@encoding\string#1%
478          \expandafter\endcsname
479    \else
480       \noexpand#1%
481    \fi}
482 \newif\if@notkfam
483 \newif\if@notffam
484 \newif\if@tempswz
485 \DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
486 \DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
487 \DeclareRobustCommand\fontfamily[1]{%
488   \edef\tmp@item{{#1}}%
489   \@notkfamfalse
490   \@notffamfalse
491   \expandafter\expandafter\expandafter
492   \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
493   \ifin@ \edef\k@family{#1}%
494   \else
495     \expandafter\expandafter\expandafter
496     \inlist@\expandafter\tmp@item\expandafter{\notkfam@list}%
497     \ifin@ \@notkfamtrue
498     \else
499       \@tempswzfalse
500       \def\fam@elt{\noexpand\fam@elt}%
501       \message{(I search kanjifont definition file:}%
502       \def\enc@elt<##1>{\message{.}%
503         \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
504         \reserved@a{\@tempswztrue}{}\relax}%
505       \kenc@list
506       \message{)}%
507       \if@tempswz
508         \edef\k@family{#1}%
509       \else
510         \@notkfamtrue
511         \xdef\notkfam@list{\notkfam@list\fam@elt<#1>}%
512       \fi
513   \fi\fi
514   \expandafter\expandafter\expandafter
515   \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
516   \ifin@ \edef\f@family{#1}\else
517     \expandafter\expandafter\expandafter
518     \inlist@\expandafter\tmp@item\expandafter{\notffam@list}%
519     \ifin@ \@notffamtrue \else
520       \@tempswzfalse
521       \def\fam@elt{\noexpand\fam@elt}%
522       \message{(I search font definition file:}%
523       \def\enc@elt<##1>{\message{.}%
524         \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
525         \reserved@a{\@tempswztrue}{}\relax}%
526       \fenc@list
527       \message{)}%
528       \if@tempswz
529         \edef\f@family{#1}%
530       \else
531         \@notffamtrue
532         \xdef\notffam@list{\notffam@list\fam@elt<#1>}%
533       \fi
534   \fi\fi
535   \if@notkfam\if@notffam
536       \edef\k@family{#1}\edef\f@family{#1}%
537   \fi\fi}
538 \DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}}
539 \DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}}
540 \DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
541 \DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}}
542 \DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}}
543 \DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}}
544 \def\usekanji#1#2#3#4{%
545     \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}%
546     \selectfont\ignorespaces}
547 \def\useroman#1#2#3#4{%
548     \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
549     \selectfont\ignorespaces}
550 \def\usefont#1#2#3#4{%
551   \edef\tmp@item{{#1}}%
552   \expandafter\expandafter\expandafter
553   \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
554   \ifin@ \usekanji{#1}{#2}{#3}{#4}%
555   \else\useroman{#1}{#2}{#3}{#4}%
556   \fi}
557 \DeclareRobustCommand\normalfont{%
558     \kanjiencoding{\kanjiencodingdefault}%
559     \kanjifamily{\kanjifamilydefault}%
560     \kanjiseries{\kanjiseriesdefault}%
561     \kanjishape{\kanjishapedefault}%
562     \romanencoding{\encodingdefault}%
563     \romanfamily{\familydefault}%
564     \romanseries{\seriesdefault}%
565     \romanshape{\shapedefault}%
566     \selectfont\ignorespaces}
567 \adjustbaseline
568 \let\reset@font\normalfont
569 \DeclareRobustCommand\mcfamily
570         {\not@math@alphabet\mcfamily\mathmc
571          \kanjifamily\mcdefault\selectfont}
572 \DeclareRobustCommand\gtfamily
573         {\not@math@alphabet\gtfamily\mathgt
574          \kanjifamily\gtdefault\selectfont}
575 \let\romanprocess@table\process@table
576 \def\kanjiprocess@table{%
577   \kanjiencoding{\kanjiencodingdefault}%
578   \kanjifamily{\kanjifamilydefault}%
579   \kanjiseries{\kanjiseriesdefault}%
580   \kanjishape{\kanjishapedefault}%
581 }
582 \def\process@table{%
583   \romanprocess@table
584   \kanjiprocess@table
585 }
586 \@onlypreamble\romanprocess@table
587 \@onlypreamble\kanjiprocess@table
588 \DeclareTextCommandDefault{\textunderscore}{%
589   \leavevmode\kern.06em
590   %\iftdir\raise-\tbaselineshift\fi
591   \vbox{\hrule\@width.3em}}
592
593 %%%%%% LuaTeX-ja specific
594
595 % #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
596 \def\ltj@@IsFontJapanese#1{%
597   \expandafter\ltj@@IsFontJapaneseX#1//:%
598   \expandafter\expandafter\expandafter
599   \inlist@\expandafter\tmp@item\expandafter{\kenc@list}}
600 \def\ltj@@IsFontJapaneseX#1/#2/:{\edef\tmp@item{{\directlua{tex.print('#1')}}}}
601
602
603 \let\extract@afont\extract@font
604 \def\pickup@jfont{%
605     \expandafter \ifx \font@name \relax
606        \let\extract@font\extract@jfont
607        \define@newfont
608        \let\extract@font\extract@afont
609     \fi
610     \let\getjfont\font@name}
611
612 \def\extract@jfont{%
613     \get@external@font
614     \expandafter\globaljfont\font@name\external@font\relax
615     \font@name\global\zw=\zw\global\zh=\zh
616     \csname \f@encoding+\f@family\endcsname
617     \csname\curr@fontshape\endcsname}
618
619 \let\ltj@@al@do@subst@correction=\do@subst@correction
620 \def\ltj@@ja@do@subst@correction{%
621     \xdef\subst@correction{%
622       \font@name
623       \global\expandafter\let\csname \curr@fontshape/\f@size\endcsname\font@name%
624       \relax}%
625     \aftergroup\subst@correction
626 }
627 \def\do@subst@correction{%
628    \ltj@@IsFontJapanese{\curr@fontshape}\ifin@
629      \ltj@@ja@do@subst@correction
630    \else
631      \ltj@@al@do@subst@correction
632    \fi
633 }
634
635
636 %%%%%% Japanese font for math mode
637
638 % \M@<enc> から その <enc> が和文用か調べる
639 {\catcode`M=12%
640 \gdef\ltj@@mathJapaneseFonts#1M#2#3\relax{\ltj@@IsFontJapanese{#3}}}
641
642 \let\ltj@@al@getanddefine@fonts=\getanddefine@fonts
643 \def\ltj@@ja@getanddefine@fonts#1#2{%
644   \xdef\font@name{\csname \string#2/\tf@size\endcsname}%
645   \pickup@jfont\let\textfont@name\font@name
646   \xdef\font@name{\csname \string#2/\sf@size\endcsname}%
647   \pickup@jfont\let\scriptfont@name\font@name
648   \xdef\font@name{\csname \string#2/\ssf@size\endcsname}%
649   \pickup@jfont
650   \edef\math@fonts{\math@fonts\ltjsetparameter{%
651     jatextfont={#1,\textfont@name},%
652     jascriptfont={#1,\scriptfont@name},%
653     jascriptscriptfont={#1,\font@name}}}%
654 }
655
656 \def\getanddefine@fonts#1#2{%
657   \ltj@tempcnta=#1 \ltj@@IsFontJapanese{\string#2}%
658   \ifin@\ltj@@ja@getanddefine@fonts{#1}{#2}%
659   \else \ltj@@al@getanddefine@fonts{#1}{#2}\fi
660 }
661 \def\use@mathgroup#1#2{\relax\ifmmode
662   \math@bgroup
663     \expandafter\ifx\csname M@\f@encoding\endcsname#1\else
664     #1\fi\ltj@tempcnta=#2 \expandafter\ltj@@mathJapaneseFonts\string#1\relax%
665     \ifin@\jfam#2\relax\else\mathgroup#2\relax\fi
666   \expandafter\math@egroup\fi}%
667
668 \endinput