X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=9ddbee0e7a82857a96c971f8c5c45137fd037c43;hb=cdf699d8291fe43b3850058cea776cbbb387876f;hp=7af6e107966e400da6b565ddf05e7b5c82dfd481;hpb=4b3dec5affbbb98cf59b3955ee16f7933098ac0c;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 7af6e10..9ddbee0 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -15,22 +15,7 @@ %%%%%%%% \makeatletter %%%%%%%% - -%%%%%%%% record loaded packages -\let\ltjpkglist\empty -\newif\if@real@append@list -\def\@append@newentry#1#2{{% - \@real@append@listtrue \def\@tempa{#2}% - \let\@pkglist\@append@newentry@pkglist#1% - \if@real@append@list - \let\@pkglist=\relax\xdef#1{#1\@pkglist{#2}}% - \fi}} -\def\@append@newentry@pkglist#1{% - \def\@tempb{#1}% - \ifx\@tempa\@tempb\@real@append@listfalse\fi} -\def\@addtofilelist#1{\@append@newentry\ltjpkglist{#1}} -\let\@listfiles\empty - +\directlua{if jit then jit.on() end} %<*en> \usepackage[margin=25mm,lmargin=30mm,rmargin=30mm,footskip=6mm]{geometry} \usepackage{luatexja-adjust}\ltjdisableadjust @@ -48,7 +33,8 @@ \usepackage{amsmath,array,tikz,pict2e,multienum,float} \usepackage{booktabs,multicol,luatexja-ruby} -\usepackage{xy,lltjext} +\usepackage[all]{xy} +\usepackage{lltjext,alltt} %%%%%%%% listings @@ -74,6 +60,19 @@ % Suppress output from showexpl to stdout. \let\SX@Info\relax +%%%%%%%% colors +%% modified from http://jfly.iam.u-tokyo.ac.jp/colorset/ +\usepackage{transparent} +\definecolor{red}{rgb}{1, 0.16, 0} +\definecolor{blue}{rgb}{0, 0.25, 1} +\definecolor{gray}{rgb}{.50, .53, .56} +\definecolor{green}{rgb}{.21, .63, .42} +\definecolor{cyan}{rgb}{0.40, .80, 1} +\definecolor{b_gray}{rgb}{0.78, 0.78, 0.80} +\definecolor{b_pink}{rgb}{1, 0.82, 0.82} +\definecolor{b_green}{rgb}{.53, .91, .69} +\definecolor{b_cyan}{rgb}{0.70, .92, 98} + %%%%%%%% hyperref \usepackage{hyperref,bookmark} %<*en> @@ -165,7 +164,11 @@ %%%%%%%% \def\Node#1#2{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr - #1\mathstrut\cr\noalign{\hrule height.4pt}\strut#2\cr}}}}\,}} + #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}\strut#2\cr}}}}}\,} +\def\HNode#1#2#3#4{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr + #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}% + width:\hfill\ #2\cr height:\hfill\ #3\cr depth:\hfill\ #4\cr + }}}}}\,} \protected\def\Param#1{\hyperlink{fld:#1}{\textsf{#1}}} % parameter name \protected\def\DParam#1{\hypertarget{fld:#1}{\textsf{#1}}} % parameter name (definition) @@ -227,7 +230,7 @@ Japanese processing in computers (\textit{e.g.}, the UTF-8 encoding). ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に -もなってしまった:\pTeX という(組版的に)満足なものがあったため,海外で +もなってしまった.\pTeX という(組版的に)満足なものがあったため,海外で 行われている数々の\TeX の拡張――例えば\eTeX や\pdfTeX ――や,TrueType, OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること を怠ってしまったのだ. @@ -294,29 +297,56 @@ The followings are major changes from \pTeX: \begin{itemize} %<*en> -\item A Japanese font is a tuple of a ``real'' font, a Japanese font - metric (\emph{JFM}, for short). +\item \emph{\LuaTeX-ja does all process only with Lua and \TeX\ macros}, +while \pTeX\ is an engine extension of \TeX82. +This means that several features of \pTeX\ are not completely implemented +in \LuaTeX-ja. +% +%<*ja> +\item \pTeX はエンジン拡張であったのに対し, +\emph{\LuaTeX-jaはLuaコードと\TeX マクロを用いて全てを実装している}. +そのため,\pTeX のいくつかの機能は\LuaTeX-ja に(そのままの形では)実装していない. +% +\begin{itemize} +%<*en> + \item \pTeX\ addes several primitives, such as \cs{kanjiskip}, +\cs{prebreakpenalty},~and,~\cs{ifydir}. They can be used as follows: % %<*ja> -\item 和文フォントは(小塚明朝,IPA明朝などの)実際のフォント,和文フォン - トメトリック(JFMと呼ぶ\footnote{混乱を防ぐため,p\TeX の意味での - JFM (\texttt{min10.tfm}) などは本ドキュメントでは\emph{和文用 - TFM}とよぶことにする.})の組である. + \item 例えば\pTeX で追加された次のようなプリミティブ % +\begin{verbatim} +\kanjiskip=10pt \dimen0=kanjiskip +\prebreakpenalty`ぁ=100 +\ifydir ... \fi +\end{verbatim} +% However, we cannot use them under \LuaTeX-ja. +% Instead of them, we have to write as the following. +% は\LuaTeX-jaには存在しない.\LuaTeX-jaでは以下のように記述することになる. +\begin{verbatim} +\ltjsetparameter{kanjiskip} \dimen0=\ltjgetparameter{kanjiskip} +\ltjsetparameter{prebreakpenalty={`ぁ,100}} +\ifnum\ltjgetparemeter{direction}=4 ... \fi +\end{verbatim} %<*en> \item In \pTeX, a line break after Japanese character is ignored (and doesn't yield a space), since line breaks (in source files) are permitted almost everywhere in Japanese texts. However, \LuaTeX-ja - doesn't have this function completely, because of a specification - of \LuaTeX. + doesn't have this feature completely, because of a specification + of \LuaTeX. For the detail, see Section~\ref{sec-lbreak}. % %<*ja> \item 日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字 直後の改行は無視される(スペースが入らない)ようになっていた.しかし, \LuaTeX-ja では \LuaTeX の仕様のためにこの機能は完全には実装されていない. + 詳しくは\ref{sec-lbreak}章を参照. % +\end{itemize} + + + %<*en> \item The insertion process of glues/kerns between two Japanese characters and between a Japanese character and other characters @@ -359,18 +389,18 @@ The followings are major changes from \pTeX: \item \emph{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに 使われていたいくつかの方法は用いることができない.具体的には,次の方法はもはや無効である:} % -\begin{verbatim} +\begin{lstlisting} ちょ{}っと ちょ\/っと -\end{verbatim} +\end{lstlisting} %<*en> If you want to do so, please put an empty horizontal box (hbox) between it instead: % %<*ja> もし同じことをやりたければ,空の水平ボックス(hbox)を間に挟めばよい: % -\begin{verbatim} +\begin{lstlisting} ちょ\hbox{}っと -\end{verbatim} +\end{lstlisting} %<*en> @@ -384,15 +414,17 @@ The followings are major changes from \pTeX: \end{itemize} %<*ja> -\item \LuaTeX-jaでは,\pTeX と同様に漢字・仮名を制御綴内に用いることができ, -\cs{西暦} などが正しく動作するようにしている. -但し,制御綴中に使える和文文字が\pTeX・\upTeX と全く同じではないことに注意すること. +\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. +\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には +仕様が異なるので注意. % +%<*en> +\item Japanese characters in discretionary break (\cs{discretionary}) is not supported. +% %<*ja> -\item ****版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. -\LuaTeX のコールバックの制限などにより,特に異なった組方向のボックスを扱う場合には -仕様が異なるので注意すること. +\item \cs{discretionary} 内に直接和文文字を記述することはサポートされない.和文文字をどう + しても使いたい場合は \cs{hbox} で括ること. % \end{itemize} @@ -522,72 +554,79 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %\subsection{Installation} %\subsection{インストール} -%To install the \LuaTeX-ja\ package, you will need: -%\LuaTeX-jaパッケージのインストールには,次のものが必要である. +%The following packages are needed for the \LuaTeX-ja\ package. +%\LuaTeX-jaパッケージには,次のパッケージ類が必要である. \begin{itemize} -\item \LuaTeX\ beta-0.74.0 (or later) -\item \Pkg{luaotfload} v2.2 (or later) -\item \Pkg{luatexbase} v0.6 -\item \Pkg{xunicode} v0.981~(2011/09/09) +\item \LuaTeX\ snapshot rev~5024 (or later) +\item \Pkg{luaotfload} v2.5 (or later) \item \Pkg{adobemapping} (Adobe cmap and pdfmapping files) -\item \Pkg{everysel} +\item \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe) +%\item \emph{IPAex fonts(\url{http://ipafont.ipa.go.jp/})} +%\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})} \end{itemize} %<*en> -\emph{This version of \LuaTeX-ja no longer supports \TeX~Live~2012 (or older version), -since \LuaTeX\ binary and \Pkg{luaotfload} is updated in -\TeX~Live~2013.} +\emph{This version of \LuaTeX-ja no longer supports \TeX~Live~2013 (or older version). +If you want to use this version with \TeX~Live~2014, you have to build a development +version of \LuaTeX\ from its source.} \medskip -Now \LuaTeX-ja is available from the following archive and distributions: +Now \LuaTeX-ja is available from +CTAN (in the \texttt{macros/luatex/generic/luatexja} directory), and +the following distributions: \begin{itemize} - \item CTAN (in the \texttt{macros/luatex/generic/luatexja} directory) \item MiK\TeX\ (in \texttt{luatexja.tar.lzma}); see the next subsection \item \TeX\ Live (in \texttt{texmf-dist/tex/luatex/luatexja}) \item W32\TeX\ (in \texttt{luatexja.tar.xz}) \end{itemize} - -If you are using \TeX~Live~2014, you can install \LuaTeX-ja -from \TeX~Live manager (\texttt{tlmgr}): -\begin{verbatim} -$ tlmgr install luatexja -\end{verbatim} +IPAex fonts are also available in these distributions. % %<*ja> -\emph{本バージョンの\LuaTeX-jaは\TeX~Live~2012以前では動作しない.} -これは,\LuaTeX と\Pkg{luaotfload}が\TeX~Live~2013において更新されたことによる. +\emph{本バージョンの\LuaTeX-jaは\TeX~Live~2013以前では動作しない.\TeX~Live~2014で +用いたい場合は,自力で\LuaTeX 開発版をソースからビルドする必要がある.} \medskip -現在,\LuaTeX-jaは以下のアーカイブ,およびディストリビューションに収録されている: +現在,\LuaTeX-jaはCTAN (\texttt{macros/luatex/generic/luatexja})に収録されている他, +以下のディストリビューションにも収録されている: \begin{itemize} - \item CTAN (\texttt{macros/luatex/generic/luatexja}) \item MiK\TeX\ (\texttt{luatexja.tar.lzma}) \item \TeX\ Live (\texttt{texmf-dist/tex/luatex/luatexja}) \item W32\TeX\ (\texttt{luatexja.tar.xz}) \end{itemize} - -例えば\TeX~Live~2014を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を -使ってインストールすることができる. -\begin{verbatim} -$ tlmgr install luatexja -\end{verbatim} +これらのディストリビューションはIPAexフォントも収録している. +W32\TeX においてはIPAexフォントは \texttt{luatexja.tar.xz} 内にある. % +% %<*ja> +% 例えば\TeX~Live~2015を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を +% 使ってインストールすることができる. +% \begin{lstlisting} +% $ tlmgr install luatexja +% \end{lstlisting} +% % +% %<*en> +% If you are using \TeX~Live~2015, you can install \LuaTeX-ja +% from \TeX~Live manager (\texttt{tlmgr}): +% \begin{lstlisting} +% $ tlmgr install luatexja +% \end{lstlisting} +% % + %\paragraph{Manual installation} %\paragraph{手動インストール方法} \begin{enumerate} %<*en> -\item Download the source archive, by one of the following method. +\item Download the source, by one of the following method. At the present, \LuaTeX-ja has no \emph{stable} release. \begin{itemize} -\item Copy the Git repository: -\begin{verbatim} +\item Clone the Git repository: +\begin{lstlisting} $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git -\end{verbatim} +\end{lstlisting} \item Download the \texttt{tar.gz} archive of HEAD in the \texttt{master} branch from \begin{flushleft} \url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}. @@ -598,14 +637,14 @@ Note that the \texttt{master} branch, and hence the archive in CTAN, are not upd the forefront of development is not the \texttt{master} branch. % %<*ja> -\item ソースアーカイブを以下のいずれかの方法で取得する.現在公開されているのはあくまでも +\item ソースを以下のいずれかの方法で取得する.現在公開されているのはあくまでも 開発版であって,安定版でないことに注意. \begin{itemize} -\item Gitリポジトリの内容をコピーする: -\begin{verbatim} +\item Gitリポジトリをクローンする: +\begin{lstlisting} $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git -\end{verbatim} +\end{lstlisting} \item \texttt{master}ブランチのスナップショット(\texttt{tar.gz}形式)をダウンロードする. \begin{flushleft} \url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}. @@ -621,7 +660,7 @@ $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git But only the contents in \texttt{src/} are needed to work \LuaTeX-ja. % %<*ja> -\item 「Gitリポジトリをコピー」以外の方法でアーカイブを取得したならば,それを展開する. +\item 「Gitリポジトリをクローン」以外の方法でアーカイブを取得したならば,それを展開する. \texttt{src/}をはじめとしたいくつかのディレクトリができるが, 動作には\texttt{src/}以下の内容だけで十分. % @@ -637,13 +676,13 @@ But only the contents in \texttt{src/} are needed to work \LuaTeX-ja. 格納した \texttt{ltj-kinsoku.lua} を生成するために, 以下を実行する必要がある: % -\begin{verbatim} +\begin{lstlisting} $ cd src $ lualatex ltjclasses.ins $ lualatex ltjsclasses.ins $ lualatex ltjltxdoc.ins $ luatex ltj-kinsoku_make.tex -\end{verbatim} +\end{lstlisting} %<*en> Note that \texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} are not needed in regular use. % @@ -662,7 +701,11 @@ Note that \texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} are not need % %<*ja> \item \texttt{src}の中身を自分の\texttt{TEXMF}ツリーにコピーする. - 場所の例としては,例えば\texttt{TEXMF/tex/luatex/luatexja/}がある. + 場所の例としては,例えば +\begin{quote} + \texttt{TEXMF/tex/luatex/luatexja/} +\end{quote} + がある. シンボリックリンクが利用できる環境で,かつリポジトリを直接取得したのであれば, (更新を容易にするために)コピーではなくリンクを貼ることを勧める. % @@ -714,10 +757,10 @@ so you will encounter an error like the following: \LuaTeX によって見つけられることが必要である. しかしMiK\TeX ではそのようになっていないので,次のエラーが発生するだろう: % -\begin{verbatim} +\begin{lstlisting} ! LuaTeX error ...iles (x86)/MiKTeX 2.9/tex/luatex/luatexja/ltj-rmlgbm.lua bad argument #1 to 'open' (string expected, got nil) -\end{verbatim} +\end{lstlisting} %<*en> If so, please execute a batch file which is written on @@ -741,9 +784,9 @@ run \LuaTeX-ja in this directory, and finally delete the temporary directory. %To use \LuaTeX-ja in plain \TeX, simply put the following at the beginning of the document: %\LuaTeX-jaを plain \TeX で使うためには,単に次の行をソースファイルの冒頭に追加すればよい: -\begin{verbatim} +\begin{lstlisting} \input luatexja.sty -\end{verbatim} +\end{lstlisting} %This does minimal settings (like \texttt{ptex.tex}) for typesetting Japanese documents: %これで(\texttt{ptex.tex}のように)日本語組版のための最低限の設定がなされる: @@ -756,12 +799,12 @@ run \LuaTeX-ja in this directory, and finally delete the temporary directory. \textbf{direction}& \textbf{classification}&\textbf{font name}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule \smash{\raisebox{-1ex}{\emph{yoko} (horizontal)}}& -\emph{mincho}&Ryumin-Light &\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\ -&\emph{gothic}&GothicBBB-Medium&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ +\emph{mincho}&IPAex Mincho&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\ +&\emph{gothic}&IPAex Gothic&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ \midrule \smash{\raisebox{-1ex}{\emph{tate} (vertical)}}& -\emph{mincho}&Ryumin-Light &\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\ -&\emph{gothic}&GothicBBB-Medium&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ +\emph{mincho}&IPAex Mincho&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\ +&\emph{gothic}&IPAex Gothic&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ \bottomrule \end{tabular} \end{center} @@ -773,30 +816,24 @@ run \LuaTeX-ja in this directory, and finally delete the temporary directory. \toprule \emph{組方向}&\emph{字体}&\emph{フォント名}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule \smash{\raisebox{-1ex}{横組}}& -明朝体&Ryumin-Light &\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\ -&ゴシック体&GothicBBB-Medium&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ +明朝体&IPAex明朝&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\ +&ゴシック体&IPAexゴシック&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ \midrule \smash{\raisebox{-1ex}{縦組}}& -明朝体&Ryumin-Light &\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\ -&ゴシック体&GothicBBB-Medium&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ +明朝体&IPAex明朝&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\ +&ゴシック体&IPAexゴシック&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ \bottomrule \end{tabular} \end{center} % \begin{itemize} %<*en> -\item It is widely accepted that fonts ``Ryumin-Light'' and - ``GothicBBB-Medium'' aren't embedded into PDF files, and a PDF reader - substitute them by some external Japanese fonts (\textit{e.g.}, - Ryumin-Light is substituted with Kozuka Mincho in Adobe Reader). - We adopt this custom to the default setting. +\item With \texttt{luatexja.cfg}, one can use other fonts +as ``default'' Japanese fonts (Subsection~\ref{ssec-cfg}). % %<*ja> -\item ``Ryumin-Light''と``GothicBBB-Medium''はPDFファイルに埋め込まずに - 名前参照のみで用いることが広く受け入れられており,この場合PDFリーダーが - 適切な外部フォントで代用する(例えば,Adobe ReaderではRyumin-Lightは - 小塚明朝で代替される).そこで,これらを引き続きデフォルトのフォントと - して採用する. +\item \texttt{luatexja.cfg} を用いることによって,標準和文フォントを +IPAexフォントから別のフォントに置き換えることができる.\ref{ssec-cfg}節を参照. % %<*en> @@ -831,8 +868,6 @@ run \LuaTeX-ja in this directory, and finally delete the temporary directory. %\subsection{\LaTeX で使う} \label{ssec-ltx} -\paragraph{\LaTeXe} - %<*en> Using in \LaTeXe\ is basically same. To set up the minimal environment for Japanese, you only have to load \texttt{luatexja.sty}: @@ -841,9 +876,9 @@ for Japanese, you only have to load \texttt{luatexja.sty}: \LaTeXe を用いる場合も基本的には同じである.日本語組版のための最低限の環境を 設定するためには,\texttt{luatexja.sty}を読み込むだけでよい: % -\begin{verbatim} +\begin{lstlisting} \usepackage{luatexja} -\end{verbatim} +\end{lstlisting} %<*en> It also does minimal settings (counterparts in \pLaTeX\ are \texttt{% plfonts.dtx} and \texttt{pldefs.ltx}): @@ -881,15 +916,14 @@ By default, the following fonts are used for \emph{mincho} and \emph{gothic}: \begin{center}\small \begin{tabular}{ccccc} \toprule -\textbf{classification}&\textbf{family name}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule -\emph{mincho} (明朝体)&\tt mc&Ryumin-Light &GothicBBB-Medium&0.962216\\ -\emph{gothic} (\textgt{ゴシック体})&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\ +\textbf{classification}&\textbf{family}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule +\emph{mincho} (明朝体)&\tt mc&IPAex Mincho&IPAex Gothic&0.962216\\ +\emph{gothic} (\textgt{ゴシック体})&\tt gt&IPAex Gothic&IPAex Gothic&0.962216\\ \bottomrule \end{tabular} \end{center} -Note that the bold series in both family are same as the medium series of \emph{gothic} family. -This is a convention in \pLaTeX. This is trace that there were only 2~fonts (these are Ryumin-Light -and GothicBBB-Medium) in early years of DTP. There is no italic nor slanted shape for +Note that the bold series in both family are same as the medium series of \emph{gothic} + family. There is no italic nor slanted shape for these \texttt{mc}~and~\texttt{gt}. % %<*ja> @@ -908,16 +942,14 @@ and GothicBBB-Medium) in early years of DTP. There is no italic nor slanted shap \begin{tabular}{ccccc} \toprule \emph{字体}&\emph{ファミリ}&\cs{mdseries}&\cs{bfseries}&\emph{スケール}\\\midrule -明朝体&\tt mc&Ryumin-Light &GothicBBB-Medium&0.962216\\ -ゴシック体&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\ +明朝体&\tt mc&IPAex明朝&IPAexゴシック&0.962216\\ +ゴシック体&\tt gt&IPAexゴシック&IPAexゴシック&0.962216\\ \bottomrule \end{tabular} \end{center} どちらのファミリにおいても,そのboldシリーズで使われるフォントは -ゴシック体のmediumシリーズで使われるフォントと同じあることに注意. -これは初期のDTPにおいて和文フォントが2つ(それがちょうど\ -Ryumin-Light, GothicBBB-Mediumだった)しか利用できなかった時の名残であり,\pLaTeX{} -での標準設定とも同じである. +ゴシック体のmediumシリーズで使われるフォントと同じであることに注意. +また,どちらのファミリでもイタリック体・スラント体は定義されない. % @@ -953,6 +985,21 @@ Okumura), namely, \Pkg{ltjclasses}\footnote{% がそれぞれ用意されている. % +%<*ja> +\paragraph{脚注とボトムフロートの出力順序} +オリジナルの\LaTeX では脚注がボトムフロートの上に来るようになっており, +\pLaTeX では脚注がボトムフロートの下に来るように変更されている. + +\LuaTeX-jaでは「欧文クラスの中にちょっとだけ日本語を入れる」という利用も考慮し, +脚注とボトムフロートの順序は\LaTeX 通りとした.もし\pLaTeX の出力順序が好みならば, +\Pkg{stfloats}パッケージを利用して +\begin{lstlisting} + \usepackage{stfloats} \fnbelowfloat +\end{lstlisting} +のようにすればよい.\Pkg{footmisc}パッケージを \texttt{bottom}\ オプションを指定して +読み込むという方法もあるが,それだとボトムフロートと脚注の間が開いてしまう. +% + %\section{Changing Fonts} %\section{フォントの変更} @@ -1057,10 +1104,10 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ 実装では \cs{DeclareFontFamily} を用いても問題は生じない. \item 和文フォントのシェイプを定義するには,通常の \cs{DeclareFontShape} を使えば良い: % -\begin{verbatim} +\begin{lstlisting} \DeclareFontShape{JY3}{mc}{bx}{n}{<-> s*KozMinPr6N-Bold:jfm=ujis;-kern}{} % Kozuka Mincho Pr6N Bold -\end{verbatim} +\end{lstlisting} %<*ja> 仮名書体を使う場合など,複数の和文フォントを組み合わせて使いたい場合は \ref{ssec-altfont}節の \cs{ltjdeclarealtfont} と,その\LaTeX 版の\ @@ -1274,14 +1321,14 @@ before \Pkg{luatexja-preset}: 斜体大文字が出なくなる,など.}場合は, 次のように\Pkg{luatexja-preset}の前に\Pkg{fontspec}を手動で読みこめば良い: % -\begin{verbatim} +\begin{lstlisting} \usepackage[no-math]{fontspec} \usepackage[...]{luatexja-preset} -\end{verbatim} +\end{lstlisting} %\paragraph{General options} %\paragraph{一般的なオプション} -\begin{cslist} +\begin{cslist}[before*=] \item[nodeluxe] %<*en> @@ -1293,7 +1340,7 @@ This means that \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+ and %<*ja> \LaTeXe 環境下での標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する. より具体的に言うと,この設定の下では -\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+, +\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+, \verb+\gtfamily\mdseries+はみな同じフォントとなる. \emph{このオプションは標準で有効になっている.} % @@ -1318,10 +1365,10 @@ bold (\cs{bfseries}). % \item[expert] %<*en> -Use horizontal kana alternates, and define a command \cs{rubyfamily} to use kana +Use horizontal/vertical kana alternates, and define a command \cs{rubyfamily} to use kana characters designed for ruby. % -%横組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる. +%横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる. \item[bold] %Substitute bold series of \textit{gothic} for bold series of \textit{mincho}. %「明朝の太字」をゴシック体の太字によって代替する. @@ -1352,7 +1399,6 @@ We didn't taken account of when both \texttt{90jis} and \texttt{jis2004} are sp 同時に指定された場合の動作については全く考慮していない. % -\newpage %\paragraph{Presets for multi weight} %\paragraph{多ウェイト用プリセットの一覧} %<*en> @@ -1456,7 +1502,7 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. \end{tabular} \end{center} -%\medskip +%\newpage \item[morisawa-pro] Morisawa Pro (Adobe-Japan1-4) fonts. % \\*[-\dimexpr\medskipamount+\baselineskip\relax] @@ -1486,7 +1532,6 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. \end{tabular} \end{center} -\newpage \item[yu-win] Yu fonts bundled with Windows~8.1. % \\*[-\dimexpr\medskipamount+\baselineskip\relax] \item[yu-osx] Yu fonts bundled with OSX~Mavericks. @@ -1517,7 +1562,7 @@ Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. \end{tabular} \end{center} -\end{cslist} +\end{cslist} %\paragraph{Presets for single weight} %\paragraph{単ウェイト用プリセット一覧} %<*en> @@ -1538,9 +1583,9 @@ even if \texttt{deluxe} option is also specified). \midrule %<*en> \it mincho&Ryumin-Light (non-embedded) -&IPAMincho&IPAexMincho&MS Mincho\\ +&IPA Mincho&IPAex Mincho&MS Mincho\\ \it gothic&GothicBBB-Medium (non-embedded) -&IPAGothic&IPAexGothic&MS Gothic\\ +&IPA Gothic&IPAex Gothic&MS Gothic\\ % %<*ja> \gtfamily 明朝体&Ryumin-Light(非埋込) @@ -1551,7 +1596,6 @@ even if \texttt{deluxe} option is also specified). \bottomrule \end{tabular}\par\medskip} - %\paragraph{Using HG fonts} %\paragraph{HGフォントの利用} %<*en> @@ -1569,14 +1613,14 @@ We can use HG~fonts bundled with Microsoft~Office for realizing multiple weights \midrule %<*en> \bf mincho medium -&IPAMincho&IPAexMincho&MS Mincho\\\midrule +&IPA Mincho&IPAex Mincho&MS Mincho\\\midrule \bf mincho bold& \multicolumn{3}{c}{HG Mincho E}\\\midrule \bf Gothic medium\\ ~~without \texttt{deluxe} -&IPAGothic&IPAexGothic&MS Gothic\\ +&IPA Gothic&IPAex Gothic&MS Gothic\\ ~~with {\tt jis2004} -&IPAGothic&IPAexGothic&MS Gothic\\ +&IPA Gothic&IPAex Gothic&MS Gothic\\ \cmidrule(lr){1-4} ~~otherwise& \multicolumn{3}{c}{HG Gothic M}\\\midrule @@ -1620,6 +1664,7 @@ are internally specified by: \end{description} % %<*ja> +\newpage なお,HG明朝E・HGゴシックE・HG創英角ゴシックUB・HG丸ゴシック体PROの4つについては,内部で \begin{description} \item[標準] フォント名(\texttt{HGMinchoE} など) @@ -1663,10 +1708,10 @@ If you want to use these functions, load \Pkg{luatexja-otf} package. %<*ja> \Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した: \begin{cslist} -\item[\cs{deluxe}] 明朝体・ゴシック体各2ウェイトと,丸ゴシック体を扱えるようになる. -\item[\cs{expert}] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も +\item[deluxe] 明朝体・ゴシック体各2ウェイトと,丸ゴシック体を扱えるようになる. +\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も \ \cs{rubyfamily}\ によって扱えるようになる. -\item[\cs{bold}] ゴシック体を標準で太いウェイトのものに設定する. +\item[bold] ゴシック体を標準で太いウェイトのものに設定する. \end{cslist} しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない. \Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し, @@ -1678,6 +1723,59 @@ If you want to use these functions, load \Pkg{luatexja-otf} package. \ref{ssec-fontspec}節 (\Pkg{fontspec}) の方法で手動で指定する必要がある. % +%\subsection{Changing default Japanese fonts} +%\subsection{標準和文フォントの変更} +\label{ssec-cfg} +%<*en> +If \texttt{luatexja.cfg} can be seen from \LuaTeX, \LuaTeX-ja automatically reads it. +The main use of \texttt{luatexja.cfg} is for changing default Japanese fonts, +when IPAex fonts cannot be installed in \TeX~system. +One should not overuse this \texttt{luatexja.cfg}; fonts which will be used in +a document should be specified in its source. + +For example, +\begin{lstlisting} +\def\ltj@stdmcfont{IPAMincho} +\def\ltj@stdgtfont{IPAGothic} +\end{lstlisting} +makes that IPA~Mincho and IPA~Gothic will be used as default Japanese fonts, instead of +IPAex~Mincho and IPAex~Gothic. + +For another example, the following two lines makes that +non-embedded fonts Ryumin-Light~and~GothicBBB-Medium as default Japanese fonts +(as the earlier version of \LuaTeX-ja): +\begin{lstlisting} +\def\ltj@stdmcfont{psft:Ryumin-Light} +\def\ltj@stdgtfont{psft:GothicBBB-Medium} +\end{lstlisting} +% +%<*ja> +\LuaTeX から見える位置に \texttt{luatexja.cfg} があれば,\LuaTeX-jaはそれを読み込む. +このファイルを用いるとplain~\TeX, \LaTeXe における標準和文フォントを +IPAex明朝・IPAexゴシックから変更することができる. +しかし,基本的には\emph{文章中で用いるフォントは(例えば \Pkg{luatexja-preset} などで) +文書ソース内で指定するべき}であり,この \texttt{luatexja.cfg} は, +「IPAexフォントがインストールできない」など,IPAexフォントが使用できない場合にのみ +応急処置的に用いるべきである. + +例えば +\begin{lstlisting} +\def\ltj@stdmcfont{IPAMincho} +\def\ltj@stdgtfont{IPAGothic} +\end{lstlisting} +と記述しておけば,標準和文フォントがIPA明朝・IPAゴシックへと変 +更される. + + +なお,20140906.0以前のバージョンのように, +Ryumin-Light, GothicBBB-Mediumという名前の非埋込フォントを用いる場合は +\begin{lstlisting} +\def\ltj@stdmcfont{psft:Ryumin-Light} +\def\ltj@stdgtfont{psft:GothicBBB-Medium} +\end{lstlisting} +と記述すればよい. +% + %\section{Changing Parameters} %\section{パラメータの変更} @@ -1747,9 +1845,9 @@ it sets \item 2番,3番,6番,7番,8番の文字範囲に属する文字は\textbf{JAchar}. \end{itemize} % -\begin{verbatim} +\begin{lstlisting} \ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, +8}} -\end{verbatim} +\end{lstlisting} %<*en> The argument to \textsf{jacharrange} parameter is a list of non-zero integer. Negative integer $-n$ in the list means that ``each character in the range~$n$ is an @@ -1797,7 +1895,7 @@ these eight ranges belongs to the character range~217. % \begin{description} %<*en> -\newpage + \item[Range~8${}^{\text{J}}$] The intersection of the upper half of ISO~8859-1 (Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese). This character range consists of the following characters: @@ -1973,8 +2071,7 @@ The block list is indicated in Table~\ref{table-rng7}. \end{table} \end{description} - -%\newpage\subsection{\Param{kanjiskip} and \Param{xkanjiskip}} +%\subsection{\Param{kanjiskip} and \Param{xkanjiskip}} %\subsection{\Param{kanjiskip}と\Param{xkanjiskip}} \label{subs-kskip} @@ -2104,9 +2201,9 @@ as follows: 仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており, 上のコードの1行目を次のように変えても同じことになる: % -\begin{verbatim} +\begin{lstlisting} \ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}} -\end{verbatim} +\end{lstlisting} %<*en> One can use also numbers to specify these two parameters (see Subsection~\ref{ssec-param}). % @@ -2204,6 +2301,30 @@ xyz漢字 }abcかな \end{LTXexample} +%<*en> +Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift} +parameters does not increase the depth of one-letter ``syllable'' $p$ of \textbf{Alchar}, if +its left-protrusion~(\cs{lpcode}) and right-protrusion~(\cs{rpcode}) are both non-zero. +This is because +\begin{itemize} +\item These two parameters are implemented by setting yoffset field of a +glyph node, and this does not increase the depth of the glyph. +\item To cope with the above situation, \LuaTeX-ja automatically supplies +a rule in every ``syllable''. +\item However, we cannot use this ``supplying a rule'' method if \dots +\end{itemize} + +This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift}. +% +%<*ja> +なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意. +\begin{itemize} + \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている. + \item 「音節」を構成する唯一の文字$p$の +左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である. +\end{itemize} +\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない. +% %<*ja> \paragraph{数式における挙動:\pTeX との違い} @@ -2230,10 +2351,10 @@ xyz漢字 \begin{tabular}{lp{30\zw}} \toprule \emph{入力}&\vspace*{\dimexpr-\origbaselineskip-\smallskipamount} -\begin{verbatim} +\begin{lstlisting} 数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2\!/2$, $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ -\end{verbatim}\\ +\end{lstlisting}\\ \noalign{\vskip-\origbaselineskip} \midrule \emph{\pTeX}& @@ -2260,6 +2381,7 @@ $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ \suppressfloats[t] %<*ja> \section{\LuaTeX-jaにおける \cs{catcode}} +\label{sec-catcode} \subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}} \pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか は \cs{kcatcode} の値によって決定されるのであった. @@ -2267,6 +2389,7 @@ $\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ % %<*en> \section{\cs{catcode} in \LuaTeX-ja} +\label{sec-catcode} \subsection{Preliminaries: \cs{kcatcode} in \pTeX\ and \upTeX} In \pTeX~and~\upTeX, the value of \cs{kcatcode} determines whether a Japanese character can be used in a control word. @@ -2609,7 +2732,7 @@ Example&\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\ %<*en> \LuaTeX-ja supports four directions, as shown in Table~\ref{tab-dir}. -The second column (\emph{yoko} direction) is just horizontal writing, +The second column (\emph{yoko} direction) is just horizontal writing, and the third column (\emph{tate} direction) is vertical writing. The fourth column (\emph{dtou} direction) is actually a hidden feature of \pTeX. We implemented this for debugging purpose. @@ -2891,18 +3014,18 @@ However, this no longer applies in \LuaTeX-ja. \the\wd0,~\hbox{\tate \the\wd0} \end{LTXexample} -To access box dimensions \emph{with respect to current direction}, +To access box dimensions \emph{with respect to current direction}, one have to use the following commands instead of \cs{wd} wtc. \begin{cslist} \item[\cs{ltjgetwd}\{\}\textrm{, }\cs{ltjgetht}\{\}\textrm{, }% \cs{ltjgetdp}\{\}] -These commands return \emph{an internal dimension} of \cs{box} with respect to +These commands return \emph{an internal dimension} of \cs{box} with respect to the current direction. One can use these in \cs{dimexpr} primitive, as the followings. -\begin{verbatim} +\begin{lstlisting} \dimexpr 2\ltjgetwd{42}-3pt\relax, \the\ltjgetwd{1701} -\end{verbatim} -By implementaion, the argument must be grouped as \verb+\ltjgetwd{42}+, +\end{lstlisting} +By its implementaion, the argument must be grouped as \verb+\ltjgetwd{42}+, if the argument consists of more than one token. \begin{LTXexample}[width=0.3\textwidth] \parindent0pt @@ -2923,9 +3046,9 @@ if the argument consists of more than one token. \cs{ltjsetdp}=] These commands set the dimension of \cs{box}. Unlike \cs{ltjgetwd}, one does not need to group the argument ; four calls of \cs{ltjsetwd} below have the same meaning. -\begin{verbatim} +\begin{lstlisting} \ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt -\end{verbatim} +\end{lstlisting} \end{cslist} % @@ -2956,12 +3079,15 @@ These commands set the dimension of \cs{box}. Unlike \cs{ltjgetwd}, one doe \item[\cs{ltjgetwd}\{\}\textrm{, }\cs{ltjgetht}\{\}\textrm{, }% \cs{ltjgetdp}\{\}] 現在の組方向に応じたボックスの寸法の取得を行う.結果は内部長さであるため, -\begin{verbatim} +\begin{lstlisting} \dimexpr 2\ltjgetwd{42}-3pt\relax, \the\ltjgetwd{1701} -\end{verbatim} +\end{lstlisting} のように \cs{wd} の代わりとして扱うことができる.引数が1桁の場合は, \cs{ltjgetwd3} のように引数をグループで括らなくても良いが,そうでない場合は -(通常の命令への引数のように)\verb+\ltjgetwd{42}+ とグループに括る必要がある. +(通常の命令への引数のように)\verb+\ltjgetwd{42}+ とグループに括る必要がある% +\footnote{\cs{afterassignment} を利用して実装すればグループに括る必要がなくなるのでは,と思 + うかもしれないが,それでは本文中に書いた例のように \cs{dimexpr} 中で使用でき + なくなってしまう.}. 使用例は以下の通りである. \begin{LTXexample}[width=0.3\textwidth] \parindent0pt @@ -2982,14 +3108,13 @@ These commands set the dimension of \cs{box}. Unlike \cs{ltjgetwd}, one doe \cs{ltjsetdp}=] 現在の組方向に応じたボックスの寸法の設定を行う.\cs{afterassignment} を2回利用して 実装しているので,次の4通りは全て同じ意味である. -\begin{verbatim} +\begin{lstlisting} \ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt -\end{verbatim} +\end{lstlisting} 設定値は「横組」「縦組及び \cs{utod} 方向」「\cs{dtou} 方向」 -の3種ごとに独立して記録される.……のときにどのようにボックスが配置されるか -は,Gitリポジトリ内の \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を -参照してほしい. +の3種ごとに独立して記録される.参考として,Gitリポジトリ内の + \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を挙げておく. \end{cslist} % @@ -3022,7 +3147,7 @@ Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ %<*ja> \subsection{組方向の取得} 「現在の組方向」や「番のボックスの組方向」は, -\pTeX では\cs{ifydir} や \cs{ifybox} といった条件判断文を使って +\pTeX では \cs{ifydir} や \cs{ifybox} といった条件判断文を使って 判断することができた. しかし,\LuaTeX-jaはあくまでも\TeX マクロとLuaコードで 記述されており,それでは新たな条件判断命令を作るのは難しい. @@ -3043,7 +3168,7 @@ Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ \end{center} \begin{LTXexample}[width=0.3\textwidth] -\leavevmode\def\DIR{\ltjgetparameter{direction}} +\leavevmode\def\DIR{\ltjgetparameter{ direction}} \hbox{\yoko\DIR}, \hbox{\tate\DIR}, \hbox{\dtou\DIR}, \hbox{\utod\DIR}, \hbox{\tate$\hbox{tate math: \DIR}$} @@ -3052,12 +3177,18 @@ Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ \end{LTXexample} これらを用いれば,例えば -\pTeX の \cs{ifydir}, \cs{iftbox200} と同等の条件判断を -\begin{verbatim} +\pTeX の \cs{ifydir},~\cs{ifybox200} と同等の条件判断を +\begin{lstlisting} \ifnum\ltjgetparameter{direction}=4 -\ifnum\ltjgetparameter{boxdir}{200}=3 -\end{verbatim} +\ifnum\ltjgetparameter{boxdir}{200}=4 +\end{lstlisting} のように行うことができる. +\cs{iftdir} は少々面倒であるが +\begin{lstlisting} +\ifnum\numexpr + \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3 +\end{lstlisting} +とすればよい. % %<*en> @@ -3065,10 +3196,11 @@ Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ To cope with multiple directions, the following primitives are overridden by \LuaTeX-ja, using~\verb+\protected\def+. \begin{cslist}[style=standard] - \item[\cs{unhbox}\textrm{, }\cs{unvbox}] + \item[\cs{unhbox}\textrm{, }\cs{unvbox}\textrm{, }\cs{unhcopy}\textrm{, }\cs{unvcopy}] \item[\cs{vadjust}\{\}] + \item[\cs{insert}\{\}] \item[\cs{lastbox}] - \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] + \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] \item[\cs{vcenter}] \end{cslist} % @@ -3079,18 +3211,21 @@ overridden by \LuaTeX-ja, using~\verb+\protected\def+. \ \verb+\protected\def+ により再定義してある. \begin{cslist} - \item[\cs{unhbox}\textrm{, }\cs{unvbox}] + \item[\cs{unhbox}\textrm{, }\cs{unvbox}\textrm{, }\cs{unhcopy}\textrm{, }\cs{unvcopy}] ボックスの組方向が現在のリストと異なる場合は事前にエラーメッセージを出力する. \pTeX と異なり,エラーを無視して無理矢理 \cs{unhbox}, \cs{unvbox} を 続行させることもできるが,その場合の組版結果は保証しない. \item[\cs{vadjust}\{\}] 一旦プリミティブ本来の挙動を行う.その後,の組方向が 周囲の垂直リストの組方向と一致しない場合にエラーを出力し, 該当の \cs{vadjust} を無効にする. + \item[\cs{insert}\{\}] + 一旦プリミティブ本来の挙動を行い,その後内の各ボックス・罫線の直前に組方向を示 + すdirection whatsitを挿入する. \item[\cs{lastbox}] ボックスの「中身」を現在の組方向に合わせるためのノード - (\textit{dir\_node}という)を必要ならば除去し, + (\textit{dir\_box}という)を必要ならば除去し, 正しく「中身」のボックスが返されるように前処理をする. \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] - 一方,こちらでは必要に応じて\textit{dir\_node}を作成する前処理を追加している. + 一方,こちらでは必要に応じて\textit{dir\_box}を作成する前処理を追加している. \end{cslist} % @@ -3109,7 +3244,7 @@ so TrueType/OpenType fonts with features can be used for Japanese fonts: % %<*ja> フォントを(横組用)和文フォントとして読み込むためには,\cs{jfont} を -\cs{font} プリミティブの代わりに用いる. +\ \cs{font} プリミティブの代わりに用いる. \cs{jfont} の文法は \cs{font} と同じである. \LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので, TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる @@ -3138,14 +3273,14 @@ causes a error. We denote control sequences which are defined in \paragraph{JFM} %<*en> -As noted in Introduction, a JFM has measurements of characters and +a JFM has measurements of characters and glues/kerns that are automatically inserted for Japanese typesetting. The structure of JFM will be described in the next subsection. At the calling of \cs{jfont}, you must specify which JFM will be used for this font by the following keys: % %<*ja> -「はじめに」の節で述べたように,JFMは文字と和文組版で自動的に挿入される +JFMは文字と和文組版で自動的に挿入される グルー/カーンの寸法情報を持っている.JFMの構造は次の節で述べる. \cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで 指定する必要がある: @@ -3153,42 +3288,54 @@ which JFM will be used for this font by the following keys: \begin{table}[t] -%\caption{Differences between JFMs shipped with \LuaTeX-ja} -%\caption{\LuaTeX-ja に同梱されている JFM の違い} +%\caption{Differences between horizontal JFMs shipped with \LuaTeX-ja} +%\caption{\LuaTeX-ja に同梱されている横組用JFMの違い} %\medskip \label{tab-difjfm} \ltjsetparameter{jacharrange={+3}} \centering\small -\def\r#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 14.43324pt \g -\setbox0=\vtop{\hsize=7\zw\noindent ◆◆◆◆◆◆◆ -ある日モモちゃんがお使いで迷子になって泣きました.}\copy0 -\vrule height 0pt depth \dp0}} -\def\s#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 14.43324pt \g -\setbox0=\vtop{\hsize=7\zw\noindent ちょっと!何}\copy0}} -\def\t#1{{\jfont\g=file:KozMinPr6N-Regular.otf:jfm=#1 at 19.24432pt \g -\setbox0=\hbox{漢}% -\vrule width 0.4pt height\ht0 depth\dp0\kern-.2pt\copy0 -\kern-\wd0\vrule width\wd0height .2pt depth .2pt -\kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}% -\kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}% -\kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}} -\begin{tabular}{rccc} -\toprule -&\tt jfm-ujis.lua&\tt jfm-jis.lua&\tt jfm-min.lua\\ -\midrule -%Example~1~\cite{min10} -%例1~\cite{min10} -&\r{ujis}&\r{jis}&\r{min}\\ -%Example~2 -%例2 -&\s{ujis}&\s{jis}&\s{min}\\ -Bounding Box&\t{ujis}&\t{jis}&\t{min}\\ -\bottomrule -\end{tabular} +\def\r#1#2{% + \hbox{\Large\vrule + \parbox[b]{7\zw}{% + \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent + ◆◆◆◆◆◆◆ + ある日モモちゃんがお使いで迷子になって泣きました. + }\vrule}} +\def\s#1#2{% + \Large + \parbox[b]{7\zw}{% + \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent + ちょっと!何 + }} +\def\t#1#2#3{\hbox to 0pt{\hss% + \setbox0=\hbox{\addjfontfeatures{YokoFeatures={JFM=#1}}\huge #3}% + \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0 + \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt + \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}% + \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}% + \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}} +{\Large\tabcolsep0pt +\begin{tabular}{m{8\zw}m{8\zw}m{8\zw}} +\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{jis}{black}& +\leavevmode\hbox to 0pt{\r{jis}{black}\hss}\r{min}{red}& +\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{min}{red}\\ +\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{jis}{black}& +\leavevmode\hbox to 0pt{\s{jis}{black}\hss}\s{min}{red}& +\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{min}{red}\\ +\leavevmode\qquad\t{ujis}{blue}{漢}\t{jis}{black}{漢}\qquad + \t{ujis}{blue}{っ}\t{jis}{black}{っ}& +\leavevmode\qquad\t{jis}{black}{漢}\t{min}{red}{漢}\qquad + \t{jis}{black}{っ}\t{min}{red}{っ}& +\leavevmode\qquad\t{ujis}{blue}{漢}\t{min}{red}{漢}\qquad + \t{ujis}{blue}{っ}\t{min}{red}{っ}\\ +\end{tabular}\par} + +(\textcolor{blue}{Blue: \texttt{jfm-ujis.lua}}, +\textcolor{black}{Black: \texttt{jfm-jis.lua}}, +\textcolor{red}{Red: \texttt{jfm-min.lua}}) \ltjsetparameter{jacharrange={-3}} \end{table} - \begin{cslist} \item[jfm=] %<*en> @@ -3234,14 +3381,16 @@ The following JFMs are shipped with \LuaTeX-ja: % %<*ja> \item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用TFM - である \verb+min10.tfm+ に相当する. +(\verb+min10.tfm+)に相当し,行末で文字が揃うようにするために「っ」など一部の文字幅が変わっ + ている.\verb+min10.tfm+ については\cite{min10}が詳しい. % \end{description} %<*en> The difference among these three~JFMs is shown in Table~\ref{tab-difjfm}. % %<*ja> -これら3つのJFMの違いは表\ref{tab-difjfm}に示した. +これら3つのJFMの違いは表\ref{tab-difjfm}に示した.表中の文例の一部には, +\cite{min10}の図3,~4のものを用いた. % \begin{figure} @@ -3324,10 +3473,10 @@ because of the compatibility with previous versions of \LuaTeX-ja. NFSS2用の命令(\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節)における指定では カーニング情報は標準で使用する}ことになっているようである. 言い換えれば,カーニング情報を使用しない設定にするには,面倒でも -\begin{verbatim} +\begin{lstlisting} \jfont\hoge=KozMinPr6N-Regular:jfm=ujis;-kern at 3.5mm \DeclareFontShape{JY3}{fuga}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;-kern}{} -\end{verbatim} +\end{lstlisting} のように,\texttt{-kern} という指定を自分で追加しなければいけない. \item 一方,\emph{\Pkg{luatexja-fontspec} の提供する \cs{setmainjfont}\ @@ -3362,35 +3511,93 @@ For example, the following example uses the standard JFM \texttt{jfm-ujis.lua}, letter-spacing and the width of italic correction are not correct: % \begin{LTXexample}[width=0.3\textwidth] -\jfont\E=file:KozMinPr6N-Regular.otf:extend=1.5;jfm=ujis;-kern +\jfont\E=KozMinPr6N-Regular:extend=1.5;jfm=ujis;-kern \E あいうえお -\jfont\S=file:KozMinPr6N-Regular.otf:slant=1;jfm=ujis;-kern +\jfont\S=KozMinPr6N-Regular:slant=1;jfm=ujis;-kern \S あいう\/ABC \end{LTXexample} %\subsection{\cs{tfont}} %\subsection{\cs{tfont} 命令} + +\begin{table}[t] +%\caption{Differences between vertical JFMs shipped with \LuaTeX-ja} +%\caption{\LuaTeX-ja に同梱されている縦組用 JFM の違い} +%\medskip +\label{tab-difjfm-tate} +\catcode`\<=12\catcode`\>=12 +\ltjsetparameter{jacharrange={+3}} +\small + +\def\r#1#2{% + \hbox{\tate\Large\vrule + \parbox{7\zw}{% + \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent + ◆◆◆◆◆◆◆ + ある日モモちゃんがお使いで迷子になって泣きました. + }\vrule}} +\def\s#1#2{% + \hbox{\tate\Large + \parbox{7\zw}{% + \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent + ちょっと!何 + }}} +\def\t#1#2#3{\hbox to 0pt{\hss% + \setbox0=\hbox{\addjfontfeatures{TateFeatures={JFM=#1}}\huge #3}% + \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0 + \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt + \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}% + \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}% + \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}} + +\begin{minipage}{.7\textwidth} +\centering +\leavevmode\hbox to 0pt{\r{ujisv}{blue}\hss}\r{tmin}{red}\quad +\leavevmode\hbox to 0pt{\s{ujisv}{blue}\hss}\s{tmin}{red}\quad +\raise4\zw\hbox{\tate\Large\t{ujisv}{black}{漢}\t{tmin}{red}{漢}\qquad + \t{ujisv}{black}{っ}\t{tmin}{red}{っ}} +\end{minipage}% +\begin{minipage}{.3\textwidth} +\textcolor{blue}{Blue: \texttt{jfm-ujisv.lua}}\\ +\textcolor{red}{Red: \texttt{jfm-tmin.lua}} +\end{minipage} +\ltjsetparameter{jacharrange={-3}} +\end{table} + %<*en> ... % %<*ja> \cs{tfont} はフォントを縦組用の和文フォントとして読み込む命令であり, -\cs{jfont} の文法は \cs{jfont} と同じである. +\cs{tfont} の文法は \cs{jfont} と同じである. \cs{tfont} で定義された縦組用和文フォントは, 以下の点が \cs{jfont} による横組用和文フォントとは異なる: \begin{itemize} - \item 出力時に,自動的に「\verb+vert+ feature相当」のグリフ置換が行われる. - これは,\Pkg{luaotfload}による各種featureのサポートとは全く別個に行われるもので, - いちいち \verb+vert+ featureを指定する必要はない. -\begin{verbatim} -\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujis % OK -\end{verbatim} + \item 自動的に \texttt{vert}, \texttt{vrt2} の両OpenType featureが有効化される. +但し,以下の例の3行目に示すように,明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の +有効・無効を指定した場合は別である. +\begin{lstlisting} +\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujisv + % vert and vrt2 are automatically activated +\tfont\T=file:KozMinPr6N-Regular.otf:jfm=ujisv;-vert % vert and vrt2 are not activated +\end{lstlisting} \item \ref{ssec-math}節で述べる,数式中の和文フォントには縦組用和文フォントは指定できない. - \item \texttt{jfm=}\ の部分には縦組用JFMを指定する.現在同梱されているのは, -OTFパッケージの \verb+upnmlminr-v.tfm+ を元にした\texttt{jfm-ujisv.lua}\ のみである. + \item \texttt{jfm=}\ の部分には縦組用JFMを指定する. +以下の縦組用JFMが\LuaTeX-jaには同梱されており,違いを表\ref{tab-difjfm-tate}に示した. +\begin{description} +\item[\tt jfm-ujisv.lua] \LuaTeX-jaの標準縦組用JFMである.このJFMは\upTeX で + 用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-v.tfm+ を + 元にしている. +\item[\tt jfm-tmin.lua] \pTeX に同梱されているデフォルトの和文用縦組TFM + である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に + 「っ」など一部の文字幅が狭められている. +\end{description} \end{itemize} + +なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン +ト・縦組用和文フォントの定義が可能であったが,\LuaTeX-jaではそうでないので注意. % %\subsection{Prefix \texttt{psft}} @@ -3401,9 +3608,9 @@ Besides ``\texttt{file:}''\ and ``\texttt{name:}''\ prefixes which are introduced in the \Pkg{luaotfload} package, \LuaTeX-ja adds ``\texttt{psft:}''\ prefix in \cs{jfont} (and~\cs{font}), to specify a ``name-only'' Japanese font which -will not be embedded to PDF. Typical use of this prefix is to specify -standard, non-embedded Japanese fonts, namely, ``Ryumin-Light'' and -``GothicBBB-Medium''. +will not be embedded to PDF. +Note that these non-embedded fonts under current \LuaTeX\ has Identity-H encoding, +and this violates the standard ISO32000-1:2008~(\cite{pdfstd}). \emph{OpenType font features, such as ``{\tt +jp90}'', have no meaning in name-only fonts using ``{\tt psft:}''\ prefix, @@ -3417,8 +3624,10 @@ with \texttt{psft} prefix, because they are only simple linear transformations. \cs{jfont}(と \cs{font} プリミティブ)では \texttt{psft:}プリフィックスを用いることができる. このプリフィックスを用いることで,PDFには埋め込まれない「名前だけの」 -和文フォントを指定することができる.「標準的な」非埋め込み和文フォント, -つまり「Ryumin-Light」「GothicBBB-Medium」の指定でこのプリフィックスが使われる. +和文フォントを指定することができる. +なお,現行の\LuaTeX で非埋め込みフォントを作成するとPDF内でのエンコーディングが +Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準拠になってしまう +ので注意してほしい. \emph{\texttt{psft} プリフィックスの下では \texttt{+jp90} などのOpenType font featureの効力はない. @@ -3499,9 +3708,9 @@ Please contact the LuaTeX-ja project team. \label{ssec-jfm-str} %A JFM file is a Lua script which has only one function call: %JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである: -\begin{verbatim} +\begin{lstlisting} luatexja.jfont.define_jfm { ... } -\end{verbatim} +\end{lstlisting} %<*en> Real data are stored in the table which indicated above by \verb+{ ... }+. So, the rest of this subsection are devoted to describe the @@ -3534,14 +3743,22 @@ JFMの書字方向.\texttt{'yoko'}(横組)と \texttt{'tate'}(縦組) %(必須) %The amount of the length of the ``full-width''. -%「全角幅」の長さ.この量が \cs{zw} の長さを決定する. +%<*ja> +「全角幅」の長さ.この量が \cs{zw} の長さとなる.\pTeX では +「全角幅」\texttt{1zw} は「文字クラス0の文字」の幅と決められていたが, +\LuaTeX-jaではここで指定する. +% \item[zh=] %(required) %(必須) %The amount of the ``full-height'' (height + depth). -%「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう. +%<*ja> +「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう. +\pTeX では 「全角高さ」\texttt{1zh} は「文字クラス0の文字」の高さと深さの和と決められていたが, +\LuaTeX-jaではここで指定する. +% \item[kanjiskip=\{, , \}] %(optional) @@ -3623,7 +3840,7 @@ This field is a list of characters which are in this character \item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+}」のような,文字それ自体の後にアスタリスクをつけたもの \item いくつかの「仮想的な文字」(後に説明する) \end{itemize} -% +% \item[width=, height=, depth=, italic=] %(required) @@ -3656,7 +3873,7 @@ These fields are for adjusting the position of the ``real'' glyph. Legal 3~fields are omitted, \texttt{left} and \texttt{down} are treated as~0, and \texttt{align} field is treated as \texttt{'left'}. -The effects of these 3~fields are indicated in +The effects of these 3~fields are indicated in Figures \ref{fig-pos}~and~\ref{fig-pos-tate}. % %<*ja> @@ -3687,10 +3904,10 @@ when the current character class is the class for opening delimiters'. \begin{minipage}{0.4\textwidth}% \begin{center}\unitlength=10pt\small \begin{picture}(15,12)(-1,-4) -\color{black!10!white}% jfm +\color{b_gray}% jfm \put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength} -\color{red!20!white}% step1 +\color{b_pink}% step1 \put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} \color{red}% real glyph @@ -3700,7 +3917,7 @@ when the current character class is the class for opening delimiters'. \put(-1,5.5){\line(1,0){6}} \put(-1,-4){\line(1,0){6}} -\color{green!20!white}% real glyph +\color{b_green}% real glyph \put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} \color{black}% jfm @@ -3713,7 +3930,7 @@ when the current character class is the class for opening delimiters'. \put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}} \put(6,0.2){\makebox(0,0)[b]{\texttt{width}}} -\color{green!50!black}% step1 +\color{green}% step1 \thicklines \put(3,0){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}} \put(9,0){\line(0,1){7}\line(0,-1){2.5}} @@ -3738,12 +3955,12 @@ when the current character class is the class for opening delimiters'. \end{minipage}% \begin{minipage}{0.6\textwidth}% %<*en> -Consider a Japanese character node which belongs to +Consider a Japanese character node which belongs to a character class whose the \texttt{align} field is \texttt{'middle'}. % %<*ja> -\texttt{align}フィールドの値が\texttt{'middle'}であるような文字クラスに属する +\texttt{align}フィールドの値が \texttt{'middle'} であるような文字クラスに属する 和文文字ノードを考えよう. % \begin{itemize} @@ -3762,7 +3979,7 @@ Since the \texttt{align} field is \texttt{'middle'}, the ``real'' glyph is centered horizontally (the green rectangle) first. % %<*ja> -\texttt{align}フィールドは\texttt{middle}なので, +\texttt{align}フィールドは \texttt{'middle'} なので, 実際のグリフの位置はまず水平方向に中央揃えしたものとなる(緑色の長方形). % \item @@ -3789,10 +4006,10 @@ Furthermore, the glyph is shifted according to values of fields \begin{minipage}{0.4\textwidth}% \begin{center}\unitlength=10pt\small \begin{picture}(15,12)(-6,0) -\color{black!10!white}% jfm +\color{b_gray}% jfm \put(-6,0){\vrule width 12\unitlength height 11\unitlength} -\color{red!20!white}% real glyph +\color{b_pink}% real glyph \put(-6.5,5.5){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} \color{red}% real glyph @@ -3802,7 +4019,7 @@ Furthermore, the glyph is shifted according to values of fields \put(-6.5,11.5){\line(1,0){8}} \put(-6.5,2.5){\line(1,0){8}} -\color{green!20!white}% step1 +\color{b_green}% step1 \put(-4,3){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} \color{black}% jfm @@ -3815,7 +4032,7 @@ Furthermore, the glyph is shifted according to values of fields \put(-3,10.8){\makebox(0,0)[t]{\texttt{depth}}} \put(0.2,5.5){\makebox(0,0)[l]{\texttt{width}}} -\color{green!50!black}% step1 +\color{green}% step1 \thicklines \put(-4,3){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}} \put( 4,3){\line(0,1){6}\line(0,-1){3}} @@ -3843,17 +4060,16 @@ Furthermore, the glyph is shifted according to values of fields (\dots) % %<*ja> -\texttt{align}フィールドの値が\texttt{'right'}であるような文字クラスに属する +\texttt{align}フィールドの値が \texttt{'right'} であるような文字クラスに属する 和文文字を考えよう. \begin{itemize} \item -実際のグリフの「垂直位置」は,ベースラインが文字の物理的な左右方向の中央を通る +実際のグリフの「垂直位置」は,まずベースラインが文字の物理的な左右方向の中央を通る 位置となる. -\item -また,この場合\texttt{align}フィールドは\texttt{middle}なので, +\item +また,この場合 \texttt{align} フィールドは \texttt{'right'} なので, 「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形). -その際,高さ・深さは,実フォントのascender, descenderの値が使われる. -\item +\item その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる のは横組用和文フォントと変わらない. \end{itemize} @@ -3948,93 +4164,79 @@ using \texttt{jfm-test.lua} which contains the following: % \begin{lstlisting} [0] = { - chars = { '漢', 'ヒ*' }, + chars = { '漢' }, align = 'left', left = 0.0, down = 0.0, width = 1.0, height = 0.88, depth = 0.12, italic=0.0, }, [2000] = { - chars = { '。', '、*', 'ヒ' }, + chars = { '。', 'ヒ' }, align = 'left', left = 0.0, down = 0.0, width = 0.5, height = 0.88, depth = 0.12, italic=0.0, }, \end{lstlisting} -%句点「。」の幅は二分であるので +%ここで,次のような入力とその実行結果を考える: %Now consider the following input/output: \begin{LTXexample}[width=0.3\textwidth] -\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert -\setbox0\hbox{\a 。\inhibitglue 漢} +\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid +\setbox0\hbox{\a ヒ漢} \the\wd0 \end{LTXexample} %<*en> -Now we look why the above source outputs 20\,pt, not 15\,pt. +Now we look why the above source outputs 15\,pt. \begin{enumerate} -\item The ideographic full stop ``。'' is converted to its vertical form ``\char"FE12''~(\texttt{U+FE12}), %" -by \verb+vert+ feature. -\item The character class of ``\char"FE12'' is zero, hence its width is fullwidth.%" -\item The character class of ``漢'', hence its width is fullwidth. -\item \cs{inhibitglue} makes that no glue will be inserted between ``。'' and ``漢''. -\item Hence the width of \cs{hbox} equals to 20\,pt. +\item The character ``ヒ'' is converted to its half width form ``ヒ'' by \verb+hwid+ feature. +\item According to the JFM, the character class of ``ヒ'' is 2000, hence its width is halfwidth. +\item The character class of ``漢'' is zero, hence its width is fullwidth. +\item Hence the width of \cs{hbox} equals to 15\,pt. \end{enumerate} -This example shows that the character class of a character is determined \emph{after +This example shows that the character class of a character is generally determined \emph{after applying font features by \Pkg{luaotfload}}. % %<*ja> -では,全角二分(15.0\,pt)となるのが自然……と思うかもしれないが,上の実行結果では20\,ptとなっている. -それは以下の事情によるものである: +上記の出力結果が,15\,ptとなっているのは理由によるものである: \begin{enumerate} -\item \verb+vert+ featureによって句点(\texttt{U+3002})が縦組用のグリフと置き換わる(\Pkg{luaotfload} による処理). -\item この縦組用句点のグリフは \texttt{U+FE12} であるため,その文字クラスは0となる. -\item 以上により文字クラス0とみなされるため,結果として「。」の幅は全角だと認識されてしまう. +\item \verb+hwid+ featureによって「ヒ」が半角幅のグリフ「ヒ」と置き換わる(\Pkg{luaotfload} による処理). +\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である. +\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される. \end{enumerate} この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の後に行われる}ことを 示している. % %<*en> -However, a starred specification like ``\texttt{'、*'}'' changes the rule. +However, ... Consider the following input: % %<*ja> -但し,「\texttt{'、*'}」のようにアスタリスクつきの指定があると, +但し,JFMによって決まる置換後のグリフの文字クラスが0である場合は, 状況は異なる. % \begin{LTXexample}[width=0.3\textwidth] \jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert -\a 漢、\inhibitglue 漢 +\a 漢。\inhibitglue 漢 \end{LTXexample} %<*en> -Here, the character class of the ideographic comma ``、''~(\texttt{U+3001}) is determined +Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined as following: \begin{enumerate} -\item As the case of ``。'', the ideographic comma ``、'' is converted to its vertical - form ``\char"FE11''~(\texttt{U+FE11}).%" -\item The character class of ``\char"FE11'' is zero. -\item However, \LuaTeX-ja remembers that this ``\char"FE11'' is obtained from ``、'' by - font features. The character class of ``、'' is \emph{non-zero value}, namely, 2000. -\item Hence the ideographic comma ``、'' in above belongs the character class~2000. +\item As the case of ``ヒ'', the ideographic full stop ``。'' is converted to its vertical + form ``\char"FE12''~(\texttt{U+FE12}).%" +\item The character class of ``\char"FE12'' is \emph{zero}. +\item However, \LuaTeX-ja remembers that this ``\char"FE12'' is obtained from ``。'' by + font features. The character class of ``。'' is \emph{non-zero value}, namely, 2000. +\item Hence the ideographic full stop ``。'' in above belongs the character class~2000. \end{enumerate} % %<*ja> -ここで,読点「、」(\texttt{U+3001})の文字クラスは,以下のようにして決まる. +ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる. \begin{enumerate} -\item とりあえず句点の時と同じように,\Pkg{luaotfload} によって縦組用読点のグリフに置き換わる. -\item 置換後のグリフは \texttt{U+FE11} であり,そのままでは文字クラスは0と判定される. -\item ところが,JFMには「\texttt{'、*'}」指定があるので,置換前の横組用読点のグリフによって文字クラスを判定する. -\item 結果として,上の出力例中の読点の文字クラスは2000となる. +\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる. +\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される. +\item この場合,置換前の横組用句点のグリフによって文字クラスを判定する. +\item 結果として,上の出力例中の句点の文字クラスは2000となる. \end{enumerate} % -%<*ja> -なお,「\texttt{'\hbox{}ヒ*'}」のようにアスタリスクつきの指定があっても, -置換後のグリフで判定した文字クラスの値が0でなければ,そちらをそのまま作用する. -\begin{LTXexample}[width=0.3\textwidth] -\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid -\a 漢ヒひ -\end{LTXexample} -上の例では, -\texttt{hwid} featureにより,「ヒ」が半角の「ヒ」に置き換わるが, -文字クラスは「ヒ」の属する0\emph{ではなく},「ヒ」の属する2000となる. -% %\paragraph{仮想的な文字} %\paragraph{Imaginary characters} @@ -4093,9 +4295,9 @@ See Japanese version of this manual. \item JFM中の全ての数値を$1/0.962216$倍しておく. \item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする. \LaTeX でのフォント宣言なら,例えば次のように: -\begin{verbatim} +\begin{lstlisting} \DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{} -\end{verbatim} +\end{lstlisting} \end{itemize} \item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする (JFM中に単に書かなければよい). @@ -4158,12 +4360,18 @@ Table~\ref{tab-math} shows counterparts to \TeX's primitives for math font families. There is no relation between the value of \cs{fam} and that of \cs{jfam}; with appropriate settings, you can set both \cs{fam} and \cs{jfam} to the same value. +Here in the argument of \Param{jatextfont} etc.\ is +a control sequence which is defined by \cs{jfont}, i.e., +a \emph{horizontal} Japanese font. % %<*ja> \LuaTeX-jaの数式中での和文フォントの扱いも同様である. 表\ref{tab-math}は数式フォントファミリに対する \TeX のプリミティブと対応する ものを示している.\cs{fam} と \cs{jfam} の値の間には関係はなく, 適切な設定の下では \cs{fam} と \cs{jfam} の両方に同じ値を設定することができる. +\Param{jatextfont} 他の第2引数は,\cs{jfont} で定義された +\emph{横組用}和文フォントである.\cs{tfont} で定義された +\emph{縦組用}和文フォントを指定することは想定していない. % \begin{table}[!tb] @@ -4331,7 +4539,7 @@ JFMで指定されているそれぞれの値をスケーリングしたもの 間に入るものがkernであれば,このフィールドの値は\ \texttt{[$j$]=\{false, , \}} である. はkernを表すノードそのものである\footnote{% -本バージョンでは利用可能ならばノードのアクセス手法にdirect access +本バージョンではノードのアクセス手法にdirect access modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし か見えないことに注意. }. @@ -4339,6 +4547,10 @@ glueであれば,\texttt{[$j$]=\{false, , , \}} で はglueの長さを表すノードそのものであり, $\text{}=\textit{from\_jfm}+\text{}$である. \end{itemize} +\item[ascent\textrm{, }descent] +…… +\item[chars\_cbcache] +…… \end{cslist} % @@ -4477,8 +4689,8 @@ is the position of \verb+hpack_filter+ callback in the source of \LuaTeX, see Section~\ref{sec-para}. % %<*ja> -先に述べたように,\cs{ltjsetparameter} と \cs{ltjgetparameter} は -\LuaTeX-jaのほとんどのパラメータにアクセスするための命令である. +先に述べたように,\LuaTeX-jaのほとんどの内部パラメータにアクセスするには +\cs{ltjsetparameter} と \cs{ltjgetparameter} を用いる. \LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を 採用しない理由の一つは,\LuaTeX のソースにおける \verb+hpack_filter+ コールバックの位置にある.\ref{sec-para}章を参照. @@ -4534,8 +4746,8 @@ adopted in the whole paragraph or the whole hbox. % \end{itemize} -\begin{description}[font=\mdseries] -\item[\DParam{jcharwidowpenalty}\,=$^\ast$] [\cs{jcharwidowpenalty}]\ +\begin{cslist}[style=standard] +\item[\DParam{jcharwidowpenalty}\,=$^\ast$] [\cs{jcharwidowpenalty}]\ %<*en> Penalty value for suppressing orphans. This penalty is inserted just @@ -4569,9 +4781,9 @@ At the present version, the lowermost bit of indicates この文字の前に挿入/追加されるペナルティの量を指定する. 例えば閉じ括弧「〗」は絶対に行頭にきてはならないので, -\begin{verbatim} +\begin{lstlisting} \ltjsetparameter{prebreakpenalty={`〙,10000}} -\end{verbatim} +\end{lstlisting} と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい うわけではないができれば行頭にはきて欲しくない場合に,0と 10000の間の値を指定するのも有用であろう. @@ -4580,9 +4792,9 @@ At the present version, the lowermost bit of indicates Set a penalty which is inserted automatically before the character , to prevent a line starts from this character. For example, a line cannot started with one of closing brackets ``〗'', so \LuaTeX-ja sets -\begin{verbatim} +\begin{lstlisting} \ltjsetparameter{prebreakpenalty={`〙,10000}} -\end{verbatim} +\end{lstlisting} by default. % @@ -4683,7 +4895,7 @@ Note that parameters \Param{jaxspmode} and \Param{alxspmode} share a common tabl % %<*ja> \Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため, -これら2つのパラメータは互いの異名となっていることに注意する. +これら2つのパラメータは互いの別名となっていることに注意する. % \item[\DParam{autospacing}\,=] [\cs{autospacing}] @@ -4737,13 +4949,13 @@ The default value is \texttt{paverage}. \dots \item[\DParam{jacharrange}\,=] \item[\DParam{kansujichar}\,=\{, \}$^\ast$] [\cs{kansujichar}] -\item[\DParam{direction}\,=\ \hbox{\rm (always local)}]\ +\item[\DParam{direction}\,=\ \hbox{\rm (always local)}]\ %<*en> Assigning to this parameter has the same effect as \cs{yoko}~(if $\hbox{}=4$), \cs{tate}~(if $\hbox{}=3$), \cs{dtou}~(if $\hbox{}=1$) or \cs{utod}~(if $\hbox{}=11$). -If the argument is not one of 4,~3, 1~nor~11, +If the argument is not one of 4,~3, 1~nor~11, the behavior of this assignment is undefined. % %<*ja> @@ -4753,7 +4965,7 @@ the behavior of this assignment is undefined. 動作は未定義である. % -\end{description} +\end{cslist} \subsection{\cs{ltjgetparameter}} \label{ssec-getpar} @@ -5005,7 +5217,9 @@ With the help of this example, we remark the specification of \cs{inhibitglue}: simply ignored. % %<*ja> -\item \cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない. +\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{% + この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである. +}. 4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり, \cs{noindent} の時点で水平モードになるからである. % @@ -5062,9 +5276,9 @@ ignored. For example, if \cs{hoge} uses \texttt{jfm-ujis.lua}, the standard JFM of \LuaTeX-ja, then -\begin{verbatim} +\begin{lstlisting} \ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} -\end{verbatim} +\end{lstlisting} does \begin{quote} If the current Japanese font is \cs{hoge}, \texttt{U+3000}--\texttt{U+30FF} @@ -5096,9 +5310,9 @@ are typeset by \cs{piyo}. 例えば,\cs{hoge} のJFMが\LuaTeX-ja標準の \ \texttt{jfm-ujis.lua} であった場合, -\begin{verbatim} +\begin{lstlisting} \ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} -\end{verbatim} +\end{lstlisting} は「\cs{hoge} を利用しているとき, \texttt{U+3000}--\texttt{U+30FF}と 文字クラス1(開き括弧類)中の文字だけは \cs{piyo} を用いる」 @@ -5448,7 +5662,7 @@ by \cs{input}. %<*en> As described in Subsection~\ref{ssec-fontspec}, this optional package provides the counterparts for several commands defined in the -\Pkg{fontspec} package. +\Pkg{fontspec} package (requires \Pkg{fontspec}~v2.4). In addition to OpenType font features in the original \Pkg{fontspec}, the following ``font features'' specifications are allowed for the commands of Japanese version: @@ -5456,6 +5670,8 @@ the commands of Japanese version: %<*ja> \ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec} パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する. +\emph{以下に述べる和文版の命令の説明は \Pkg{fontspec}~v2.4 使用時にのみ当てはまる.} + \Pkg{fontspec}パッケージで指定可能な各種font featureに加えて,和文版のコマンドには 以下の``font feature''を指定することができる: % @@ -5473,7 +5689,7 @@ See Subsections~\ref{ssec-jfont} and \ref{ssec-psft} for details The \texttt{CID} key is effective only when with \texttt{NoEmbed} described below. The same JFM cannot be used in both horizontal Japanese fonts and - vertical Japanese fonts, hence the \texttt{JFM} key + vertical Japanese fonts, hence the \texttt{JFM} key will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. % %<*ja> @@ -5484,7 +5700,7 @@ will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. \texttt{CID} キーは下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である. また,横組用JFMと縦組用JFMは共用できないため,実際に \texttt{JFM} キーを用いる際は -後に述べる\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ の中で用いる +後に述べる\ \texttt{YokoFeatures} キーや \texttt{TateFeatures}\ の中で用いる ことになる. % @@ -5505,22 +5721,27 @@ will not be embedded in the output PDF file. See Subsection~\ref{ssec-psft}. TateFeatures={Color=00007F}, TateFont=KozGoPr6N-Regular ]{KozMinPr6N-Regular} -\parbox{2\zw}[b]{横組のテスト} -\parbox{2\zw}[b]{縦組のテスト} +\hbox{\yoko 横組のテスト} +\hbox{\tate 縦組のテスト} \end{LTXexample} %\caption{\texttt{TateFeatures} 等の使用例} %\caption{An example of \texttt{TateFeatures} etc.} \label{fig:yokotate-fontspec} \end{figure} + \item[TateFeatures=\{\}\textrm{, }TateFont=] % ... %<*ja> +縦組において使用されるフォントや,縦組においてのみ適用されるfeature達を +指定する.使用例は図\ref{fig:yokotate-fontspec}参照. % \item[YokoFeatures=\{\}] % ... %<*ja> +横組においてのみ適用されるfeature達を +指定する.使用例は図\ref{fig:yokotate-fontspec}参照. % @@ -5587,10 +5808,10 @@ A demonstrarion is shown in Figure~\ref{fig:altkanji-fontspec}. \paragraph{Remark on \texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} keys} In \texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures} keys, one cannot specify per-shape settings such as \texttt{BoldFeatures}. -For example, +For example, \begin{lstlisting} AltFont = { - { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, + { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, Range="3000-"30FF, BoldFeatures={Color=007F00} } } \end{lstlisting} @@ -5605,7 +5826,7 @@ BoldFeatures = { \end{lstlisting} On the other hand, \texttt{YokoFeatures}, \texttt{TateFeatures} and \texttt{TateFont} -keys can be specified in each list in the \texttt{AltFont} key. Also, +keys can be specified in each list in the \texttt{AltFont} key. Also, one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatures}. % %<*ja> @@ -5616,7 +5837,7 @@ one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatu 例えば. \begin{lstlisting} AltFont = { - { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, + { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, Range="3000-"30FF, BoldFeatures={Color=007F00} } } \end{lstlisting} @@ -5675,9 +5896,9 @@ but please remind remarks below. %<*ja> このパッケージは,\texttt{ajmacros.sty}(\Pkg{otf}パッケージ付属のマクロ集,井上浩一氏作)から -漢字コードをUTF8にしたり,plain \LuaTeX でも利用可能するという +漢字コードをUTF8にしたり,plain \LuaTeX でも利用可能にするという 修正を加えた \texttt{luatexja-ajmacros.sty} も自動的に読み込む. -そのため,マクロ集にある \verb+\aj半角+ などのマクロもそのまま使用可能である. +そのため,\texttt{ajmacros.sty} マクロ集にある \verb+\aj半角+ などのマクロもそのまま使用可能である. % %\paragraph{Remarks} @@ -5753,9 +5974,9 @@ IVSに対応してはいないようである.これらのパッケージで 有効にするには,\Pkg{luatexja-otf}パッケージを読み込んだ上で以下の命令を実行する% \footnote{この命令を2回以上実行しても意味がない.}:} % -\begin{verbatim} +\begin{lstlisting} \directlua{luatexja.otf.enable_ivs()} -\end{verbatim} +\end{lstlisting} % すると,上の命令を実行した箇所以降では,以下のようにIVSによる字形指定が有効となる. % After executing the command above, you can use IVS like the following: \begin{LTXexample} @@ -5819,7 +6040,7 @@ Lua・\TeX コードが参考になるだろう. \def\outbox#1{{\Large% \ltjsetparameter{kanjiskip=0pt plus .2\zw minus .2\zw}% \setbox\gridbox=\hbox to 20\zw{\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb}% - \hbox{\textcolor{cyan!50!white}{\copy\gridbox}\hskip-20\zw% + \hbox{\textcolor{cyan}{\copy\gridbox}\hskip-20\zw% \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}% }} @@ -5998,7 +6219,8 @@ among the line-head form, the line-middle form, and the line-end form. \begin{itemize} \item 組方向オプション \texttt{}(横組),\texttt{}(縦組), \texttt{}\ の他に\ \texttt{}(dtou方向),\texttt{}(utod方向)を追加した. -\texttt{} と \texttt{} の違いは,\texttt{} が周囲の組方向が縦組のときにしか意味を持たない +\texttt{} と \texttt{} の違いは,\texttt{} が(\Pkg{plext} パッケージと同様に) +周囲の組方向が縦組のときにしか意味を持たない のに対し,\texttt{} にはそのような制限がないことである. \item \Pkg{plext} パッケージでは,表組(\texttt{tabular} 環境,\texttt{align} 環境等)や @@ -6014,9 +6236,10 @@ among the line-head form, the line-middle form, and the line-end form. (中身の最後が罫線などの時は,ボックスの下端)に一致するように配置する. \item それ以外のときは,ボックスの中央が「数式の軸」に一致するように配置する. \end{itemize} -特に縦組の場合,「数式の軸」は…… - \item 連数字用命令 \cs{rensuji} における位置合わせオプション…… + \item 連数字用命令 \cs{rensuji} における位置合わせオプション \texttt{[l]}, \texttt{[c]}, + \texttt{[r]} の挙動を若干変更した. + \end{itemize} } % @@ -6032,11 +6255,11 @@ counterpart of the \Pkg{plext} package. \begin{cslist} \item[tabular\textrm{, }array\textrm{, }minipage環境] これらの環境は, -\begin{verbatim} +\begin{lstlisting} \begin{tabular}[pos]{table spec} ... \end{tabular} \begin{array}[pos]{table spec} ... \end{array} \begin{minipage}[pos]{width} ... \end{minipage} -\end{verbatim} +\end{lstlisting} のように,組方向オプション \texttt{\} が拡張されている. 既に述べたように,組方向オプションに指定できる値は以下の5つであり, それ以外を指定した時や無指定時は周囲の組方向と同じ組方向になる. @@ -6057,11 +6280,11 @@ counterpart of the \Pkg{plext} package. 中央揃え(それ以外)される. \item[picture環境] 図表作成に用いる \texttt{picture} 環境も, -\begin{verbatim} +\begin{lstlisting} \begin{picture}(x_size, y_size)(x_offset,y_offset) ... \end{picture} -\end{verbatim} +\end{lstlisting} と組方向が指定できるように拡張されている. $x$成分の増加方向は字送り方向,$y$成分の増加方向は行送り方向の\emph{反対方向}となる. \Pkg{plext} パッケージと同様に @@ -6084,11 +6307,11 @@ $x$成分の増加方向は字送り方向,$y$成分の増加方向は行送 \item[tabular\textrm{, }array\textrm{, }minipage\textrm{ environments}] These environments are extended by \texttt{\}, which specifies the direction, as follows: -\begin{verbatim} +\begin{lstlisting} \begin{tabular}[pos]{table spec} ... \end{tabular} \begin{array}[pos]{table spec} ... \end{array} \begin{minipage}[pos]{width} ... \end{minipage} -\end{verbatim} +\end{lstlisting} This option permits one of the following five values. If none of them is specified, the direction inside the environment is same as that outside the enviromnent. \begin{description} @@ -6316,7 +6539,7 @@ Glues from an italic correction, but already processed in the insertion process 連続した場合でも「ボックスの境界」が識別できるようになっている. % -\attr{ltj@kcat$i$} +\attr{ltj@kcat\,$i$} %<*en> Where $i$~is a natural number which is less than~7. These 7~attributes store bit~vectors indicating which character block is regarded as a block of \textbf{JAchar}s. @@ -6329,13 +6552,13 @@ $i$は7より小さい自然数. \attr{ltj@dir} %<*ja> -ボックスにおける組方向を示す.通常のボックスでは +\textit{direction}~whatsit(後述)において組方向を示すために,あるいは\textit{dir\_box}の + 組方向を用いる.\textit{direction}~whatsitにおいては値は \begin{quote} - \textit{dir\_dtou} (1), \textit{dir\_tate} (3), + \textit{dir\_dtou} (1), \textit{dir\_tate} (3), \textit{dir\_yoko} (4), \textit{dir\_utod} (11) \end{quote} -のいずれかであり,これらに次を加えた値をとるボックスが作られることもあ - る(\ref{sec-dir-imp}章参照). +のいずれかであり,\textit{dir\_box}ではこれらに次を加えた値をとる(\ref{sec-dir-imp}章参照). % \begin{description} \item[\textit{dir\_node\_auto} (128)] @@ -6630,9 +6853,9 @@ store some data which obeys the grouping of \TeX. %<*en> The following function can be used to store data into a stack: -\begin{verbatim} +\begin{lstlisting} luatexja.stack.set_stack_table(index, data) -\end{verbatim} +\end{lstlisting} Any values which except \texttt{nil}~and~NaN are usable as \textit{index}. However, a user should use only negative integers or strings as \textit{index}, since natural numbers are used by \LuaTeX-ja itself. @@ -6642,9 +6865,9 @@ is determined by \texttt{luatexja.isglobal} % %<*ja> スタックに値を設定するには,以下のLua関数を呼び出せば良い: -\begin{verbatim} +\begin{lstlisting} luatexja.stack.set_stack_table( index, data) -\end{verbatim} +\end{lstlisting} 直感的には,スタックテーブル中のインデックス\textit{index}の値を\textit{data}にする,という意味である. \textit{index}の値としては \texttt{nil} とNaN以外の任意の値を使えるが, 自然数は\LuaTeX-jaが使用する(将来の拡張用も含む)ので, @@ -6655,18 +6878,18 @@ luatexja.stack.set_stack_table( index, data) %<*en> Stored data can be obtained as the return value of -\begin{verbatim} +\begin{lstlisting} luatexja.stack.get_stack_table(index, default, level) -\end{verbatim} +\end{lstlisting} where \textit{level} is the stack level, which is usually the value of \verb+\ltj@@stack+, and \textit{default} is the default value which will be returned if no values are stored in the stack table whose level is \textit{level}. % %<*ja> スタックの値は, -\begin{verbatim} +\begin{lstlisting} luatexja.stack.get_stack_table( index, default, level) -\end{verbatim} +\end{lstlisting} の戻り値で取得できる.\textit{level}はスタックレベルであり, 通常は \verb+\ltj@@stack+ の値を指定することになるだろう. \textit{default}はレベル\textit{level}のスタックに値が設定されていなかった場合に @@ -6713,9 +6936,9 @@ which is offered by the \Pkg{xkeyval} package. Hence, to add a key in \cs{ltjsetparameter}, one only have to add a key whose prefix is \texttt{ltj} and whose family is \texttt{japaram}, as the following. -\begin{verbatim} +\begin{lstlisting} \define@key[ltj]{japaram}{...}{...} -\end{verbatim} +\end{lstlisting} \cs{ltjsetparameter}~and~\cs{ltjglobalsetparameter} automatically sets \texttt{luatexja.isglobal}. Its meaning is the following. @@ -6738,9 +6961,9 @@ but also by the value of \cs{globaldefs}. このため,\cs{ltjsetparameter} に指定可能なパラメータを追加するには, を \texttt{ltj},を \texttt{japaram} としたキーを -\begin{verbatim} +\begin{lstlisting} \define@key[ltj]{japaram}{...}{...} -\end{verbatim} +\end{lstlisting} のように定義すれば良いだけである. なお,パラメータ指定がグローバルかローカルかどうかを示す \texttt{luatexja.isglobal} が, \begin{align} @@ -6760,7 +6983,7 @@ but also by the value of \cs{globaldefs}. For parameters that do not need additional arguments, one only have to define a function in the table \verb+luatexja.unary_pars+. -For example, with the following function, +For example, with the following function, \verb+\ltjgetparameter{hoge}+ returns a \emph{string} \texttt{42}. \begin{lstlisting}[numbers=left] function luatexja.unary_pars.hoge (t) @@ -6781,11 +7004,11 @@ end Here the first argument $t$ is the stack level, as before. The second argument $c$ is just the second argument of \cs{ltjgetparameter}. -For parameters that need an additional argument, one also have to +For parameters that need an additional argument, one also have to execute the \TeX\ code like -\begin{verbatim} +\begin{lstlisting} \ltj@@decl@array@param{fuga} -\end{verbatim} +\end{lstlisting} to indicate that ``the parameter \texttt{fuga} needs an additional argument''. % %<*ja> @@ -6813,9 +7036,9 @@ end 引数$t$は,先に述べた通りのスタックレベルである.一方,引数$c$は\ \cs{ltjgetparameter} の第2引数を表す数値である. しかしこれだけでは駄目で, -\begin{verbatim} +\begin{lstlisting} \ltj@@decl@array@param{fuga} -\end{verbatim} +\end{lstlisting} を実行し,\TeX インターフェース側に 「\verb+\ltjgetparameter{fuga}+ は追加引数が必要」ということを通知する必要がある. % @@ -6885,11 +7108,11 @@ after ``beginning/ending of a group'' characters. ->, auto, shorten >=1pt ] \node [shape=rectangle, font=\scriptsize] (init) at (2,7) {start}; -\node [shape=circle,draw, fill=blue!20] (newline) at (4,7) {$N$}; -\node [shape=circle,draw, fill=blue!20] (midline) at (4,4) {$M$}; -\node [shape=circle,draw, fill=blue!20] (skipspc) at (8,7) {$S$}; -\node [shape=circle,draw, fill=red!20] (kanji) at (8,4) {$K$}; -\node [shape=rectangle,draw, fill=green!20] (scanacs) at (6,8) {scan a c.s.}; +\node [shape=circle,draw, fill=b_cyan] (newline) at (4,7) {$N$}; +\node [shape=circle,draw, fill=b_cyan] (midline) at (4,4) {$M$}; +\node [shape=circle,draw, fill=b_cyan] (skipspc) at (8,7) {$S$}; +\node [shape=circle,draw, fill=b_pink] (kanji) at (8,4) {$K$}; +\node [shape=rectangle,draw, fill=b_green] (scanacs) at (6,8) {scan a c.s.}; \node (endk) at (8,2.5) {} ; \node (endm) at (4,2.5) {} ; \node (ends) at (8,8.5) {} ; @@ -7042,7 +7265,7 @@ emits a space. \end{quote} この仕様は,前節で述べた\pTeX の仕様にできるだけ近づけたものとなっている.条件1.は, -\texttt{verbatim}系環境などの日本語対応マクロを書かなくてすませるためのものである. +\texttt{lstlisting}系環境などの日本語対応マクロを書かなくてすませるためのものである. しかしながら,\pTeX と完全に同じ挙動が実現できたわけではない. 次のように,和文文字の範囲を変更したちょうどその行においては挙動が異なる: @@ -7108,54 +7331,54 @@ u \def\OB{$\text{\sf O}_{\text{\sf B}}$} \begin{defn} %<*en> -A \emph{cluster} is a list of consecutive nodes in one of the following forms, +A \emph{cluster} is consecutive nodes in one of the following forms, with the \textit{id} of it: % %<*ja> -\emph{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである: +\emph{クラスタ}は以下の形のうちのどれかひとつをとるノードのリストである: % \begin{enumerate} %<*en> \item Nodes whose value of\ \verb+\ltj@icflag+ is in $[3,15)$. These nodes come from a hbox which is already packaged, by unpackaging (\cs{unhbox}). - The \textit{id} is \textit{id\_pbox}. + The \textit{id} of the cluster is \textit{id\_pbox}. % %<*ja> \item その \verb+\ltj@icflag+ の値が$[3,15)$に入るノードのリスト. これらのノードはある既にパッケージングされたhboxから \cs{unhbox} で アンパックされたものである. - その\textit{id}は\textit{id\_pbox}である. + この場合,クラスタの\textit{id}は\textit{id\_pbox}である. % %<*en> \item A inline math formula, including two \textit{math\_node}s at the boundary of it. - The \textit{id} is \textit{id\_math}. + The \textit{id} of the cluster is \textit{id\_math}. % %<*ja> \item インライン数式でその境界に2つの\textit{math\_node}を含むもの. - その\textit{id}は\textit{id\_math}である. + この場合,クラスタの\textit{id}は\textit{id\_math}である. % %<*en> -\item A \textit{glyph\_node}~$p$ with nodes which relate with it: +\item A \textit{glyph\_node}~$p$, which represents a \textbf{JAchar}, with nodes which relate with it: % %<*ja> -\item \textit{glpyh\_node}~$p$とそれに関係するノード: +\item \textbf{JAchar}を表す\textit{glyph\_node}~$p$とそれに関係するノード: % \begin{enumerate} %<*en> -\item A kern for the italic correction of~$p$. +\item[(a)] A kern for the italic correction of~$p$. % %<*ja> -\item $p$のイタリック補正のためのカーン. +\item[(a)] $p$のイタリック補正のためのカーン. % %<*en> -\item An accent attached to $p$ by \cs{accent}. +\item[(b)] An accent attached to $p$ by \cs{accent}. % %<*ja> -\item \cs{accent} による$p$に付随したアクセント. +\item[(b)] \cs{accent} による$p$に付随したアクセント. % \end{enumerate} \[ @@ -7173,41 +7396,51 @@ with the \textit{id} of it: \] %<*en> -The \textit{id} is \textit{id\_jglyph} or -\textit{id\_glyph}, according to whether the \textit{glyph\_node} -represents a Japanese character or not. +In this case, the \textit{id} is \textit{id\_jglyph}. +% +%<*ja> +この場合の\textit{id}は\textit{id\_jglyph}である. +% + +%<*en> +\item A list which begins from a \textit{glyph\_node} which represents a \textbf{ALchar}, + and consists of \textbf{ALchar} \textit{glyph\_node}s, + kerns for adjusting accents~(its subtype is 2), kerns for italic corrections and + kerns which are automatically inserted by \LuaTeX~or~luaotfload. + In this case, the \textit{id} is \textit{id\_glyph}. % %<*ja> -\textit{id}は\textit{glyph\_node}が和文文字を表すかどうかによって -\textit{id\_jglyph},もしくは\textit{id\_glyph}となる. +\item \textbf{ALchar}を表す\textit{glyph\_node},\cs{accent} によるアクセント位置補正用の + カーン(subtypeが2),そしてイタリック補正・カーニングによって挿入されたカーン達が連続 + したもの.この場合の\textit{id}は\textit{id\_glyph}である. % %<*en> \item An box-like node, that is, an hbox, a vbox, a rule (\cs{vrule}) and an \textit{unset\_node}. -The \textit{id} is \textit{id\_hlist} if the node is an +The \textit{id} of the cluster is \textit{id\_hlist} if the node is an hbox which is not shifted vertically, or \textit{id\_box\_like} otherwise. % %<*ja> -\item ボックス様のノード,つまり水平ボックス,垂直ボックス,罫線 (\cs{vrule}), +\item 水平ボックス(hbox),垂直ボックス,罫線 (\cs{vrule}), そして\textit{unset\_node}. - その\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist}, + クラスタの\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist}, そうでなければ\textit{id\_box\_like}となる. % %<*en> \item A glue, a kern whose subtype is not 2~(\textit{accent}), and a discretionary break. -The \textit{id} is \textit{id\_glue}, \textit{id\_kern} +The \textit{id} of the cluster is \textit{id\_glue}, \textit{id\_kern} and \textit{id\_disc}, respectively. % %<*ja> -\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そして任意改行. - その\textit{id}はそれぞれ\textit{id\_glue}, \textit{id\_kern},そして +\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そしてdiscretionary break. + その\textit{id} of the clusterはそれぞれ\textit{id\_glue}, \textit{id\_kern},そして \textit{id\_disc}である. % \end{enumerate} %<*en> -Let \textit{Np}, \textit{Nq} and \textit{Nr} denote a cluster. +We use \textit{Np}, \textit{Nq} and \textit{Nr} to denote a cluster. % %<*ja> 以下では\textit{Np}, \textit{Nq}, \textit{Nr}でクラスタを表す. @@ -7243,11 +7476,12 @@ $\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その和文文字 \item[\textit{id\_hlist}] 縦方向にシフトされていないhbox.\\ この場合,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$はそれぞれ$p$の内容を表すリストの, 先頭・末尾のノードである. +\medskip \begin{itemize} \item 状況によっては,\TeX ソースで言うと -\begin{verbatim} +\begin{lstlisting} \hbox{\hbox{abc}...\hbox{\lower1pt\hbox{xyz}}} -\end{verbatim} +\end{lstlisting} のように,$p$の内容が別のhboxで開始・終了している可能性も十分あり得る.そのような場合, $\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は, \emph{垂直方向にシフトされていない}hboxの @@ -7431,11 +7665,11 @@ x+y&\text{if\ }\Param{diffrentjfm}=\texttt{both}; \end{enumerate} 例えば, -\begin{verbatim} +\begin{lstlisting} \jfont\foo=psft:Ryumin-Light:jfm=ujis;-kern \jfont\bar=psft:GothicBBB-Medium:jfm=ujis;-kern \jfont\baz=psft:GothicBBB-Medium:jfm=ujis;jfmvar=piyo;-kern -\end{verbatim} +\end{lstlisting} という3フォントを考え, \[ \overbrace{\Node{glyph}{\cs{ foo}, `あ'}}^{p} @@ -7663,11 +7897,11 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] (a)部分にペナルティが存在していない場合, \LuaTeX-ja は\textit{Nq}と\textit{Np}の間の行分割を可能にしようとする. -そのために,以下の場合に$a$をもつ\textit{penalty\_node}を作って +そのために,以下のいずれかの場合に$a$をもつ\textit{penalty\_node}を作って 「右空白」の(もし未定義なら\textit{Np}の)直前に挿入する: \begin{itemize} \item 「右空白」がグルーでない(カーンか未定義)であるとき. -%\item 「左空白」がカーンとしてきっちり定義されている時. +\item $a\neq 0$のときは,「右空白」がグルーであっても\textit{penalty\_node}を作る. \end{itemize} \item[P-suppress~{[PS]}] @@ -7680,30 +7914,6 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] そのため,「右空白」がglueであれば,その直前に \cs{penalty10000} を挿入する. \end{description} -なお,「右空白」はカーンの%,「左空白」は未定義の -\[ - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\] -のような状況を考える. -このとき,$a$,即ち「あ」の\Param{postbreakpenalty}がいかなる値であっても, -この2クラスタ間は最終的に -\begin{equation} - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow -\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\label{eq-gref} -\end{equation} -となり,$a$分のペナルティは挿入されないことに注意して欲しい. -\Param{postbreakpenalty}は($a$は)殆どの場合が非負の値と考えられ,そのような場合では -\eqref{eq-gref}と -\[ - \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow -\Node{penalty}{$a$}\longrightarrow -\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}} -\] -との間に差異は生じない% -\footnote{kern$\rightarrow$glueが1つの行分割可能点(行分割に伴うペナルティは0) -であるため,たとえ$a=10000$であっても,\textit{Nq}と\textit{Np}の間で行分割を禁止することはできない.}. - \paragraph{箱・グルー・カーンと和文Aの間} \textit{Np}が\textsf{箱}・グルー・カーンのいずれかで,\textit{Np}が\textsf{和文A}であった場合は, すぐ上の(\textit{Nq}と\textit{Np}の順序が逆になっている)場合と同じである. @@ -7761,6 +7971,69 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, \end{itemize} % +%<*ja> +\section{ベースライン補正の方法} +\subsection{\texttt{yoffset} フィールド} +\Param{yalbaselineshift}等のベースライン補正は,基本的には対象となっている +\textit{glyph\_node}の \texttt{yoffset} フィールドの値を増減することによって +実装されている.なお,\texttt{yoffset} の値は上方向への移動量であるのに対し, +\Param{yalbaselineshift}などは下方向への移動量である. + +さて,\texttt{yoffset} の増減によって見かけのグリフ位置は上下に移動するが, +仮想ボディの高さ$h$,深さ$d$については +\begin{description} +\catcode`\<=12\catcode`\>=12 + \item[$\texttt{yoffset}\geq 0$のとき] +$h = \max(\texttt{height} + \texttt{yoffset}, 0)$, +$d = \max(\texttt{depth} - \texttt{yoffset}, 0)$, + \item[$\texttt{yoffset}<0$のとき] +$h = \max(\texttt{height} + \texttt{yoffset}, 0)$, $d=\texttt{depth}$. +\end{description} +という仕様になっている.つまり,\texttt{yoffset} が負(グリフを下ける)の場合に深さは増加しな +い(表\ref{tab:yoffset_and_im}参照). + +\begin{table}[t] +\caption{\texttt{yoffset} and imaginary body} +\label{tab:yoffset_and_im} +\centering\small +\fboxsep0pt +\def\T#1#2{\fcolorbox{blue}{white}{% + \setbox0=\hbox{\LARGE #1% + \directlua{ + local p = tex.nest[tex.nest.ptr].tail + p.yoffset = #2 * 65536 + }% + }% + \copy0\kern-\wd0\smash{\color{red}\vrule width \wd0 height 0.2pt depth 0.2pt}% +}} +\begin{tabular}{>{\bfseries}lccccc} +\toprule +\texttt{yoffset}&10\,pt&5\,pt&0&$-5$\,pt&$-10$\,pt\\ +\midrule +仮想ボディ&\T{y}{10}, \T{H}{10}&\T{y}{5}, \T{H}{5}&\T{y}{0}, \T{H}{0}% +&\T{y}{-5}, \T{H}{-5}&\T{y}{-10}, \T{H}{-10}\\[10pt] +\bottomrule +\end{tabular} +\end{table} + +\subsection{\textbf{ALchar}の補正} +上記の問題について,\textbf{ALchar}のベースライン補正では +「正しい深さ」を持った罫線(rule)を補うという対応策をとった. +この罫線による補正は,\textit{id}が\textit{id\_glyph}であるクラスタ単位, +大雑把に言えば音節単位で行われる. +文字列``Typeset''を +\begin{itemize} + \item フォントはLatin Modern Roman (\texttt{lmroman10-regular.otf}) 10\,pt + \item \Param{yalbaselineshift}は5\,pt +\end{itemize} +という状況で組んだ場合を例にとって説明しよう. + +\LuaTeX・\Pkg{luaotfload}によるカーニング・ハイフネーションが終わった段階では, + + + +% + %\section{Patch for the \Pkg{listings} Package} %\section{\Pkg{listings} パッケージへの対応} @@ -8117,12 +8390,12 @@ JFM中にある文字クラス$n$の定義の 全角単位の値として記述されている. 例えば,行末文字が句点「。」であり,そこで用いられているJFM中に -\begin{verbatim} +\begin{lstlisting} [2] = { chars = { '。', ... }, width = 0.5, ..., end_stretch = 0.5, end_shrink = 0.5, }, -\end{verbatim} +\end{lstlisting} という指定があった場合,この行末の句点は \begin{itemize} \item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合, @@ -8299,8 +8572,9 @@ CMapが必要である. 非埋め込みの中国語・韓国語フォントを定義する場合,同様のキャッシュが生成される. キャッシュの名称,必要となるCMapについては表\ref{tab:cid-cache}を参照して欲しい. -\item[ivs\_***.lua] -フォント``\texttt{***}''における異体字情報を格納している.構造は以下の通り: +\item[extra\_***.lua] +フォント``\texttt{***}''における異体字セレクタの情報,縦組用字形への変換テーブル,そして +縦組時における幅を格納している.構造は以下の通り: % %<*en> \subsection{Use of Cache} @@ -8319,9 +8593,15 @@ if you specified \texttt{cid} key in \cs{jfont} to use other CID-keyed non-embedded fonts for Chinese or Korean, as in Page~\pageref{para-cid}. -\item[ivs\_***.lua] -This file stores the table of Unicode variants in a font ``\texttt{***}''. -The structure of the table is the following: +\item[extra\_***.lua] +This file stores the table which stores the following. +\begin{itemize} + \item unicode variants in a font ``\texttt{***}'' + \item vertical width of glyphs, if it is not equal to the sum of +the height of ascender and the depth of descender + \item vertical variants +\end{itemize} +The following is the structure of the that table. % \begin{table}[!tb] @@ -8347,16 +8627,18 @@ return { { [10955]={ -- U+2ACB "Subset Of Above Not Equal To" [65024]=983879, -- <2ACB FE00> + ["vwidth"]=0.98, -- vertical width }, [37001]={ -- U+9089 "邉" [0]=37001, -- <9089 E0100> 991049, -- <9089 E0101> ... + ["vert"]=995025, -- vertical variant }, ... }, ["chksum"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", -- checksum of the fontfile - ["version"]=4, -- version of the cache + ["version"]=2, -- version of the cache } \end{lstlisting} %<*ja> @@ -8449,63 +8731,214 @@ nilでないをキャッシュに保存する. 縦組を実装している. \LuaTeX-jaにおける縦組の実装は -\pTeX における実装(\cite{ptexdoc,ptextug})をベースにしており,…… +\pTeX における実装(\cite{ptexdoc,ptextug})をベースにしている. -\subsection{\textit{direction}~whatsit} +\subsection{direction~whatsit} \textit{direction}~whatsitとは,\textit{direction}という特定の \verb+user_id+ を持つ -whatsitのことである.このwhatsitは,以下の3つの役割がある. -\begin{enumerate} -\def\labelenumi{(\roman{enumi})} - \item 「現在作成中のリストの組方向が \cs{tate} 等により変更された」ことを表す.\\ -「現在の組方向」は \verb+\ltj@dir@count+ というカウンタに格納されているが,それだけでは -\verb+hpack_filter+コールバックなどから正しく処理対象のリストの組方向を正しく取得すること - はできない(\ref{ssec-stack}節参照)ため,このように別途whatsitを用いている. - \item \cs{hbox},~\cs{vbox}によって作成されたボックスの組方向を表す.\\ -原則として,ボックスの組方向はattribute \verb+\ltj@dir+ に格納されることになっている.しか - し,新規に作成されるボックスのattributeをコールバックの内部から制御するには, -\verb+tex.setattribute+ による方法しかなく,これは不安定である. - -なお,この役割のdirection whatsitは,次の(iii)の役割も一緒に持っている. - \item 「異方向における寸法」の記録用.\\ -例えば \cs{box0} に横組のボックスが格納されている時,縦組や \cs{dtou} 方向 -における寸法値は((ii)の役割として作成された)direction~whatsitが -格納しているノードリストに格納される. -\end{enumerate} -このように複数の役割をもたせているので, -\begin{verbatim} -% yoko direction -\setbox0=\hbox{\tate B} -\noindent \unhbox0 A -\end{verbatim} -のような場合に,「(ii)の役割の\textit{direction}~whatsitが(i)の役割として認識され, -このリストは縦組とみなされるのではないか?」と思うかもしれない.しかし, -(i)の役割と(ii)の枠割の\textit{direction}~whatsitは \verb+\ltj@icflag+ の値により -区別されているので,そのような混乱は起こらない. - -\medskip -(ii)の役割のdirection whatsitは,各ボックスの内容を表すリストの先頭に挿入されるが, -例外が以下の2つある: +whatsitのことであり,以下のタイミングで作られる. \begin{itemize} - \item \verb+\hbox{}+, \verb+\vbox{}+ といった, + \item 組方向を \cs{tate} 等で変更したとき. + \item \cs{hbox}, \cs{vbox}, \cs{vtop} による明示的なボックスの開始時.\\ +\verb+\hbox{}+, \verb+\vbox{}+ といった, \begin{itemize} \item \cs{tate} 等によりボックス内部の組方向を変更していない \item ボックスの中身のリストが空である \end{itemize} 場合は,\LuaTeX の \verb+hpack_filter+, \verb+vpack_filter+ といった -callbackに処理が回らないので,この場合にはdirection whatsitは挿入されない. - \item \verb+\vtop{...}+ の場合は,先頭にdirection whatsitを置くと -ボックスの高さが正しく設定されない.そのため,この場合に限っては -direction whatsitはリストの2番目に挿入されることとなる. +callbackに処理が回らない.そこで,\LuaTeX-ja では,\cs{everyhbox}, \cs{everyvbox} を利用す + ることで各ボックスの先頭に確実に追加するようにしている\footnote{% + 問題は \cs{hbox to 25pt\{\}} という状況である.実際のこのボックスの中身は空でない(少な + くともdirection whatsitがある)ため,何も対策をしなければhpack時にUnderfill警告が発 + 生してしまうことになる.\LuaTeX-jaではそうならないように「\cs{hbadness}, + \cs{vbadness} を一時的に10000に変更し,hpack, vpack後に元の値に戻す」処理を行ってい + る. +}. + \item \cs{vsplit}によってvboxを分割した時の「残り」の先頭. + \item \LuaTeX-ja読み込み前に作成したボックスの寸法を \cs{ltjsetwd} 等によって変更した時. + \item \cs{insert} によるinsertionでは,中身の先頭に\textit{direction}~whatsitは作られず, +その代わりに中身の各ボックス・罫線の直前に作られる\footnote{% + これは,ページ分割の過程でinsertionが分割される時,「現在のページで出力される部分」が空と + なることがあることによる.先頭にwhatsitを置くと,最悪でも「現在のページにwhatsitが + 残る」ことになってしまう.}. \end{itemize} +なお,\verb+\vtop{...}+ の場合は,先頭にdirection whatsitを置くと +ボックスの高さが常に0\,ptになるという問題が発生する.そのため,この場合に限っては +vpack時にdirection whatsitをリストの2番目に移動させている. -\subsection{異方向のボックスの整合処理} +direction whatsitはあくまでも組方向処理のための補助的なノードであるので, +\cs{unhbox}, \cs{unhcopy} によってボックスの中身が展開される時には展開直前に削除される. +これは +\begin{lstlisting} + % yoko direction +\setbox0=\hbox{\tate B} +\noindent % 水平モードに入る.この時点でのリストの中身は空 +\unhbox0 A +\end{lstlisting} +といった場合に,段落が縦組で組まれたり,あるいは +\begin{lstlisting} +\setbox0=\hbox{} +\leavevmode \hbox{A}\unhbox0 +\setbox1=\lastbox % \box1 はどうなる? +\end{lstlisting} +で \cs{box1} が \cs{hbox\{A\}} でなく空になってしまうことを防ぐためである. + + +\subsection{\textit{dir\_box}} 縦中横など異方向のボックスを配置する場合に,周囲の組方向と大きさを整合させるため, \LuaTeX-jaでは \verb+\ltj@dir+ が128以降の\textit{hlist\_node}, \textit{vlist\_node}を 用いる.これらは\pTeX における\textit{dir\_node}の役割と同じ果たしており, -この文章中でも\textit{dir\_node}と呼称する. +この文章中では\textit{dir\_box}と呼称する. +\subsubsection{異方向のボックスの整合} +\textit{dir\_box}の第一の使用目的は,異方向のボックスの大きさを整合させることである. +例えば, +\begin{lstlisting} + % yoko direction +平成\hbox{\tate 26}年 +\end{lstlisting} +は段落中で +\[ + \xymatrix{ + {}\Node{glyph}{`平'}\ar[r]&{}\Node{glyph}{`成'}\ar[r]& + {}\HNode{hlist}{10.00003}{3.02779}{0.0}\ar[r]\ar[d]^{\text{中身}}&{}\Node{glyph}{`年'}\\ + &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'} + } +\] +というリストを作る.その後,この段落が終了したときに, +\LuaTeX-jaの\textbf{JAglue}挿入処理が行われ +\[ + \xymatrix{ + {}\Node{glyph}{`平'}\ar[r] + &{}\textcolor{blue}{\Node{glue}{\Param{xkanjiskip}}}\ar[r] + &{}\Node{glyph}{`成'}\ar[r] + &{}\textcolor{blue}{\Node{penalty}{0}} + \ar`r[d] `[l] `[ddll] `[dl] [dl] + \\ + &&{}\textcolor{red}{\HNode{hlist}{3.02779}{10.00003}{0.0}}\ar[r]\ar[d]^{\text{中身}} + &{}\textcolor{blue}{\Node{penalty}{0}}\ar[r] + &{}\Node{glyph}{`年'}\\ + &&{}\HNode{\textit{dir\_box} (\cs{yoko})}{10.00003}{3.02779}{0.0}\ar[d]^{\text{中身}}\\ + &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'} + } +\] +のようになる(青字は\textbf{JAglue},赤字が整合処理のための\textit{dir\_box}である). +\TeX の \cs{showbox} 形式で書けば + +\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt +\catcode`\@=0 @catcode`@\=12 +.\tenmin 平 +@textcolor{blue}{.\glue 0.0 plus 0.4 minus 0.4} +.\tenmin 成 +@textcolor{blue}{.\penalty 0} +@textcolor{red}{.\hbox(10.00003+0.0)x3.02779, direction TLT} +..\hbox(3.02779+0.0)x10.00003, direction TLT +...\whatsit4=[] +...\tenrm 2 +...\tenrm 6 +@textcolor{blue}{.\penalty 0} +.\tenmin 年 +}\medskip + +\noindent である. + +なお,\cs{raise},~\cs{lower}, \cs{moveleft},~\cs{moveright} といったボックス移動命令では. +移動を正しく表現するために段落やボックスの途中でも異方向のボックスは\textit{dir\_box}にカ +プセル化している. +例えば +\begin{lstlisting} + % yoko direction +平成\raise1pt\hbox{\tate 26}年\showlists +\end{lstlisting} +は以下のような結果を得る. + +\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt +\catcode`\@=0 @catcode`@\=12 +(前略) +\tenrm 平 +\tenrm 成 +@textcolor{red}{\hbox(10.00003+0.0)x3.02779, shifted -1.0, direction TLT} +.\hbox(3.02779+0.0)x10.00003, direction TLT +..\whatsit4=[] +..\tenrm 2 +..\tenrm 6 +\tenrm 年 +}\medskip + +また,メインの垂直リストに異方向のボックスが追加される場合にも同様に即座に +\textit{dir\_box}にカプセル化している.ページ分割のタイミングを正 +しく\TeX が判断するためである. +\cs{lastbox} によるボックスの取得では,\textit{dir\_box}は削除される. + +\subsubsection{異方向のボックス寸法の格納} +第二の使用目的は,現在の組方向がボックス本来の組方向とは異なる状況で, +\cs{ltjsetwd} によってボックス寸法を設定されたことを記録することである. + +例えば +\begin{lstlisting}[numbers=left] +\setbox0=\hbox{\vrule width 10pt height 5pt depth 2pt} +\setbox1=\hbox{\tate\ltjsetwd0=20pt} +\wd0=9pt +\setbox1=\hbox{\dtou\ltjsetwd0=20pt} +\setbox0=\hbox{\dtou a\box0} +\end{lstlisting} +というコードを考える.1行目で \cs{box0} には横組の +幅10\,pt,高さ5\,pt,深さ2\,ptのボックスが代入される. +よって, +\begin{itemize} + \item 縦組下では \cs{box0} は幅7\,pt,高さ・深さ5\,ptのボックスとして扱われる. + \item \cs{dtou} 下では \cs{box0} は幅7\,pt,高さ10\,pt,深さ0\,ptのボックスとして扱われる. +\end{itemize} +このとき,\cs{box0} の\emph{中身}は +\[ + \xymatrix{ + {}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{} + } +\] +である. + +さて,2行目で縦組時の \cs{box0} の幅が20\,ptに設定される.この情報が +direction~whatsit内部のノードリストに,\textit{dir\_box}として格納される: +\[ + \xymatrix{ + {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\ + {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0}} + } +\] + +次に,3行目では横組時の,つまり \cs{box0} 本来の組方向での深さが9\,ptに変更される. +このとき,\cs{box0} は +\begin{itemize} + \item 縦組下では寸法代入が既に行われているので,2行目で作成された\textit{dir\_box}の通り + に幅20\,pt,高さ・深さ5\,ptのボックスとして扱われる. + \item \cs{dtou} 下ではまだ寸法代入が行われていないので, +\cs{box0} の寸法変更に追従し,幅7\,pt,高さ9\,pt,深さ0\,ptのボックスとして扱われる. +\end{itemize} + +4行目では \cs{dtou} 下での\cs{box0} の幅が20\,ptに設定されるので,2行目と同じように +\[ + \xymatrix{ + {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\ + {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[r]& + {}\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0} + } +\] +と\textit{dir\_box}が作成される. + +このように寸法代入によってつくられた\textit{dir\_box}は,前節の整合過程のときに再利用され +る.上記の例でいえば,5行目を実行した後の \cs{box0} の内容は +\[ + \xymatrix{ + {}\Node{whatsit}{\cs{dtou}}\ar[r]& + {}\Node{glyph}{`a'}\ar[r]& + {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[d]_{\text{中身}}\\ + &&{}\HNode{hlist}{9.0}{5.0}{2.0}\ar[d]_{\text{中身}}\\ + &&{}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{} + } +\] +のようになる. % +\newpage \begin{thebibliography}{99} \addcontentsline{toc}{section}{\refname} \bibitem{texbytopic} @@ -8533,31 +8966,13 @@ Requirements for Japanese Text Layout (W3C Working Group Note), 2011, 2012. \new \\\null\hfill\texttt{.../texmf-dist/doc/ptex/base/ptexdoc.pdf} \bibitem{ptextug} Hisato Hamano. \newblock \textit{Vertical Typesetting with \TeX}, TUGBoat~\textbf{11}(3), 346--352, 1990. +\bibitem{pdfstd} International Organization for Standardization. \newblock +ISO 32000-1:2008, \textit{Document management -- Portable document format -- Part 1: PDF + 1.7}, 2008. \newblock +\\\null\hfill +\url{http://www.iso.org/iso/iso\_catalogue/catalogue_tc/catalogue\_detail.htm?csnumber=51502} \end{thebibliography} -\newpage -\appendix - -\section{Package versions used in this document} -This document was typeset using the following packages: - -\medskip - -{\makeatletter\tt\footnotesize - \def\@pkglist#1{% - \filename@parse{#1}\def\@temp{sty} - \ifx\@temp\filename@ext - \edef\reserved@a{% - \filename@base.% - \ifx\filename@ext\relax tex\else\filename@ext\fi}% - \leavevmode\hskip-13em\hbox to 13em{\filename@area\reserved@a\hss}% - \csname ver@\reserved@a\endcsname\par - \fi - }% -\parindent0pt\leftskip13em -\ltjpkglist - -\makeatother} \end{document} % %<*showexpl>