diff options
Diffstat (limited to 'Master/texmf-dist/source/uplatex/base/uplfonts.dtx')
-rw-r--r-- | Master/texmf-dist/source/uplatex/base/uplfonts.dtx | 166 |
1 files changed, 135 insertions, 31 deletions
diff --git a/Master/texmf-dist/source/uplatex/base/uplfonts.dtx b/Master/texmf-dist/source/uplatex/base/uplfonts.dtx index 010a5c43b0b..05845476674 100644 --- a/Master/texmf-dist/source/uplatex/base/uplfonts.dtx +++ b/Master/texmf-dist/source/uplatex/base/uplfonts.dtx @@ -14,7 +14,7 @@ % % \fi % -% \CheckSum{1811} +% \CheckSum{2030} %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z @@ -75,13 +75,16 @@ % \changes{v1.6a-u00}{2016/04/06}{p\LaTeX{}の変更に追随。} % \changes{v1.6b-u00}{2016/04/30}{uptrace.styの冒頭でtracefnt.styを % \cs{RequirePackageWithOptions}するようにした} +% \changes{v1.6c}{2016/06/06}{v1.6aでの修正で\'e など全てのアクセント付き文字で +% 周囲に\cs{xkanjiskip}が入らなくなっていたのを修正。} +% \changes{v1.6c-u00}{2016/06/06}{p\LaTeX{}の変更に追随。} % \fi % % \iffalse %<*driver> \NeedsTeXFormat{pLaTeX2e} % \fi -\ProvidesFile{uplfonts.dtx}[2016/04/30 v1.6b-u00 upLaTeX New Font Selection Scheme] +\ProvidesFile{uplfonts.dtx}[2016/06/06 v1.6c-u00 upLaTeX New Font Selection Scheme] % \iffalse \documentclass{jltxdoc} \GetFileInfo{uplfonts.dtx} @@ -1643,51 +1646,152 @@ % \begin{macrocode} %<*pldefs> \ProvidesFile{upldefs.ltx} - [2016/04/06 v1.6a-u00 upLaTeX Kernel (Default settings)] + [2016/06/06 v1.6c-u00 upLaTeX Kernel (Default settings)] +%</pldefs> % \end{macrocode} % % \subsection{合成文字} -% \begin{macro}{\@text@composite} -% \begin{macro}{\@text@composite@x} % \LaTeXe{}のカーネルのコードをそのまま使うと、p\TeX{}のベースライン % 補正量がゼロでないときに合成文字がおかしくなっていたため、対策します。 -% \changes{v1.6a}{2016/04/01}{ベースライン補正量が0でないときに -% \cs{AA}など一部の合成文字がおかしくなることへの対応。} % \begin{macrocode} -%</pldefs> -%<platexrelease>\plIncludeInRelease{2016/04/17}{\@text@composite} +%<platexrelease>\plIncludeInRelease{2016/06/10}{\@text@composite} %<platexrelease> {Fix for non-zero baselineshift}% %<*pldefs|platexrelease> -\def\@text@composite#1#2#3#{% - \begingroup - \setbox\z@=\hbox\bgroup% - \ybaselineshift\z@\tbaselineshift\z@ - \expandafter\@text@composite@x - \csname\string#1-\string#2\endcsname} +% \end{macrocode} +% \begin{macro}{\g@tlastchart@} +% \TeX\ Live 2015で追加された\cs{lastnodechar}を利用して、 +% 「直前の文字」の符号位置を得るコードです。\cs{lastnodechar}が未定義の場合は +% $-1$が返ります。 +% \changes{v1.6c}{2016/06/06}{マクロ追加} +% \begin{macrocode} +\def\g@tlastchart@#1{#1\ifx\lastnodechar\@undefined\m@ne\else\lastnodechar\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pltx@isletter} +% 第一引数のマクロ(|#1|)の置換テキストが、カテゴリコード11か12の文字トークン1文字であった +% 場合に第二引数の内容に展開され、そうでない場合は第三引数の内容に展開されます。 +% \changes{v1.6c}{2016/06/06}{マクロ追加} +% \begin{macrocode} +\def\pltx@mark{\pltx@mark@} +\let\pltx@scanstop\relax +\long\def\pltx@cond#1\fi{% + #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\long\def\pltx@isletter#1{% + \expandafter\pltx@isletter@i\romannumeral-`0#1\pltx@scanstop} +\long\def\pltx@isletter@i#1\pltx@scanstop{% + \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi{\@firstoftwo}% + {\pltx@isletter@ii\pltx@scanstop#1\pltx@scanstop{}#1\pltx@mark}} +\long\def\pltx@isletter@ii#1\pltx@scanstop#{% + \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi% + {\pltx@isletter@iii}{\pltx@isletter@iv}} +\long\def\pltx@isletter@iii#1\pltx@mark{\@secondoftwo} +\long\def\pltx@isletter@iv#1#2#3\pltx@mark{% + \pltx@cond\ifx\pltx@mark#3\pltx@mark\fi{% + \pltx@cond{\ifnum0\ifcat A\noexpand#21\fi\ifcat=\noexpand#21\fi>\z@}\fi + {\@firstoftwo}{\@secondoftwo}% + }{\@secondoftwo}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@text@composite} +% \begin{macro}{\@text@composite@x} +% \changes{v1.6a}{2016/04/01}{ベースライン補正量が0でないときに +% \cs{AA}など一部の合成文字がおかしくなることへの対応。} +% \changes{v1.6c}{2016/06/06}{v1.6aでの修正で\'e など全てのアクセント付き文字で +% 周囲に\cs{xkanjiskip}が入らなくなっていたのを修正。} +% \begin{macrocode} +%<platexrelease>\def\@text@composite#1#2#3\@text@composite{% +%<platexrelease> \expandafter\@text@composite@x +%<platexrelease> \csname\string#1-\string#2\endcsname} \def\@text@composite@x#1#2{% \ifx#1\relax - \expandafter\@secondoftwo - \else - \expandafter\@firstoftwo - \fi - #1{#2}\egroup - \leavevmode - \expandafter\lower - \iftdir - \ifmdir - \ifmmode\tbaselineshift\else\ybaselineshift\fi - \else - \tbaselineshift - \fi + #2% + \else\pltx@isletter{#1}{#1}{% + \begingroup + \setbox\z@\hbox\bgroup% + \ybaselineshift\z@\tbaselineshift\z@ + #1% + \g@tlastchart@\@tempcntb + \xdef\pltx@composite@temp{\noexpand\@tempcntb=\the\@tempcntb\relax}% + \aftergroup\pltx@composite@temp + \egroup +% \end{macrocode} +% \begin{macrocode} + \ifnum\@tempcntb<\z@ + \@tempdima=\iftdir + \ifmdir + \ifmmode\tbaselineshift\else\ybaselineshift\fi + \else + \tbaselineshift + \fi + \else + \ybaselineshift + \fi + \@tempcntb=\@cclvi + \else\@tempdima=\z@ + \fi +% \end{macrocode} +% アクセントが付く「本体の文字」が欧文文字と推測される場合には、 +% 一旦数式モードに入ることによって\cs{xkanjiskip}が前後に入るようにします。 +% 必要なら、数式モードの前後に\cs{null}を補って\cs{xkanjiskip}の挿入を抑制します。 +% \begin{macrocode} + \ifnum\@tempcntb<\@cclvi + \ifnum\@tempcntb>\m@ne\ifnum\@tempcntb<\@cclvi + \ifodd\xspcode\@tempcntb\else\leavevmode\hbox{}\fi + \fi\fi + \begingroup\mathsurround\z@$% + \ifx\textbaselineshiftfactor\@undefined\else + \textbaselineshiftfactor\z@\fi + \box\z@ + $\endgroup% + \ifnum\@tempcntb>\m@ne\ifnum\@tempcntb<\@cclvi + \ifnum\xspcode\@tempcntb<2\hbox{}\fi + \fi\fi +% \end{macrocode} +% \begin{macrocode} \else - \ybaselineshift + \ifdim\@tempdima=\z@{\ybaselineshift\z@\tbaselineshift\z@#1}% + \else\lower\@tempdima\box\z@\fi \fi - \box\z@ - \endgroup} + \endgroup}% + \fi +} %</pldefs|platexrelease> %<platexrelease>\plEndIncludeInRelease +%<platexrelease>\plIncludeInRelease{2016/04/17}{\@text@composite} +%<platexrelease> {Fix for non-zero baselineshift}% +%<platexrelease>\let\g@tlastchart@\@undefined +%<platexrelease>\let\pltx@isletter\@undefined +%<platexrelease>\def\@text@composite#1#2#3#{% +%<platexrelease> \begingroup +%<platexrelease> \setbox\z@=\hbox\bgroup% +%<platexrelease> \ybaselineshift\z@\tbaselineshift\z@ +%<platexrelease> \expandafter\@text@composite@x +%<platexrelease> \csname\string#1-\string#2\endcsname} +%<platexrelease>\def\@text@composite@x#1#2{% +%<platexrelease> \ifx#1\relax +%<platexrelease> \expandafter\@secondoftwo +%<platexrelease> \else +%<platexrelease> \expandafter\@firstoftwo +%<platexrelease> \fi +%<platexrelease> #1{#2}\egroup +%<platexrelease> \leavevmode +%<platexrelease> \expandafter\lower +%<platexrelease> \iftdir +%<platexrelease> \ifmdir +%<platexrelease> \ifmmode\tbaselineshift\else\ybaselineshift\fi +%<platexrelease> \else +%<platexrelease> \tbaselineshift +%<platexrelease> \fi +%<platexrelease> \else +%<platexrelease> \ybaselineshift +%<platexrelease> \fi +%<platexrelease> \box\z@ +%<platexrelease> \endgroup} +%<platexrelease>\plEndIncludeInRelease %<platexrelease>\plIncludeInRelease{0000/00/00}{\@text@composite} %<platexrelease> {Fix for non-zero baselineshift}% +%<platexrelease>\let\g@tlastchart@\@undefined +%<platexrelease>\let\pltx@isletter\@undefined %<platexrelease>\def\@text@composite#1#2#3\@text@composite{% %<platexrelease> \expandafter\@text@composite@x %<platexrelease> \csname\string#1-\string#2\endcsname} |