%%%%%%%% fonts
\usepackage{luatexja-otf}
\usepackage[kozuka-pr6n]{luatexja-preset}
-%<!en>\usepackage{amssymb}
+%<*ja>
+\def\emph#1{\textbf{\textgt{#1}}}
+\def\headfont{\normalfont\bfseries\gtfamily}
+\usepackage{amssymb}
+%</ja>
%<*en>
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
are written in Japanese only.
%</en>
%<*ja>
-\textbf{\large 本ドキュメントはまだまだ未完成です.}
+\emph{\large 本ドキュメントはまだまだ未完成です.}
%</ja>
\clearpage
\LuaTeX-jaは,\pTeX に多大な影響を受けている.初期の開発目標は,\pTeX の機
能をLuaコードにより実装することであった.しかし,開発が進むにつれ,\pTeX
の完全な移植は不可能であり,また\pTeX における実装がいささか不可解になっ
-ているような状況も発見された.そのため,\textbf{\LuaTeX-jaは,もはや
+ているような状況も発見された.そのため,\emph{\LuaTeX-jaは,もはや
\pTeX の完全な移植は目標とはしない.\pTeX における不自然な仕様・挙動があ
れば,そこは積極的に改める.}
%</ja>
\begin{itemize}
%<*en>
\item A Japanese font is a tuple of a `real' font, a Japanese font
- metric (\textbf{JFM}, for short).
+ metric (\emph{JFM}, for short).
%</en>
%<*ja>
\item 和文フォントは(小塚明朝,IPA明朝などの)実際のフォント,和文フォン
トメトリック(JFMと呼ぶ\footnote{混乱を防ぐため,p\TeX の意味での
- JFM (\texttt{min10.tfm}) などは本ドキュメントでは\textbf{和文用
+ JFM (\texttt{min10.tfm}) などは本ドキュメントでは\emph{和文用
TFM}とよぶことにする.})の組である.
%</ja>
effective anymore.} In concrete terms, the following two methods are not effective anymore:
%</en>
%<*ja>
-\item \textbf{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに
+\item \emph{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに
使われていたいくつかの方法は用いることができない.具体的には,次の方法はもはや無効である:}
%</ja>
\begin{verbatim}
If you want to install manually, do the following instruvtions:
%</en>
%<*ja>
-\textbf{本バージョン以降の\LuaTeX-jaは\TeX~Live~2012以前では動作しない.}
+\emph{本バージョン以降の\LuaTeX-jaは\TeX~Live~2012以前では動作しない.}
これは,\LuaTeX と\Pkg{luaotfload}が\TeX~Live~2013において更新されたことによる.
逆に,20130318.1以前の\LuaTeX-jaは\TeX~Live~2013では動作しない.
You can check this by \texttt{kpsewhich} command (the output may be changed):
%</en>
%<*ja>
-\item \textbf{MiK\TeX 利用者への注意:}\LuaTeX-jaが動作するためには,
+\item \emph{MiK\TeX 利用者への注意:}\LuaTeX-jaが動作するためには,
\texttt{UniJIS2004-UTF32-H}, \texttt{Adobe-Japan1-UCS2}という2つのCMapが
Kpathsearchによって見つけられることが必要である.\TeX\ LiveやW32\TeX ユーザは
普通にインストールすればそのようになっているはずである.
\begin{center}\small
\begin{tabular}{ccccc}
\toprule
-\textbf{字体}&\textbf{フォント名}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
+\emph{字体}&\emph{フォント名}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
明朝体&Ryumin-Light &\verb+\tenmin+&\verb+\sevenmin+&\verb+\fivemin+\\
ゴシック体&GothicBBB-Medium&\verb+\tengt+ &\verb+\sevengt+ &\verb+\fivegt+\\
\bottomrule
\begin{center}\small
\begin{tabular}{cllc}
\toprule
-\textbf{字体}&&&\textbf{ファミリ名}\\\midrule
+\emph{字体}&&&\emph{ファミリ名}\\\midrule
明朝体&\verb+\textmc{...}+&\verb+{\mcfamily ...}+&\verb+\mcdefault+\\
\textgt{ゴシック体}&\verb+\textgt{...}+&\verb+{\gtfamily ...}+&\verb+\gtdefault+\\
\bottomrule
\begin{center}\small
\begin{tabular}{ccccc}
\toprule
-\textbf{字体}&\textbf{ファミリ}&\verb+\mdseries+&\verb+\bfseries+&\textbf{スケール}\\\midrule
+\emph{字体}&\emph{ファミリ}&\verb+\mdseries+&\verb+\bfseries+&\emph{スケール}\\\midrule
明朝体&\tt mc&Ryumin-Light &GothicBBB-Medium&0.962216\\
ゴシック体&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\
\bottomrule
\begin{center}\small
\begin{tabular}{cccccc}
\toprule
-&\textbf{エンコーディング}&\textbf{ファミリ}&\textbf{シリーズ}&\textbf{シェープ}&\textbf{選択}\\\midrule
+&\emph{エンコーディング}&\emph{ファミリ}&\emph{シリーズ}&\emph{シェープ}&\emph{選択}\\\midrule
欧文
&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+
&\verb+\useroman+\\
\verb+\fontencoding{JY3}+ は和文フォントのエンコーディングを
\texttt{JY3}に変更し,\verb+\fontencoding{T1}+ は欧文フォント側を
\texttt{T1}へと変更する.\verb+\fontfamily+ も引数により和文側,欧文
- 側,\textbf{あるいは両方}のフォントファミリを変更する.詳細は
+ 側,\emph{あるいは両方}のフォントファミリを変更する.詳細は
\ref{ssub-nfsspat}節を参照すること.
%</ja>
%<*ja>
\item[範囲1${}^{\text{A}}$] ラテン文字.一部はAdobe-Japan1-6にも含まれている.
この範囲は以下のUnicodeのブロックから構成されている.
- \textbf{ただし,範囲8は除く.}
+ \emph{ただし,範囲8は除く.}
%</ja>
\begin{multicols}{2}
\begin{itemize}
To make a match between a Japanese font and an alphabetic font, sometimes
shifting of the baseline of one of the pair is needed. In \pTeX, this is achieved
by setting \verb+\ybaselineshift+ to a non-zero length (the
-baseline of alphabetic fonts is shifted below). However, for documents
+baseline of \textbf{ALchar} is shifted below). However, for documents
whose main language is not Japanese, it is good to shift the baseline of
Japanese fonts, but not that of alphabetic fonts.
Because of this, \LuaTeX-ja can independently set the shifting amount
%</en>
%<*ja>
和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が
-必要になる.\pTeX ではこれは \verb+\ybaselineshift+ を非零の長さに設定することで
-なされていた(欧文フォントのベースラインが下がる).しかし,日本語が主ではない
+必要になる.\pTeX ではこれは \verb+\ybaselineshift+ を設定することで
+なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない
文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい.
このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量
(\Param{yalbaselineshift}パラメータ)と和文フォントのベースラインのシフト量
%</ja>
\begin{LTXexample}
-\vrule width 150pt height 0.4pt depth 0pt\hskip-120pt
+\vrule width 150pt height 0.4pt depth 0pt \hskip-120pt
\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう
\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう
\end{LTXexample}
\end{LTXexample}
+%<*ja>
+\paragraph{数式における挙動:\pTeX との違い}
+\textbf{ALchar}のベースラインを補正する \Param{yalbaselineshift} パラメータは
+ほぼ\pTeX における \verb+\ybaselineshift+ に対応しているものであるが,
+数式中の挙動は異なっているので注意が必要である.
+例えば,表\ref{tab:math_bsa}のように,数式中に明示的に現れた \verb+\hbox+ は,
+\begin{itemize}
+ \item \pTeX では,ボックス全体が \verb+\ybaselineshift+ だとシフトされるので,
+ 表\ref{tab:math_bsa}中の``い''のように,ボックス中の和文文字は
+ \verb+\ybaselineshift+だけシフトされ,一方,``for all''のように,
+ ボックス内の欧文文字は2重にシフトされることになる.
+ \item 一方,\LuaTeX-jaではそのようなことはおこらず,
+ 数式中に明示的に現れた \verb+\hbox+ はシフトしない.そのため,
+ 表\ref{tab:math_bsa}中の``い''も``for all''も,それぞれ本文中に
+ 書かれたときと同じ上下位置に組まれる.
+\end{itemize}
+\begin{table}
+\small\centering
+\caption{数式関係のベースライン補正($\Param{yalbaselineshift}=10\,\textrm{pt}$)}
+\label{tab:math_bsa}
+\newdimen\origbaselineskip
+\origbaselineskip=\baselineskip
+\begin{tabular}{lp{30\zw}}
+\toprule
+\emph{入力}&\vspace*{-\origbaselineskip}
+\begin{verbatim}
+数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$
+\end{verbatim}\\
+\noalign{\vskip-\origbaselineskip}
+\midrule
+\emph{\pTeX}&
+{\ltjsetparameter{yalbaselineshift=10pt}%
+数式abc: $あa\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x,y)\ \lower10pt\hbox{for all}\ x\in A$
+\par}\\
+\midrule
+\emph{\LuaTeX-ja}&
+{\ltjsetparameter{yalbaselineshift=10pt}%
+数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$
+\par}\\
+\noalign{\vskip-\origbaselineskip}
+\bottomrule
+\end{tabular}
+\end{table}
+%</ja>
+
%<en>\part{Reference}
%<ja>\part{リファレンス}
\label{part-ref}
和文フォントを指定することができる.「標準的な」和文フォント,
つまり`Ryumin-Light'と`GothicBBB-Medium'の指定でこのプリフィックスが使われる.
-\textbf{\texttt{psft}プリフィックスの下では
+\emph{\texttt{psft}プリフィックスの下では
\texttt{+jp90} などのOpenType font featureの効力はない.
非埋込フォントをPDFに使用すると,実際にどのようなフォントが
表示に用いられるか予測できないからである.}
\end{LTXexample}
上の例では,
\texttt{hwid} featureにより,「ヒ」が半角の「ヒ」に置き換わるが,
-文字クラスは「ヒ」の属する0\textbf{ではなく},「ヒ」の属する2000となる.
+文字クラスは「ヒ」の属する0\emph{ではなく},「ヒ」の属する2000となる.
%</ja>
%<ja>\paragraph{仮想的な文字}
\item[\tt size\_cache]
%<*ja>
使用されているJFMの情報が格納されているテーブルで,
-\textbf{このテーブルを書き換えてはならない}.
+\emph{このテーブルを書き換えてはならない}.
中身はほぼJFMファイルに書かれている唯一のテーブルであるが,次のように若干変わっている:
\begin{itemize}
\item 各文字クラス$i$に属する文字達のテーブル
12~(other), while the space has 10~(space).
%</en>
%<*ja>
-\textbf{{\normalfont\tt\char92ltjgetparameter}の戻り値は常に文字列である.}
+\emph{{\normalfont\tt\char92ltjgetparameter}の戻り値は常に文字列である.}
これは\texttt{tex.write()}によって出力しているためで,スペース`\texttt{\char32}'~(U+0020)を除いた文字のカテゴリーコードは全て12~(other)となる.
一方,スペースのカテゴリーコードは10~(space)である.
%</ja>
%</en>
%<*ja>
元々の\LaTeXe におけるものと同様に,このコマンドは現在のフォントファミリ(欧文,
-和文,\textbf{もしくは両方})を<family>に変更する.
+和文,\emph{もしくは両方})を<family>に変更する.
どのファミリが変更されるかは以下のようにして決定される:
%</ja>
\begin{itemize}
\Pkg{luaotfload}のコールバックによる処理が適用されない和文文字のためのノードで,
\texttt{value}フィールドにその文字のコードが格納されている.
この \verb+user_id+ を持つノードはそれぞれが\Pkg{luaotfload}のコールバックの処理の
-\textbf{後で}`glyph\_node'に変換される.この \verb+user_id+ は %
+\emph{後で}`glyph\_node'に変換される.この \verb+user_id+ は %
\Pkg{luatexja-otf} パッケージでのみ使用される.
%</ja>
%</en>
%<*ja>
\verb+unsave+ が \verb+filtered_hpack+(これは \verb+hpack_filter+ コールバックが
-実行されるところである)の\textbf{前に}実行されていることに注意する.
+実行されるところである)の\emph{前に}実行されていることに注意する.
したがって,上記ソース中で`5\,pt'は \verb+unsave+ のところで捨てられ,
\verb+hpack_filter+ からはアクセスすることができない.
%</ja>
以上を踏まえ,\LuaTeX-jaにおける「和文文字直後の改行抑制」の処理は,次のようになっている:
\begin{quote}
-各入力行に対し,\textbf{その入力行が読まれる前の内部状態で}
+各入力行に対し,\emph{その入力行が読まれる前の内部状態で}
以下の3条件が満たされている場合,\LuaTeX-jaはU+FFFFF番の文字
\footnote{この文字はコメント文字として扱われるように\LuaTeX-ja内部で設定をしている.}
を末尾に追加する.よって,その場合に改行は空白とは見做されないこととなる.
with the \textit{id} of it:
%</en>
%<*ja>
-\textbf{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである:
+\emph{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである:
%</ja>
\begin{enumerate}
%<*en>
\hbox{\hbox{abc}...\hbox{\lower1pt\hbox{xyz}}}
\end{verbatim}
のように,$p$の内容が別の水平ボックスで開始・終了している可能性も十分あり得る.そのような場合,
-$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,\textbf{垂直方向にシフトされていない}水平ボックスの
+$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,\emph{垂直方向にシフトされていない}水平ボックスの
場合だけ内部を再帰的に探索する.例えば上の例では,$\mathit{Np}.\mathit{head}$は文字「a」を表すノードであり,
一方$\mathit{Np}.\mathit{tail}$は垂直方向にシフトされた水平ボックス,\verb+\lower1pt\hbox{xyz}+に対応するノードである.
\item また,先頭にアクセント付きの文字がきたり,末尾にイタリック補正用のカーンが
\longrightarrow \Node{glue or kern}{右空白}\longrightarrow \Node{cluster}{\textit{Np}}
\]
-以後,\textbf{典型的な例として,クラスタ\textit{Nq}と\textit{Np}が共に\textsf{\textmd{和文A}}である場合を見ていこう,}
+以後,\emph{典型的な例として,クラスタ\textit{Nq}と\textit{Np}が共に\textsf{\textmd{和文A}}である場合を見ていこう,}
この場合が全ての場合の基本となる.
\paragraph{「右空白」の算出}
\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行
長に半端が出た場合,その半端分は\Param{\hyperlink{fld:xks}{xkanjiskip}},
\Param{\hyperlink{fld:kanjiskip}{kanjiskip}},JFMグルーの全てで(優先順位なく)負担される.
-\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\textbf{段
+\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\emph{段
落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整
を実現するためにグルーの伸縮度を調整する.
\texttt{luatexja-adjust.sty} の作用は,このcallbackを追加するだけであり,
グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には,
有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と
いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に
-\texttt{fi} などの\textbf{無限大レベルの伸縮度が用いられている場合は,そ
+\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている場合は,そ
の行に対しての処理を中止}する.
よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて
conv_jchar_to_hbox_A =
function (p, sty)
if not p then return nil
- elseif p.id == id_sub_mlist then
- if p.head then
- p.head = conv_jchar_to_hbox(p.head, sty)
- end
- elseif p.id == id_mchar then
- local fam = has_attr(p, attr_jfam) or -1
- if (not is_math_letters[p.char]) and ltjc.is_ucs_in_japanese_char(p) and fam>=0 then
- local f = ltjs.get_penalty_table(MJT + 0x100 * sty + fam, -1, tex_getcount('ltj@@stack'))
- if f ~= -1 then
- local q = node_new(id_sub_box)
- local r = node_new(id_glyph); r.next = nil
- r.char = p.char; r.font = f; r.subtype = 256
- local k = has_attr(r,attr_ykblshift) or 0
- set_attr(r, attr_ykblshift, 0)
- set_attr(r, attr_icflag, PROCESSED)
- local met = ltjf_font_metric_table[f]
- ltjw.head = r; ltjw.capsule_glyph(r, tex.mathdir , true, met, ltjf_find_char_class(p.char, met));
- q.head = ltjw.head; node_free(p); p=q;
- set_attr(q.head, attr_yablshift, k)
- end
+ else
+ local pid = p.id
+ if pid == id_sub_mlist then
+ if p.head then
+ p.head = conv_jchar_to_hbox(p.head, sty)
+ end
+ elseif pid == id_mchar then
+ local fam = has_attr(p, attr_jfam) or -1
+ if (not is_math_letters[p.char]) and ltjc.is_ucs_in_japanese_char(p) and fam>=0 then
+ local f = ltjs.get_penalty_table(MJT + 0x100 * sty + fam, -1, tex_getcount('ltj@@stack'))
+ if f ~= -1 then
+ local q = node_new(id_sub_box)
+ local r = node_new(id_glyph); r.next = nil
+ r.char = p.char; r.font = f; r.subtype = 256
+ local k = has_attr(r,attr_ykblshift) or 0
+ set_attr(r, attr_ykblshift, 0)
+ -- ltj-setwidth 内で実際の位置補正はおこなうので,補正量を退避
+ ltjw.head = r;
+ local met = ltjf_font_metric_table[f]
+ ltjw.capsule_glyph(r, tex.mathdir , true, met, ltjf_find_char_class(p.char, met));
+ q.head = ltjw.head; node_free(p); p=q;
+ set_attr(q.head, attr_yablshift, k)
+ end
+ end
+ elseif pid == id_sub_box and p.head then
+ -- \hbox で直に与えられた内容は上下位置を補正する必要はない
+ set_attr(p.head, attr_icflag, PROCESSED)
end
end
return p