X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fluatexja.dtx;h=05e5e2d8ab698ee3542154ba72d20f2eca4ab646;hb=f078ac2f7998a102c7ec765e725f2269eed9f872;hp=f46f6e1c18ebf1a9b4a5ac179e0b63c7fee603f7;hpb=4962f6e928b263a18f7a9e28ec0877156cb832b6;p=luatex-ja%2Fluatexja.git diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index f46f6e1..05e5e2d 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -11,7 +11,7 @@ \IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} %\documentclass[a4paper,titlepage]{article} -%\documentclass[a4paper,titlepage]{ltjsarticle} +%\documentclass[a4paper,10ptj,titlepage]{ltjsarticle} %%%%%%%% \makeatletter @@ -21,7 +21,7 @@ \usepackage{metalogo,amsmath,array,tikz,pict2e,multienum,float} \usepackage{booktabs,multicol,luatexja-ruby} \usepackage[all]{xy} -\usepackage{lltjext,alltt} +\usepackage{lltjext,alltt,comment} %%%%%%%% Lua GC \patchcmd\@outputpage{\stepcounter{page}}{% @@ -39,7 +39,6 @@ %%%%%%%% fonts \usepackage{luatexja-otf} -\directlua{luatexja.otf.enable_ivs()} \usepackage[no-math]{fontspec} \setmainfont[Ligatures=TeX]{Linux Libertine O} \setmonofont[Scale=MatchLowercase, ItalicFont=lmmono10-italic.otf, @@ -50,7 +49,7 @@ \usepackage[kozuka-pr6n]{luatexja-preset} \usepackage{unicode-math} \setmonojfont{KozGoPr6N-Regular.otf} -\setmathfont[Scale=MatchLowercase]{xits-math.otf} +\setmathfont[Scale=MatchLowercase]{XITSMath} \setLaTeXa{\scshape a} %<*ja> @@ -69,11 +68,16 @@ {\normalfont\normalsize\bfseries\raisebox{.2ex}{$\mdlgblksquare\mkern1mu$}}} % %<*ja> -\usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry} +\usepackage[textwidth=44\zw, lines=41, footskip=6mm]{geometry} \usepackage{luatexja-adjust}%\ltjdisableadjust \advance\leftmargini-1\zw\advance\leftmarginii-1\zw % - +%\long\def\fakefn#1#2{\par\noindent{\footnotesize\hbox to1.8em{\hss#1}#2\par}} +%<*ja> +\long\def\fakefn#1#2{% + \par{\footnotesize\advance\leftskip 3\zw\parindent1\zw\noindent + \llap{#1\hskip.3\zw}#2\par}} +% %%%%%%%% listings %%%%%%%% IVS @@ -192,6 +196,15 @@ \def\cs#1{\texttt{\upshape \texorpdfstring{\textbackslash\hbox{\ltjsetparameter{autoxspacing=false}#1}}{\textbackslash#1}}} \ltjsetparameter{alxspmode={`\\,allow}} +\def\text@#1{% + \ifnum\mathstyle<\scriptstyle + \mbox{#1} + \else\ifnum\mathstyle<\scriptscriptstyle + \mbox{\let\f@size\sf@size\selectfont#1} + \else + \mbox{\let\f@size\ssf@size\selectfont#1} + \fi\fi +} %%%%%%%% \makeatother %%%%%%%% @@ -203,10 +216,12 @@ width:\hfill\ #2\cr height:\hfill\ #3\cr depth:\hfill\ #4\cr }}}}}\,} +\makeatletter \def\myghost{\ifmmode\else\ltjalchar"200C \fi} -\protected\def\Param#1{\myghost\hyperlink{fld:#1}{\underline{\smash{\textsf{#1}}}}\myghost} % parameter name +\def\Param#1{\texorpdfstring{\@Param{#1}}{#1}} % parameter name +\protected\def\@Param#1{\myghost\hyperlink{fld:#1}{\underline{\smash{\textsf{#1}}}}\myghost} \protected\def\DParam#1{\myghost\hypertarget{fld:#1}{\underline{\smash{\textsf{#1}}}}\myghost} % parameter name (definition) -\protected\def\Pkg#1{\textsf{#1}} % packages/classes +\def\Pkg#1{\texorpdfstring{\textsf{#1}}{#1}} % packages/classes \ltjsetparameter{alxspmode={"200C,allow}} \begin{document} @@ -460,7 +475,7 @@ on the content of the register \emph{only}. This is major difference with \pTeX. % %<*ja> \paragraph{組方向} -20150420.0版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. +バージョン20150420.0からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている. なお,\LuaTeX 本体も$\Omega$流の組方向をサポートしているが,それとは全くの別物であること に注意してほしい. 特に,異なった組方向のボックスを扱う場合には @@ -483,7 +498,7 @@ Japanese characters in discretionary break (\cs{discretionary}) is not supported By default, \LuaTeX-ja uses Japanese fonts to typeset Greek and Cyrillic letters, To change this behavior, put \verb!\ltjsetparameter{jacharrange={-2,-3}}! in the preamble. - For the detailed description, see Subsection~\ref{ssec-setrange}. + For the detailed description, see Subsection~\ref{ssec:setrange}. From version~20150906.0, characters which belongs both ISO~8859-1 and JIS~X~0208, such as \P~and~\S, are now typeset in alphabetic fonts. @@ -500,10 +515,10 @@ without the \cs{fontspec} (and~\Pkg{luatexja-fontspec}) package. \end{lstlisting} を入れると 上記種類の文字は欧文フォントを用いて組まれるようになる. - 詳しい説明は\ref{ssec-setrange}節を参照してほしい. + 詳しい説明は\ref{ssec:setrange}節を参照してほしい. また,\P,~\S といったISO~8859-1の上位領域とJIS~X~0208の共通部分の文字は - 20150906.0版から標準で欧文扱いとなった.\LaTeXe\ 2017/01/01以降では + バージョン20150906.0から標準で欧文扱いとなった.\LaTeXe\ 2017/01/01以降では 標準でTUエンコーディングのLatin Modernフォントが使われるので, 特に何もせずソース中にそのまま記述してもこれらの文字が出力される \footnote{\LaTeXe\ 2017/01/01より前では,ソース中に直接記述しても @@ -525,11 +540,11 @@ In this document, the following terms and notations are used: %<*en> \item Characters are classified into following two types. Note that the classification can be customized by a user - (see Subsection~\ref{ssec-setrange}). + (see Subsection~\ref{ssec:setrange}). % %<*ja> \item 文字は次の2種類に分けられる.この類別は固定されているものではなく,ユーザが後から変更可能である - (\ref{ssec-setrange}節を参照). + (\ref{ssec:setrange}節を参照). % \begin{itemize} %<*en> @@ -573,10 +588,10 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. % %<*en> \item In this document, natural numbers start from~zero. - $\omega$ denotes the set of all natural numbers. + $\omega$ denotes the set of all natural numbers which can be used in \TeX. % %<*ja> -\item 本ドキュメントでは,自然数は0から始まる.自然数全体の集合は$\omega$と表記する. +\item 本ドキュメントでは,自然数は0から始まる.(\TeX で扱える)自然数全体の集合は$\omega$と表記する. % \end{itemize} @@ -604,7 +619,7 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %本プロジェクトはOSDNのサービスを用いて運営されている. %\paragraph{Members}\ -%\paragraph{開発メンバー}\ +%\clearpage\paragraph{開発メンバー}\ %<*en> \begin{multienumerate} @@ -625,7 +640,7 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. % \paragraph{Acknowledgments} -- 挿入するならここ -\clearpage +%\clearpage %\section{Getting Started} %\section{使い方} %\subsection{Installation} @@ -634,18 +649,18 @@ and \emph{Japanese fonts} for fonts used in \textbf{JAchar}. %The following packages are needed for the \LuaTeX-ja\ package. %\LuaTeX-jaパッケージの動作には次のパッケージ類が必要である. \begin{itemize} -\item \LuaTeX\ beta-0.85.0 (or later) +\item \LuaTeX\ 1.0.0 (or later) \item \Pkg{luaotfload} v2.6 (or later) \item \Pkg{adobemapping} (Adobe cmap and pdfmapping files) \item \Pkg{etoolbox}, \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe) \item \Pkg{ltxcmds}, \Pkg{pdftexcmds}, \Pkg{filehook}, \Pkg{atbegshi} -\item \Pkg{fontspec} v2.4 (or later) +\item \Pkg{fontspec} v2.5c (or later) %\item \emph{IPAex fonts} (\url{http://ipafont.ipa.go.jp/}) %\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})} \end{itemize} -%In summary, \LuaTeX-ja version 20160404.0 (or~later) no longer supports \TeX~Live~2015. +%In summary, \LuaTeX-ja version 20180825.0 (or~later) no longer supports \TeX~Live~2016. %<*ja> -要約すると,20160404.0版以降の\LuaTeX-jaは\TeX~Live~2015以前では動作しない\footnote{% +要約すると,バージョン20180825.0以降の\LuaTeX-jaは\TeX~Live~2016以前では動作しない\footnote{% もっとも,自分で\LuaTeX のバイナリをSubversionリポジトリからビルドしていれば話は別である. }. % @@ -673,21 +688,6 @@ IPAex fonts are also available in these distributions. 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{手動インストール方法} @@ -816,8 +816,9 @@ For changes from \pTeX, see Subsection~\ref{ssec:chgptex}. Generally speaking, LuaJIT\TeX\ processes \LuaTeX-ja about 30\% faster than \LuaTeX, but not always% \footnote{% - LuaJIT has the 1\,GB~(or~2\,GB) memory limitation. So typesetting a large source by LuaJIT\TeX\ - may cause an ``out of memory'' error. + LuaJIT has several limitations such as 1\,GB~(or~2\,GB) memory limitation. + So typesetting a large source by LuaJIT\TeX may cause an ``out of memory'' error, + or failure of loading/saving font cache of \Pkg{luaotfload}. }. % %<*ja> @@ -826,11 +827,13 @@ For changes from \pTeX, see Subsection~\ref{ssec:chgptex}. LuaJIT\TeX を用いると\LuaTeX のだいたい1.3倍の速度で動くようであるが, IPA mj明朝などの大きいフォントを用いた場合には\LuaTeX よりも遅くなることもある \footnote{% - LuaJITは1\,GB(あるいは2\,GB)のメモリ制限があることが知られている.そのため, + LuaJITは1\,GB(あるいは2\,GB)のメモリ制限など,いくつかの制限事項があることが知られている.そのため, 大きいソースファイルをLuaJIT\TeX でタイプセットするとLuaの側で``out of memory''エラーが発生してしまう. 本ドキュメントのように,「各ページごとにLuaで使っているメモリ容量をチェックし, 必要なら\texttt{collectgarbage("collect")}でガベージコレクタを実行」すると 状況が多少改善されるかもしれない. + また,LuaJIT\TeX でIPA mj明朝などの「大きい」フォントを利用した場合はフォントキャッシュの保存に失敗し, + 毎回フォントを読み込まなければならず結果的に時間がかかることがある. }. % @@ -875,7 +878,7 @@ and finally delete the temporary directory. %\subsection{Using in plain \TeX} %\subsection{plain \TeX で使う} -\label{ssec-plain} +\label{ssec:plain} %To use \LuaTeX-ja in plain \TeX, simply put the following at the beginning of the document: %\LuaTeX-jaを plain \TeX で使うためには,単に次の行をソースファイルの冒頭に追加すればよい: @@ -889,7 +892,7 @@ and finally delete the temporary directory. %<*en> \item The following 12~Japanese fonts are preloaded: \begin{center}\small -\begin{tabular}{cccccc} +\begin{tabular}{llllll} \toprule \textbf{direction}& \textbf{classification}&\textbf{font name}&\bfseries ``10\,pt''&\bfseries ``7\,pt''&\bfseries ``5\,pt''\\\midrule @@ -907,28 +910,30 @@ and finally delete the temporary directory. %<*ja> \item 以下の12個の和文フォントが定義される: \begin{center}\small -\begin{tabular}{cccccc} +\begin{tabular}{llllll} \toprule \emph{組方向}&\emph{字体}&\emph{フォント名}&\bfseries``10\,pt''&\bfseries``7\,pt''&\bfseries``5\,pt''\\\midrule -\smash{\raisebox{-1ex}{横組}}& +\smash{\raisebox{-0.7\zh}{横組}}& 明朝体&IPAex明朝&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\ -&ゴシック体&IPAexゴシック&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ +&\textgt{ゴシック体}&IPAexゴシック&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\ \midrule -\smash{\raisebox{-1ex}{縦組}}& +\smash{\raisebox{-0.7\zh}{縦組}}& 明朝体&IPAex明朝&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\ -&ゴシック体&IPAexゴシック&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ +&\textgt{ゴシック体}&IPAexゴシック&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\ \bottomrule \end{tabular} \end{center} % \begin{itemize} %<*en> -\item With \texttt{luatexja.cfg}, one can use other fonts -as ``default'' Japanese fonts (Subsection~\ref{ssec-cfg}). +\item The ``default'' Japanese fonts (and~JFMs for them) can be + modified by defining \cs{ltj@stdmcfont} etc.\ \emph{before} + one inputs \texttt{luatexja.sty} (Subsection~\ref{ssec:cfg}). % %<*ja> -\item \texttt{luatexja.cfg} を用いることによって,標準和文フォントを -IPAexフォントから別のフォントに置き換えることができる.\ref{ssec-cfg}節を参照. +\item 標準和文フォントやJFMをIPAexフォントから別のものに置き換えるには, + \cs{ltj@stdmcfont}等を\texttt{luatexja.sty}読み込み\emph{前}に定義すればよい. + \ref{ssec:cfg}節を参照. % %<*en> @@ -961,7 +966,7 @@ IPAexフォントから別のフォントに置き換えることができる. %\subsection{Using in \LaTeX} %\subsection{\LaTeX で使う} -\label{ssec-ltx} +\label{ssec:ltx} %<*en> Using in \LaTeXe\ is basically same. To set up the minimal environment @@ -976,16 +981,16 @@ for Japanese, you only have to load \texttt{luatexja.sty}: \end{lstlisting} %<*en> It also does minimal settings (counterparts in \pLaTeX\ are \texttt{% -plfonts.dtx} and \texttt{pldefs.ltx}): +plfonts.dtx} and \texttt{pldefs.ltx}). % %<*ja> これで\pLaTeX の\texttt{plfonts.dtx}と\texttt{pldefs.ltx}に相当する最低限の設定が -なされる: +なされる. % \begin{itemize} %<*en> -\item Font encodings for Japanese fonts is \texttt{JY3}~(for horizontal direction) and +\item Font encodings for Japanese fonts are \texttt{JY3}~(for horizontal direction) and \texttt{JT3}~(for vertical direction). % %<*ja> @@ -994,22 +999,22 @@ plfonts.dtx} and \texttt{pldefs.ltx}): % %<*en> -\item Traditionally, Japanese documents use two typeface categories: \emph{mincho}~(明朝体) and +\item Traditionally, Japanese documents use only two families: \emph{mincho}~(明朝体) and \emph{gothic}~(\textgt{ゴシック体}). \emph{mincho} is used in the main text, while \emph{gothic} is used in the headings or for emphasis. \begin{center}\small \begin{tabular}{lllc} \toprule -\textbf{classification}&&&\textbf{family name}\\\midrule +\textbf{classification}&&&\textbf{commands}\\\midrule \emph{mincho} (明朝体)&\verb+\textmc{...}+&\verb+{\mcfamily ...}+&\cs{mcdefault}\\ \emph{gothic} (\textgt{ゴシック体})&\verb+\textgt{...}+&\verb+{\gtfamily ...}+&\cs{gtdefault}\\ \bottomrule \end{tabular} \end{center} \item -By default, the following fonts are used for \emph{mincho} and \emph{gothic}: +By default, the following fonts are used for these two families. \begin{center}\small -\begin{tabular}{ccccc} +\begin{tabular}{lllll} \toprule \textbf{classification}&\textbf{family}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule \emph{mincho} (明朝体)&\tt mc&IPAex Mincho&IPAex Gothic&0.962216\\ @@ -1017,14 +1022,14 @@ By default, the following fonts are used for \emph{mincho} and \emph{gothic}: \bottomrule \end{tabular} \end{center} -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}. +\item Note that the bold series (series \texttt{bx}~or~\texttt{b}) in both family + are same as the medium series of gothic family. + There is no italic nor slanted shape for these \texttt{mc}~and~\texttt{gt}. % %<*ja> \item \pLaTeX と同様に,標準では「明朝体」「ゴシック体」の2種類を用いる: \begin{center}\small -\begin{tabular}{cllc} +\begin{tabular}{llll} \toprule \emph{字体}&&&\emph{ファミリ名}\\\midrule 明朝体&\verb+\textmc{...}+&\verb+{\mcfamily ...}+&\cs{mcdefault}\\ @@ -1032,23 +1037,46 @@ Note that the bold series in both family are same as the medium series of \emph{ \bottomrule \end{tabular} \end{center} -\item 標準では,次のフォントファミリが用いられる: + \newpage +\item 標準では,次のフォントが用いられる: \begin{center}\small -\begin{tabular}{ccccc} +\begin{tabular}{lllll} \toprule \emph{字体}&\emph{ファミリ}&\cs{mdseries}&\cs{bfseries}&\emph{スケール}\\\midrule 明朝体&\tt mc&IPAex明朝&IPAexゴシック&0.962216\\ -ゴシック体&\tt gt&IPAexゴシック&IPAexゴシック&0.962216\\ +\textgt{ゴシック体}&\tt gt&IPAexゴシック&IPAexゴシック&0.962216\\ \bottomrule \end{tabular} \end{center} -どちらのファミリにおいても,そのboldシリーズで使われるフォントは -ゴシック体のmediumシリーズで使われるフォントと同じであることに注意. + +明朝・ゴシックどちらのファミリにおいても,太字(\cs{bfseries})のフォントは +ゴシック体中字(\cs{gtfamily}\cs{mdseries})で使われるフォントと同じであることに注意. また,どちらのファミリでもイタリック体・スラント体は定義されない. + + \item 和文の太字を表すシリーズ名は,(元々のComputer Modernが + 太字に\texttt{bx}を用いていたことから)伝統的に\texttt{bx}~(Bold Extended)が使われてきた. + しかし,太字にシリーズ\texttt{b}を使うフォントも増えてきたため, + バージョン20180616.0以降では和文の太字として\texttt{bx},~\texttt{b}の両方を扱えるようにした. % -%\item Japanese characters in math mode are typeset by the font family \texttt{mc}. -%\item 数式モード中の和文文字は明朝体(\texttt{mc})で出力される. +%<*en> + \item From version~20181102.0, one can specifies \texttt{disablejfam} option at + loading \LuaTeX-ja. This option prevents loading a patch for \LaTeX, which are + needed to support Japanese characters in math mode. + + Without \texttt{disablejfam} option, one can typeset Japanese characters in + math mode as~\verb+$あ$+ (see Page~\pageref{para:jachar_in_math}) as before. + Japanese characters in math mode are typeset by the font family \texttt{mc}. +% +%<*ja> + \item バージョン20181102.0以降では,\texttt{disablejfam}オプションを\LuaTeX-ja読み込み時に + 指定できるようになった.このオプションは,数式モード中に直に和文文字を書けるようにするための + \LaTeX へのパッチを読み込まない. + + \texttt{disablejfam}のない状況では,以前と同様に和文文字を数式モード中に + 直に書くことができる(但し\autoref{para:jachar_in_math}ページの記述も参照). + その際には明朝体(\texttt{mc})で出力される. +% %<*en> \item \cs{jttdefault}% \footnote{% @@ -1058,7 +1086,7 @@ Note that the bold series in both family are same as the medium series of \emph{ These classes and packages also redefine \cs{jttdefault} to \cs{gtdefault} (\emph{gothic}~family). } specifies the Japanese font family in \cs{verb}~or~\texttt{verbatim} environment. - The default value of \cs{jttdefault} is \cs{mcdefault}, so \emph{mincho} family is used. + The default value of \cs{jttdefault} is \cs{mcdefault}, so the mincho family is used. % %<*ja> \item \cs{verb} や \texttt{verbatim} 環境中の和文文字に使われる和文フォントファミリは @@ -1075,8 +1103,8 @@ Note that the bold series in both family are same as the medium series of \emph{ %<*en> \item If you use the \Pkg{beamer} class with the default font theme (which uses sans serif fonts) and with \LuaTeX-ja, you might want to change default Japanese fonts to - \emph{gothic} family. The following line changes the default Japanese font family - to \emph{gothic}: + the gothic family. The following line changes the default Japanese font family + to it: % %<*ja> \item \Pkg{beamer}クラスを既定のフォント設定で使う場合,既定欧文フォントがサンセリフなの @@ -1087,6 +1115,15 @@ Note that the bold series in both family are same as the medium series of \emph{ \renewcommand{\kanjifamilydefault}{\gtdefault} \end{lstlisting} +%<*ja> +\item \pLaTeX と同様に,\texttt{mc},~\texttt{gt}両ファミリには「従属欧文」書体が定義されている. + これらは\cs{userelfont}を\cs{selectfont}(や,その他の「実際に」 + フォントを変更する命令)の前で実行することにより使うことができる. + + \pLaTeX では標準の欧文フォントはOT1エンコーディングのComputer Modern Roman (\texttt{cmr})% + であったが,2017年以降の\LuaLaTeX ではTUエンコーディングのlatin Modern Roman (\texttt{lmr})% + に変更されている.そのため,前段落で述べた「従属欧文」も,Latin Modern Romanに設定している. +% \end{itemize} @@ -1094,7 +1131,7 @@ Note that the bold series in both family are same as the medium series of \emph{ However, above settings are not sufficient for Japanese-based documents. To typeset Japanese-based documents, you are better to use class files other than \texttt{article.cls}, \texttt{book.cls}, and so on. At -the present, we have the counterparts of \Pkg{jclasses} (standard +the present, \LuaTeX-ja has the counterparts of \Pkg{jclasses} (standard classes in \pLaTeX) and \Pkg{jsclasses} (classes by Haruhiko Okumura), namely, \Pkg{ltjclasses}\footnote{% \texttt{ltjarticle.cls},~\texttt{ltjbook.cls}, \texttt{ltjreport.cls}, @@ -1104,10 +1141,12 @@ Okumura), namely, \Pkg{ltjclasses}\footnote{% \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls}, \texttt{ltjsreport.cls},~\texttt{ltjskiyou.cls}.}. Original \Pkg{jsclasses} use \cs{mag}~primitive to set the main document font size. -However, \LuaTeX\ beta-0.87.0~or~later does not support \cs{mag} in PDF~output, -so \Pkg{ltjsclasses} use different method% -\footnote{Similar to \texttt{magstyle=xreal} in the \Pkg{BXjscls} classes (by Takayuki Yato).} -to set the main document font size. +However, \LuaTeX\ does not support \cs{mag} in PDF~output, +so \Pkg{ltjsclasses} uses the \texttt{nomag*} option\footnote{Same effect as + the \Pkg{BXjscls} classes (by Takayuki Yato) and \Pkg{jsclasses}. + However, these classes uses only \TeX\ code, but \Pkg{ltjsclasses} uses Lua code.} + by default to set the main font size. If this causes some unexpected behavior, specify +\texttt{nomag} option in \cs{documentclass}. % %<*ja> しかしながら,上記の設定は日本語の文書にとって十分とは言えない. @@ -1121,13 +1160,17 @@ to set the main document font size. }, \Pkg{ltjsclasses}\footnote{% \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls}, \texttt{ltjsreport.cls},~\texttt{ltjskiyou.cls}.}% -がそれぞれ用意されている. +がそれぞれ\LuaTeX-ja標準で用意されている. -元々の\Pkg{ltjsclasses}ではフォントサイズを指定するのに\cs{mag}プリミティブが使われていたが, -\LuaTeX~beta-0.87.0以降ではPDF出力時の\cs{mag}のサポートが廃止された. -そのため,\Pkg{ltjsclasses}では別の方法 -\footnote{八登崇之氏による\Pkg{BXjscls}クラスにおける\texttt{magstyle=xreal}指定時と類似している.}で -フォントサイズを指定することにしている. +元々の\Pkg{jsclasses}では本文のフォントサイズを設定するのに\cs{mag}プリミティブが使われていたが, +\LuaTeX ではPDF出力時の\cs{mag}のサポートが廃止された. +そのため,\Pkg{ltjsclasses}では\texttt{nomag*}オプション +\footnote{\Pkg{jsclasses}や,八登崇之氏による\Pkg{BXjscls}クラスにおける同名のオプションと + 同じ.上記クラスは\TeX コードのみで実装しているが,\Pkg{ltjsclasses}ではLuaコードも用いている.}が標準で +有効になっており,これを使って本文フォントサイズの設定を行っている. +しかし,この\texttt{nomag*}オプションでは(20180121.0版より前の版において\Pkg{unicode-math}パッケージ使用時に +起きたように)予想外の意図しない現象に遭遇する危険がある.そのような場合は +\cs{documentclass}において\texttt{nomag}オプションを指定してほしい. % %<*ja> @@ -1205,17 +1248,17 @@ This patch \Pkg{lltjp-geometry} also can be used in \pLaTeX; for the detail, ple %\section{フォントの変更} \subsection{plain \TeX~and~\LaTeXe} -\label{ssec-chgfnt} +\label{ssec:chgfnt} \paragraph{plain \TeX} %<*en> To change Japanese fonts in plain \TeX, you must use the command -\cs{jfont}~and~\cs{tfont}. So please see Subsection~\ref{ssec-jfont}. +\cs{jfont}~and~\cs{tfont}. So please see Subsection~\ref{ssec:jfont}. % %<*ja> plain \TeX で和文フォントを変更するためには, \pTeX のように \cs{jfont} 命令や \cs{tfont} 命令を直接用いる. -\ref{ssec-jfont}節を参照. +\ref{ssec:jfont}節を参照. % \paragraph{\LaTeXe\ (NFSS2)} @@ -1237,7 +1280,7 @@ For \LaTeXe, \LuaTeX-ja adopted most of the font selection system of \pLaTeXe\ ( %<*en> \begin{center}\small -\begin{tabular}{cccccc} +\begin{tabular}{llllll} \toprule &\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}&\textbf{selection}\\\midrule alphabetic fonts @@ -1254,17 +1297,17 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ % %<*ja> \begin{center}\small -\begin{tabular}{cccccc} +\begin{tabular}{llllll} \toprule &\emph{エンコーディング}&\emph{ファミリ}&\emph{シリーズ}&\emph{シェープ}&\emph{選択}\\\midrule -欧文 +\emph{欧文} &\cs{romanencoding}&\cs{romanfamily}&\cs{romanseries}&\cs{romanshape} &\cs{useroman}\\ -和文 +\emph{和文} &\cs{kanjiencoding}&\cs{kanjifamily}&\cs{kanjiseries}&\cs{kanjishape} &\cs{usekanji}\\ -両方&---&--&\cs{fontseries}&\cs{fontshape}&---\\ -自動選択&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ +\emph{両方}&---&--&\cs{fontseries}&\cs{fontshape}&---\\ +\emph{自動選択}&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ \bottomrule \end{tabular} \end{center} @@ -1278,7 +1321,7 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ alphabetic fonts to \texttt{T1}. \cs{fontfamily} also changes the current Japanese font family, the current alphabetic font family, \emph{or both}. - For the detail, see Subsection~\ref{ssec-nfsspat}. + For the detail, see Subsection~\ref{ssec:nfsspat}. % %<*ja> ここで,\verb+\fontencoding{+\verb+}+ は,引数により和文側か欧文 @@ -1287,7 +1330,7 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ \texttt{JY3}に変更し,\verb+\fontencoding{T1}+ は欧文フォント側を \texttt{T1}へと変更する.\cs{fontfamily} も引数により和文側,欧文 側,\emph{あるいは両方}のフォントファミリを変更する.詳細は - \ref{ssec-nfsspat}節を参照すること. + \ref{ssec:nfsspat}節を参照すること. % %<*en> @@ -1311,19 +1354,23 @@ auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\ \end{lstlisting} %<*ja> 仮名書体を使う場合など,複数の和文フォントを組み合わせて使いたい場合は -\ref{ssec-altfont}節の \cs{ltjdeclarealtfont} と,その\LaTeX 版の\ -\cs{DeclareAlternateKanjiFont}(\ref{ssec-nfsspat}節)を参照せよ. +\ref{ssec:altfont}節の \cs{ltjdeclarealtfont} と,その\LaTeX 版の\ +\cs{DeclareAlternateKanjiFont}(\ref{ssec:nfsspat}節)を参照せよ. % \end{itemize} %<*en> -\paragraph{Remark: Japanese characters in math mode} +\paragraph{Japanese characters in math mode} +\label{para:jachar_in_math} + Since \pTeX\ supports Japanese characters in math mode, there are sources like the following: % %<*ja> -\paragraph{注意:数式モード中の和文文字} +\paragraph{数式モード中の和文文字} +\label{para:jachar_in_math} + \pTeX では,特に何もしないでも数式中に和文文字を記述することができた.そのため, 以下のようなソースが見られた: % @@ -1362,23 +1409,37 @@ In this point of view, $f_{\text{高温}}$~% ($f_{\text{high temperature}}$). \[ y=(x-1)^2+2\quad - \mathrel{\text{よって}}\quad y>0 \] + \mathrel{\mbox{よって}}\quad y>0 \] $5\in 素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$. \end{LTXexample} + %<*en> We also believe that using Japanese characters as identifiers is rare, hence we don't describe how to change Japanese fonts in math mode in -this chapter. For the method, please see Subsection~\ref{ssec-math}. +this chapter. For the method, please see Subsection~\ref{ssec:math}. + +{\emshape When \LuaTeX-ja is loaded with \texttt{disablejfam}~option, + one cannot write Japanese characters in math mode as~\verb+$素$+. + At that case, one have to use \cs{mbox} (or~\cs{text} in the \Pkg{amsmath} package). +} % %<*ja> -また\LuaTeX-jaプロジェクトでは,和文文字が識別子として用いられることはほとんどない +なお\LuaTeX-jaプロジェクトでは,和文文字が識別子として用いられることはほとんどない と考えており,したがってこの節では数式モード中の和文フォントを変更する方法については -記述しない.この方法については\ref{ssec-math}節を参照のこと. +記述しない.この方法については\ref{ssec:math}節を参照のこと. + +{\gtfamily\bfseries + 既に記述した通り,\texttt{disablejfam}オプションを指定して\LuaTeX-jaを読み込んだ場合は, + \verb+$素$+ のように直接和文文字を数式モード中に記述することはできなくなる. + \cs{mbox},あるいは\Pkg{amsmath}パッケージの提供する\cs{text}命令などを使うことになる. +} % + + %\subsection{\Pkg{luatexja-fontspec} package} %\subsection{\Pkg{luatexja-fontspec}パッケージ} -\label{ssec-fontspec} +\label{ssec:fontspec} %<*en> To use the functionality of the \Pkg{fontspec} package to Japanese fonts, it is needed to load the \Pkg{luatexja-fontspec} package in the preamble, as follows: @@ -1405,16 +1466,21 @@ TrueType・OpenTypeフォントを容易に扱うためのパッケージであ % %<*en> -In the \Pkg{luatexja-fontspec} package, the following seven~commands are defined as -counterparts of original commands in the \Pkg{fontspec} package: +In the \Pkg{luatexja-fontspec} package, several commands are defined as +counterparts of original commands in the \Pkg{fontspec} package +(see \autoref{tab:ltj_fntspc}): % %<*ja> -\Pkg{luatexja-fontspec}パッケージでは,以下の7つのコマンドを\Pkg{fontspec} -パッケージの元のコマンドに対応するものとして定義している: +\Pkg{luatexja-fontspec}パッケージでは,\autoref{tab:ltj_fntspc}の +「和文」行に示した命令を\Pkg{fontspec}パッケージの元のコマンド(「欧文」行) +に対応するものとして定義している: % %<*en> -\begin{center}\small -\begin{tabular}{ccccc} +\begin{table} +\caption{Commands of \Pkg{luatexja-fontspec}}\label{tab:ltj_fntspc} +\medskip +{\centering\small +\begin{tabular}{cllll} \toprule Japanese fonts &\cs{jfontspec}&\cs{setmainjfont}&\cs{setsansjfont}&\cs{setmonojfont}$^*$\\ @@ -1422,36 +1488,62 @@ alphabetic fonts &\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule Japanese fonts -&\cs{newjfontfamily}&\cs{newjfontface} -&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +&\cs{newjfontfamily}&\cs{renewjfontfamily}$^{**}$&\cs{setjfontfamily}$^{**}$\\ +alphabetic fonts +&\cs{newfontfamily}&\cs{renewfontfamily}$^{**}$&\cs{setfontfamily}$^{**}$\\ +\midrule +Japanese fonts +&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ alphabetic fonts -&\cs{newfontfamily}&\cs{newfontface} -&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ +&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule -\end{tabular} -\end{center} +\end{tabular}\par} +\medskip +\fakefn{$^*$}{% + \cs{setmonojfont} is defined if and only if \texttt{match} option is specified.} +\fakefn{$^{**}$}{% + \cs{renewfontfamily}~and~\cs{setfontfamily} are new commands + in \Pkg{fontspec}~v2.6h (2018/7/30). + Hence, \Pkg{luatexja-fontspec} define \cs{renewjfontfamily}~and~\cs{setjfontfamily} + only when \Pkg{fontspec}~v2.6h (or later) is used. +} +\end{table} % %<*ja> -\begin{center}\small -\begin{tabular}{cccc} +\begin{table} +\caption{\Pkg{luatexja-fontspec}で定義される命令}\label{tab:ltj_fntspc} +\medskip +{\centering\small +\begin{tabular}{lllll} \toprule -和文 -&\cs{jfontspec}&\cs{setmainjfont}&\cs{setsansjfont}\\ -欧文 -&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}\\ +\emph{和文} +&\cs{jfontspec}&\cs{setmainjfont}&\cs{setsansjfont}&\cs{setmonojfont}$^*$\\ +\emph{欧文} +&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\ \midrule -和文 -&\cs{newjfontfamily}&\cs{newjfontface}&\cs{defaultjfontfeatures}\\ -欧文 -&\cs{newfontfamily}&\cs{newfontface}&\cs{defaultfontfeatures}\\ +\emph{和文} +&\cs{newjfontfamily}&\cs{renewjfontfamily}$^{**}$&\cs{setjfontfamily}$^{**}$\\ +\emph{欧文} +&\cs{newfontfamily}&\cs{renewfontfamily}$^{**}$&\cs{setfontfamily}$^{**}$\\ \midrule -和文 -&\cs{addjfontfeatures}\\ -欧文 -&\cs{addfontfeatures}\\ +\emph{和文} +&\cs{newjfontface}&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\ +\emph{欧文} +&\cs{newfontface}&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\ \bottomrule -\end{tabular} -\end{center} +\end{tabular}\par} + +\medskip +\fakefn{$^*$}{\cs{setmonojfont} は \texttt{match} オプションが +指定された時のみ定義される.} +\fakefn{$^{**}$}{% + \cs{renewfontfamily} と \cs{setfontfamily} は + \Pkg{fontspec}~v2.6h (2018/7/30)で新たに追加された命令である. + そのため,\Pkg{luatexja-fontspec}が \cs{renewjfontfamily} と \cs{setjfontfamily} を + 定義するのはv2.6h以降の\Pkg{fontspec}を使用した時のみになっている. +} + +\end{table} % % The package option of \Pkg{luatexja-fontspec} are the followings: @@ -1482,13 +1574,23 @@ if and only if this \texttt{\textup{match}} option is specified}. \item[scale=] %<*en> Override the ratio of the font size of Japanese fonts to that of alphabetic fonts. -The default value is calculated automatically (for~example, about~0.924865 when - the \Pkg{ltjsarticle} class is used). +The default value is determined as follows: + \begin{itemize} + \item The value of \cs{Cjascale} is used, if this control sequence is already defined. + \item It is calculated automatically from the current Japanese font at the loading of the + package, if \cs{Cjascale} is not defined. + \end{itemize} +\cs{Cjascale} is defined in \Pkg{ltjclasses} and \Pkg{ltjsclasses}. % %<*ja> -欧文に対する和文の比率は,標準では \Pkg{luatexja-fontspec}読み込み時の和欧文比率から -自動計算される(例えば,\Pkg{ltjsarticle}クラス使用時には和文は欧文の約0.924865倍となる)が, -それを手動で上書きするときに使用する. +欧文に対する和文の比率を手動で上書きするときに使用する. +標準では +\begin{itemize} + \item \cs{Cjascale}が定義されている場合 + \footnote{\LuaTeX-ja が用意しているクラスファイル(\Pkg{ltjclasses},~\Pkg{ltjsclasses})を + 使う場合はこちらに当てはまる.}は,それを用いる. + \item \cs{Cjascale}が未定義の場合は,\Pkg{luatexja-fontspec}読み込み時の和文フォントから自動計算される. +\end{itemize} % \end{cslist} @@ -1535,1901 +1637,1291 @@ JIS~X~0208:1990→辻 %\subsection{Presets of Japanese fonts} %\subsection{和文フォントのプリセット設定} -\label{ssec-preset} +\label{ssec:preset-abst} %<*en> -One can load the \Pkg{luatexja-preset} -package to use several ``presets'' of Japanese fonts. -This package provides functions in a part of -\Pkg{japanese-otf} package and a part of \Pkg{PXchfon} package by Takayuki Yato. - -One can specified other options other than listed in this subsection. -These are simply passed to the \Pkg{luatexja-fontspec}\footnote{if \texttt{nfssonly} option is -\emph{not} specified; in this case these options are simply ignored.}. -For example, the line~5 in below example is eqivalent to lines 1--3. +With \Pkg{luatexja-preset} package, +one use one of ``preset'' to simplify Japanese font setting. +For details of package options, and those of each presets, please see Subsecion~\ref{ssec:preset}. +The following presets are defined: % %<*ja> よく使われている和文フォント設定を一行で指定できるようにしたのが -\Pkg{luatexja-preset}パッケージである.このパッケージは, -\Pkg{otf}パッケージの一部機能と八登崇之氏による\Pkg{PXchfon}パッケージの一部機能とを -合わせたような格好をしている. - -オプションとして,本節にないものも指定することができるが,それらは -\Pkg{luatexja-fontspec}パッケージに渡される\footnote{\texttt{nfssonly} オプションが -指定されていた場合は,\Pkg{luatexja-fontspec}パッケージは読み込まれないので単純に無視され -る.}.例えば,下の1--3行目は5行目のように一行にまとめることができる. +\Pkg{luatexja-preset}パッケージである.オプションや各プリセットの詳細については +\ref{ssec:preset}節を参照して欲しい. +現時点では以下のプリセットが定義されている: % +\begin{quote} + \ttfamily + \hyphenchar\font=-1 \exhyphenchar=-1 + hiragino-pro, hiragino-pron, ipa, ipa-hg, ipaex, ipaex-hg, + kozuka-pr6, kozuka-pr6n, kozuka-pro, moga-mobo, moga-mobo-ex, + bizud, morisawa-pr6n, morisawa-pro, ms, ms-hg, noembed, noto-otc, noto-otf, + sourcehan, sourcehan-jp, ume, yu-osx, yu-win, yu-win10 +\end{quote} + +% 例えば,本ドキュメントでは\Pkg{luatexja-preset}パッケージを +% For example, this document loads \Pkg{luatexja-preset} package by \begin{lstlisting} -\usepackage[no-math]{fontspec} -\usepackage[match]{luatexja-fontspec} \usepackage[kozuka-pr6n]{luatexja-preset} -%%-------- -\usepackage[no-math,match,kozuka-pr6n]{luatexja-preset} \end{lstlisting} +%として読み込み,小塚書体(Pr6N)を使うことを指定している. +% which means that Kozuka~Pr6N fonts will be used in this document. -%\paragraph{General options} -%\paragraph{一般的なオプション} -\begin{cslist}[before*=] -\item[fontspec% -%\textrm{~(enabled by default)} -%\emph{\gtfamily (既定)} -] -%<*en> -With this option, Japanese fonts are selected using functionality of -the \Pkg{luatexja-fontspec} package. This means that the \Pkg{fontspec} package is - automatically loaded by this package. -If you need to pass some options to \Pkg{fontspec}, you can load \Pkg{fontspec} manually -before \Pkg{luatexja-preset}: +%<*en> +\subsection{\cs{CID}, \cs{UTF}, and macros in \Pkg{japanese-otf} package} +Under \pLaTeX, \Pkg{japanese-otf} package (developed by Shuzaburo Saito) is +used for typesetting characters which is in Adobe-Japan1-6 CID but not +in JIS~X~0208. Since this package is widely used, \LuaTeX-ja +supports some of functions in the \Pkg{japanese-otf} package, +as an external package \Pkg{luatexja-otf}. % %<*ja> -\Pkg{luatexja-fontspec}パッケージの機能を用いて和文フォントを選択する. -これは,\Pkg{fontspec}パッケージが自動で読み込まれることを意味する. - -もし\Pkg{fontspec}パッケージに何らかのオプションを渡す必要がある -\footnote{例えば,数式フォントまで置換されてしまい,\cs{mathit}によってギリシャ文字の -斜体大文字が出なくなる,など.}場合は, -次のように\Pkg{luatexja-preset}の前に\Pkg{fontspec}を手動で読みこめば良い: +\subsection{\cs{CID}, \cs{UTF}と\Pkg{otf}パッケージのマクロ} +\pLaTeX では,JIS~X~0208にないAdobe-Japan1-6の文字を出力するために, +齋藤修三郎氏による\Pkg{otf}パッケージが用いられていた.このパッケージは +広く用いられているため,\LuaTeX-jaにおいても\Pkg{otf}パッケージの機能の +一部を(\Pkg{luatexja-otf}という別のパッケージとして)実装した. % -\begin{lstlisting} -\usepackage[no-math]{fontspec} -\usepackage[...]{luatexja-preset} -\end{lstlisting} -\item[nfssonly] -%<*en> -With this option, selecting Japanese fonts won't be performed using the functionality of - the \Pkg{fontspec} package, but only standard NFSS2 (hence without - \cs{addjfontfeatures} etc.). -This option is ignored when \Pkg{luatexja-fontspec} package is loaded. +\begin{LTXexample} +\jfontspec{KozMinPr6N-Regular.otf} +森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。 + +\CID{7652}飾区の\CID{13706}野家, +\CID{1481}城市,葛西駅, +高崎と\CID{8705}\UTF{FA11} + +\aj半角{はんかくカタカナ} +\end{LTXexample} -When this option is specified, \Pkg{fontspec}~and~\Pkg{luatexja-fontspec} are -\emph{not} loaded by default. Nevertheless, -the package\Pkg{fontspec} can coexist with the option, as the following: -\begin{lstlisting} -\usepackage{fontspec} -\usepackage[hiragino-pron,nfssonly]{luatexja-preset} -\end{lstlisting} -In this case, one can use \cs{setmainfont} etc.\ to select \emph{alphabetic} fonts. -% %<*ja> -\LaTeX 標準のフォント選択機構(NFSS2)を用いて -\texttt{ltjpm}(明朝),\texttt{ltjpg}(ゴシック),それに後に述べる \texttt{deluxe} オプ - ションが指定された場合には \texttt{ltjpmg}(丸ゴシック)という -3つの和文フォントファミリを定義し,これらを用いる. +\Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した: +\begin{cslist} +\item[deluxe] 明朝体・ゴシック体各3ウェイトと,丸ゴシック体を扱えるようになる. +\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も +\ \cs{rubyfamily}\ によって扱えるようになる. +\item[bold] ゴシック体を標準で太いウェイトのものに設定する. +\end{cslist} +しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない. +\Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し, +\Pkg{luatexja-otf}パッケージでは,そのようなことは行わないからである. -本オプション指定時には\Pkg{fontspec}・\Pkg{luatexja-fontspec}パッケージは -自動では読み込まれない,しかし, -\begin{lstlisting} -\usepackage{fontspec} -\usepackage[hiragino-pron,nfssonly]{luatexja-preset} -\end{lstlisting} -のようにすれば,このオプションを指定すれば -欧文フォントを\Pkg{fontspec}パッケージの機能を使って指定することができる. -一方, -パッケージ読み込み時に既に\Pkg{luatexja-fontspec}パッケージが読み込まれて - いる場合は \texttt{nfssonly} オプションは無視される. +これら3オプションについては, +\Pkg{luatexja-preset} パッケージにプリセットを使う時に一緒に指定するか, +あるいは対応する内容を\ref{ssec:chgfnt}節,\ref{ssec:nfsspat}節 (NFSS2) や +\ref{ssec:fontspec}節 (\Pkg{fontspec}) の方法で手動で指定する必要がある. % -\item[match] +%\section{Changing Internal Parameters} +%\section{パラメータの変更} + %<*en> -If this option is specified, usual family-changing commands such as -\cs{rmfamily},~\cs{textrm}, \cs{sffamily},~\dots\ also change Japanese font family. -This option is passed to \Pkg{luatexja-fontspec}, if \texttt{fontspec} -option is specifed. +There are many internal parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX, +most of them are not stored as internal register of \TeX, but as an +original storage system in \LuaTeX-ja. Hence, to assign or acquire those +parameters, you have to use commands \cs{ltjsetparameter} and +\cs{ltjgetparameter}. % - %<*ja> -このオプションが指定されると,「\pLaTeXe 新ドキュメントクラス」のように\ -\cs{rmfamily}, \verb+\textrm{...}+, \cs{sffamily} 等が -欧文フォントだけでなく和文フォントも変更するようになる. -\ \texttt{fontspec}\ -オプションが有効になっている場合は,このオプションは \Pkg{luatexja-fontspec} パッケージへと渡される. +\LuaTeX-jaには多くのパラメータが存在する.そして\LuaTeX の仕様のために, +その多くは\TeX のレジスタにではなく,\LuaTeX-ja独自の方法で保持されている. +これらのパラメータを設定・取得するためには \cs{ltjsetparameter} と \cs{ltjgetparameter} を +用いる. % +%\subsection{Range of \textbf{JAchar}s} +%\subsection{\textbf{JAchar}の範囲} +\label{ssec:setrange} -\item[nodeluxe% -%\textrm{~(enabled by default)} -%\emph{\gtfamily (既定)} -] %<*en> -The nagation of \texttt{deluxe} option. -Use one-weighted \textit{mincho} and \textit{gothic} font families. -This means that \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+ and -\verb+\gtfamily\mdseries+ use the same font. +\LuaTeX-ja divides the Unicode codespace \texttt{U+0080}--\texttt{U+10FFFF} +into \emph{character ranges}, +numbered 1 to 217. The grouping can be (globally) customized by \cs{ltjdefcharrange}. +The next line adds whole characters in Supplementary Ideographic Plane +and the character ``漢'' to the character range~100. % %<*ja> -\texttt{deluxe}オプションの否定. -\LaTeXe 環境下の標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する. -より具体的に言うと,この設定の下では -\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+, -\verb+\gtfamily\mdseries+はみな同じフォントとなる. +\LuaTeX-jaは,Unicodeの \texttt{U+0080}--\texttt{U+10FFFF} の空間を +1番から217番までの\emph{文字範囲}に分割している. +区分けは \cs{ltjdefcharrange} を用いることで(グローバルに)変更することができ, +例えば,次は追加漢字面(SIP)にある全ての文字と「漢」を「100番の文字範囲」に追加する. % -\item[deluxe] +\begin{lstlisting} +\ltjdefcharrange{100}{"20000-"2FFFF,`漢} +\end{lstlisting} + %<*en> -Use \textit{mincho} with two weights (medium~and~bold), -\textit{gothic} with three weights (medium, bold~and~heavy), and \textit{rounded gothic}% -\footnote{Provided by \cs{mgfamily} and \cs{textmg}, -because \textit{rounded gothic} is called \textit{maru gothic} (丸ゴシック) in Japanese.}. -The heavy weight of \textit{gothic} can be used by ``changing the family'' \cs{gtebfamily}, -or \verb+\textgteb{...}+. -This is because the \Pkg{fontspec} package can handle only medium (\cs{mdseries}) and -bold (\cs{bfseries}). +A character can belong to only one character range. +For example, whole SIP belong to the range~4 in the default setting of \LuaTeX-ja, +and if one executes the above line, then SIP will belong to the range~100 and be +removed from the range~4. % %<*ja> -明朝体2ウェイト・ゴシック体3ウェイトと, -丸ゴシック体 (\cs{mgfamily}, \verb+\textmg{...}+) を使用可能とする. -ゴシック体は中字・太字・極太の3ウェイトがあるが, -極太ゴシック体を使う場合, -\begin{itemize} - \item \cs{gtebfamily}, \verb+\textgteb{...}+ - \item \cs{ebseries} (周囲がゴシック体のとき,\texttt{nfssonly} オプション指定時のみ) -\end{itemize} -のいずれかを用いる.標準で \cs{ebseries} が準備されていないのは,バージョンが古い -\Pkg{fontspec}では中字(\cs{mdseries})と太字(\cs{bfseries})しか扱えなかった名残である. +各文字はただ一つの文字範囲に所属することができる. +例えば,SIP内の文字は全て\LuaTeX-jaのデフォルトでは4番の文字範囲に +属しているが,上記の指定を行えばSIP内の文字は100番に属すようになり,4番からは除かれる. % -\item[expert] + %<*en> -Use horizontal/vertical kana alternates, and define a command \cs{rubyfamily} to use kana -characters designed for ruby. +The distinction between \textbf{ALchar} and \textbf{JAchar} is performed by character ranges. +This can be edited by setting the \textsf{jacharrange} parameter. +For example, the code below is just the default setting of \LuaTeX-ja, and +it sets +\begin{itemize} + \item a character which belongs character ranges 1,~4, 5, and~8 is \textbf{ALchar}, + \item a character which belongs character ranges 2,~3, 6, and~7 is \textbf{JAchar}. +\end{itemize} % %<*ja> -横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{% - \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では - font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え). -}. +\textbf{ALchar}と\textbf{JAchar}の区別は文字範囲ごとに行われる. +これは\textsf{jacharrange}パラメータによって編集できる. +例えば,以下は\LuaTeX-jaの初期設定であり,次の内容を設定している: +\begin{itemize} + \item 1番,4番,5番,8番の文字範囲に属する文字は\textbf{ALchar}. + \item 2番,3番,6番,7番の文字範囲に属する文字は\textbf{JAchar}. +\end{itemize} % -\item[bold] -%<*en> -Substitute bold series of \textit{gothic} for bold series of \textit{mincho}. -If \texttt{nodeluxe} option is enabled, medium series of \textit{gothic} is also changed, -since we use same font for both series of \textit{gothic}. -% +\begin{lstlisting} +\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}} +\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 +\textbf{ALchar}'', +and positive integer $+n$ means that ``\dots\ is a \textbf{JAchar}''. +% %<*ja> -「明朝の太字」をゴシック体の太字によって代替する. -もし\texttt{nodeluxe}オプションが指定されている場合は,ゴシック体は1ウェイトしか使用されな - いため, -「ゴシック体の中字」も同時に変更されることになる. +\textsf{jacharrange}パラメータの引数は非零の整数のリストである. +リスト中の負の整数$-n$は「文字範囲$n$に属する文字は\textbf{ALchar}として +扱う」ことを意味し,正の整数$+n$は「\textbf{JAchar}として扱う」ことを意味する. % -\item[90jis] -%Use 90JIS glyph variants if possible. -%出来る限り90JISの字形を使う. -\item[jis2004] -%Use JIS2004 glyph variants if possible. -%出来る限りJIS2004の字形を使う. -\item[jfm\_yoko=] + %<*en> -Use the JFM \texttt{jfm-.lua} for horizontal direction, instead of \texttt{jfm-ujis.lua}~(default JFM). +Note that characters \texttt{U+0000}--\texttt{U+007F} are always treated as an +\textbf{ALchar} (this cannot be customized). % %<*ja> -横組用和文フォントで用いるJFMを\texttt{jfm-.lua}にする.このオプションがない時は -\LuaTeX\nobreakdash -ja標準の\texttt{jfm-ujis.lua}が用いられる. +なお,\texttt{U+0000}--\texttt{U+007F} は常に\textbf{ALchar}として扱われる(利用者が変更す +ることは出来ない). % -\item[jfm\_tate=] + %<*en> -Use the JFM \texttt{jfm-.lua} for vertical direction, instead of \texttt{jfm-ujisv.lua}~(default JFM). +\paragraph{Default character ranges} +\LuaTeX-ja predefines eight character ranges for convenience. They are +determined from the following data: % %<*ja> -縦用和文フォントで用いるJFMを\texttt{jfm-.lua}にする.このオプションがない時は -\LuaTeX-ja標準の\texttt{jfm-ujisv.lua}が用いられる. +\paragraph{文字範囲の初期値} +\LuaTeX-jaでは8つの文字範囲を予め定義しており, +これらは以下のデータに基づいて決定している. % +\begin{itemize} +%\item Blocks in Unicode~12.0.0. +%\item Unicode~11.0のブロック. +%\item The \texttt{Adobe-Japan1-UCS2} mapping between a CID Adobe-Japan1-6 and Unicode. +%\item Adobe-Japan1-6のCIDとUnicodeの間の対応表\texttt{Adobe-Japan1-UCS2}. +%\item The \Pkg{PXbase} bundle for \upTeX\ by Takayuki Yato. +%\item 八登崇之氏による\upTeX 用の\Pkg{PXbase}バンドル. +\end{itemize} -\item[jis] -%Same as \texttt{jfm\_yoko=jis}. -%\texttt{jfm\_yoko=jis}と同じ.ここで用いるJFM\texttt{jfm-jis.lua}はJISフォントメトリックを元にしたものである. - -\end{cslist} %<*en> -Note that \texttt{90jis} and \texttt{jis2004} only affect with \textit{mincho}, -\textit{gothic} (and possibly \textit{rounded gothic}) defined by this package. -We didn't taken account of when both \texttt{90jis} and \texttt{jis2004} are specified. +Now we describe these eight ranges. The superscript ``J'' or ``A'' after the +number shows whether each character in the range is treated as +\textbf{JAchar}s or not by default. These settings are similar to the +\texttt{prefercjk} settings defined in \texttt{PXbase} bundle. +Any characters equal to or above \texttt{U+0080} which does not belong to +these eight ranges belongs to the character range~217. % %<*ja> -\texttt{90jis}と\texttt{jis2004}については本パッケージで定義された -明朝体・ゴシック体(・丸ゴシック体)にのみ有効である. -両オプションが同時に指定された場合の動作については全く考慮していない. +以下ではこれら8つの文字範囲について記述する.添字のアルファベット「J」「A」 +は,その文字範囲内の文字が\textbf{JAchar}か\textbf{ALchar}かを表している.これらの初期設定は +\texttt{PXbase}バンドルで定義されている\texttt{prefercjk}と類似のものであるが, +8ビットフォント使用時のトラブルを防ぐために \texttt{U+0080}--\texttt{U+00FF} の文字は全部 +\textbf{ALchar}としている. +なお,\texttt{U+0080} 以降でこれら8つの文字範囲に属さない文字は,217番の文字範囲に属することになっている. % - -%\paragraph{Presets for multi weight} -%\paragraph{多ウェイト用プリセットの一覧} +\begin{description} %<*en> -Besides \texttt{morisawa-pro}~and~\texttt{morisawa-pr6n} presets, -fonts are specified by font name, not by file name. -In following tables, starred fonts (e.g.~KozGo\dots-Regular) are used for medium series of \textit{gothic}, -\emph{if and only if \texttt{deluxe} option is specified}. + +\item[Range~8${}^{\text{A}}$] 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: % %<*ja> -\texttt{morisawa-pro}, \texttt{morisawa-pr6n}以外はフォントの指定は -(ファイル名でなく)フォント名で行われる. -以下の表において,*\,つきのフォント(e,g,~KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション指定時に} -ゴシック体中字として用いられるものを示している. +\item[範囲8${}^{\text{A}}$] ISO~8859-1の上位領域(ラテン1補助)と + JIS~X~0208の共通部分.この文字範囲は + 以下の文字で構成される: % -\begin{cslist}[style=standard] - \item[kozuka-pro] Kozuka Pro (Adobe-Japan1-4) fonts. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[kozuka-pr6] Kozuka Pr6 (Adobe-Japan1-6) fonts. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[kozuka-pr6n] Kozuka Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts. +\begin{multicols}{2} +\begin{itemize} +\def\ch#1#2{\item \char"#1\ (\texttt{U+00#1}, #2)}%" +\ch{A7}{Section Sign} +\ch{A8}{Diaeresis} +\ch{B0}{Degree sign} +\ch{B1}{Plus-minus sign} +\ch{B4}{Spacing acute} +\ch{B6}{Paragraph sign} +\ch{D7}{Multiplication sign} +\ch{F7}{Division Sign} +\end{itemize} +\end{multicols} %<*en> -Kozuka Pro/Pr6N fonts are bundled with Adobe's software, such as Adobe~InDesign. -There is not rounded gothic family in Kozuka fonts. +\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-6. +This range consists of the following Unicode ranges, \emph{except characters in the range~8 above}: % %<*ja> -小塚Pro書体・Pr6N書体はAdobe InDesign等のAdobe製品にバンドルされている. -「小塚丸ゴシック」は存在しないので,便宜的に小塚ゴシックHによって代用している. +\item[範囲1${}^{\text{A}}$] ラテン文字のうち,Adobe-Japan1-6との共通部分があるもの. + この範囲は以下のUnicodeのブロックのうち + \emph{範囲8を除いた}部分で構成されている: % -\begin{center}\small -\begin{tabular}{cllll} -\toprule -\bfseries family&\bfseries series&\ttfamily kozuka-pro&\ttfamily kozuka-pr6&\ttfamily kozuka-pr6n\\ -\midrule - &medium&KozMinPro-Regular&KozMinProVI-Regular&KozMinPr6N-Regular\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&KozMinPro-Bold&KozMinProVI-Bold&KozMinPr6N-Bold\\ -\midrule - &&KozGoPro-Regular*&KozGoProVI-Regular*&KozGoPr6N-Regular*\\ - &\smash{\raisebox{1.5ex}{medium}} - &KozGoPro-Medium&KozGoProVI-Medium&KozGoPr6N-Medium\\ -\cmidrule(l){2-5} -%\smash{\raisebox{2ex}{\textit{gothic}}}% -%\smash{\raisebox{2ex}{\gt ゴシック}}% - &bold&KozGoPro-Bold&KozGoProVI-Bold&KozGoPr6N-Bold\\ - &heavy&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\ -\bottomrule +\begin{multicols}{2} +\begin{itemize} +\item \texttt{U+0080}--\texttt{U+00FF}: Latin-1 Supplement +\item \texttt{U+0100}--\texttt{U+017F}: Latin Extended-A +\item \texttt{U+0180}--\texttt{U+024F}: Latin Extended-B +\item \texttt{U+0250}--\texttt{U+02AF}: IPA Extensions +\item \texttt{U+02B0}--\texttt{U+02FF}: Spacing Modifier Letters +%\par\ +\item \texttt{U+0300}--\texttt{U+036F}: \\*\null\hfill Combining Diacritical Marks +\item \texttt{U+1E00}--\texttt{U+1EFF}: \\*\null\hfill Latin Extended Additional +%\par\ +\end{itemize} +\end{multicols} +%<*en> +\item[Range~2${}^{\text{\kern.1emJ}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese + fonts) has some of these characters. +% +%<*ja> +\item[範囲2${}^{\text{\kern.1emJ}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの + 和文フォント)には,これらの文字の一部が含まれている. +% +\begin{multicols}{2} +\begin{itemize} +\item \texttt{U+0370}--\texttt{U+03FF}: Greek and Coptic +\item \texttt{U+0400}--\texttt{U+04FF}: Cyrillic +\item \texttt{U+1F00}--\texttt{U+1FFF}: Greek Extended +\\\ +\end{itemize} +\end{multicols} +%<*en> +\item[Range~3${}^{\text{\kern.1emJ}}$] Punctuations and Miscellaneous symbols. The block list is + indicated in \autoref{tab:rng3}. +% +%<*ja> +\item[範囲3${}^{\text{\kern.1emJ}}$] 句読点と記号類.ブロックのリストは\autoref{tab:rng3}% + に示してある. +% +\begin{table}[!tb] +%\caption{Unicode blocks in predefined character range~3.}\medskip +%\caption{文字範囲3に指定されているUnicodeブロック.} +\label{tab:rng3} +\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" +\centering\footnotesize +\begin{tabular}{llll} +"2000--"206F&General Punctuation& +"2070--"209F&Superscripts and Subscripts\\ +"20A0--"20CF&Currency Symbols& +"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\ +"2100--"214F&Letterlike Symbols& +"2150--"218F&Number Forms\\ +"2190--"21FF&Arrows& +"2200--"22FF&Mathematical Operators\\ +"2300--"23FF&Miscellaneous Technical& +"2400--"243F&Control Pictures\\ +"2500--"257F&Box Drawing& +"2580--"259F&Block Elements\\ +"25A0--"25FF&Geometric Shapes& +"2600--"26FF&Miscellaneous Symbols\\ +"2700--"27BF&Dingbats& +"2900--"297F&Supplemental Arrows-B\\ +"2980--"29FF&Misc.\ Math Symbols-B& +"2B00--"2BFF&Misc.\ Symbols and Arrows \end{tabular} -\end{center} - - \item[hiragino-pro] Hiragino Pro (Adobe-Japan1-5) fonts. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[hiragino-pron] Hiragino ProN (Adobe-Japan1-5, JIS04-savvy) fonts. - +\end{table} %<*en> -Hiragino fonts are bundled with Mac OS~X 10.5 or later. -Some editions of a Japanese word-processor ``一太郎2012'' includes Hiragino ProN fonts. -Note that the heavy weight of \textit{gothic} family only supports -Adobe-Japan1-3 character collection (Std/StdN). +\item[Range~4${}^{\text{A}}$] Characters usually not in Japanese fonts. This range consists + of almost all Unicode blocks which are not in other + predefined ranges. Hence, instead of showing the block list, + we put the definition of this range itself: % %<*ja> -ヒラギノフォントは,Mac OS~X以外にも,一太郎2012の上位エディションにもバンドルされている. -極太ゴシックとして用いるヒラギノ角ゴW8は,Adobe-Japan1-3の範囲しかカバーしていない -Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. +\item[範囲4${}^{\text{A}}$] 通常和文フォントには含まれていない文字. + この範囲は他の範囲にないほとんど全てのUnicodeブロック + で構成されている.したがって,ブロックのリストを示す + 代わりに,範囲の定義そのものを示す: % -\begin{center}\small -\begin{tabular}{clll} -\toprule -\bf family&\bf series&\tt hiragino-pro&\tt hiragino-pron\\ -\midrule - &medium&Hiragino~Mincho~Pro~W3&Hiragino~Mincho~ProN~W3\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&Hiragino~Mincho~Pro~W6&Hiragino~Mincho~ProN~W6\\ -\midrule - &&Hiragino~Kaku~Gothic~Pro~W3*&Hiragino~Kaku~Gothic~ProN~W3*\\ - &\smash{\raisebox{1.5ex}{medium}} - &Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\ -\cmidrule(l){2-4} -%\smash{\raisebox{2ex}{\textit{gothic}}}% -%\smash{\raisebox{2ex}{\gt ゴシック}}% - &bold&Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\ - &heavy&Hiragino~Kaku~Gothic~Std~W8&Hiragino~Kaku~Gothic~StdN~W8\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&Hiragino~Maru~Gothic~Pro~W4&Hiragino~Maru~Gothic~ProN~W4\\ -\bottomrule +\begin{lstlisting} +\ltjdefcharrange{4}{% + "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF, + "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF, + "FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF, + "1F300-"1FFFF +} % non-Japanese +\end{lstlisting} +%\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas. +%\item[範囲5${}^{\text{A}}$] 代用符号と補助私用領域. +%\item[Range~6${}^{\text{\kern.1emJ}}$] Characters used in Japanese. The block list is indicated in \autoref{tab:rng6}. +%\item[範囲6${}^{\text{\kern.1emJ}}$] 日本語で用いられる文字.ブロックのリストは\autoref{tab:rng6}に示す. +\begin{table}[!tb] +%\caption{Unicode blocks in predefined character range~6.}\medskip +%\caption{文字範囲6に指定されているUnicodeブロック.} +\label{tab:rng6} +\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" +\centering\footnotesize +\begin{tabular}{llll} +"2460--"24FF&Enclosed Alphanumerics& +"2E80--"2EFF&CJK Radicals Supplement\\ +"3000--"303F&CJK Symbols and Punctuation& +"3040--"309F&Hiragana\\ +"30A0--"30FF&Katakana& +"3190--"319F&Kanbun\\ +"31F0--"31FF&Katakana Phonetic Extensions& +"3200--"32FF&Enclosed CJK Letters and Months\\ +"3300--"33FF&CJK Compatibility& +"3400--"4DBF&CJK Unified Ideographs Ext-A\\ +"4E00--"9FFF&CJK Unified Ideographs& +"F900--"FAFF&CJK Compatibility Ideographs\\ +"FE10--"FE1F&Vertical Forms& +"FE30--"FE4F&CJK Compatibility Forms\\ +"FE50--"FE6F&Small Form Variants& +"FF00--"FFEF&Halfwidth and Fullwidth Forms\\ +"{1B}000--"{1B}0FF&Kana Supplement& +"{1B}100--"{1B}12F&Kana Extended-A\\ +%"{1B}130--"{1B}16F&Small Kana Extension +"{1F}100--"{1F}1FF&Enclosed Alphanumeric Supp.& +"{1F}200--"{1F}2FF&Enclosed Ideographic Supp.\\ +"{20}000--"{2F}FFF&(Supp. Ideographic Plane)& +"{E0}100--"{E0}1EF&Variation Selectors Supp. \end{tabular} -\end{center} - - \item[morisawa-pro] Morisawa Pro (Adobe-Japan1-4) fonts. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[morisawa-pr6n] Morisawa Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts. -\begin{center}\small -\begin{tabular}{cl>{\tt}l>{\tt}l} -\toprule -\bf family&\bf series&morisawa-pro&morisawa-pr6n\\ -\midrule - &medium&A-OTF-RyuminPro-Light.otf&A-OTF-RyuminPr6N-Light.otf\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&A-OTF-FutoMinA101Pro-Bold.otf&A-OTF-FutoMinA101Pr6N-Bold.otf\\ -\midrule - &medium - &A-OTF-GothicBBBPro-Medium.otf&A-OTF-GothicBBBPr6N-Medium.otf\\ -%\textit{gothic}% -%\gt ゴシック - &bold&A-OTF-FutoGoB101Pro-Bold.otf&A-OTF-FutoGoB101Pr6N-Bold.otf\\ - &heavy&A-OTF-MidashiGoPro-MB31.otf&A-OTF-MidashiGoPr6N-MB31.otf\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&A-OTF-Jun101Pro-Light.otf&A-OTF-ShinMGoPr6N-Light.otf\\ -\bottomrule +\end{table} +%<*en> +\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6. +The block list is indicated in \autoref{tab:rng7}. +% +%<*ja> +\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に + 含まれていないもの. + ブロックのリストは\autoref{tab:rng7}に示す. +% +\begin{table}[!tb] +%\caption{Unicode blocks in predefined character range~7.}\medskip +%\caption{文字範囲7に指定されているUnicodeブロック.} +\label{tab:rng7} +\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" +\centering\small +\begin{tabular}{llll} +"1100--"11FF&Hangul Jamo& +"2F00--"2FDF&Kangxi Radicals\\ +"2FF0--"2FFF&Ideographic Description Characters& +"3100--"312F&Bopomofo\\ +"3130--"318F&Hangul Compatibility Jamo& +"31A0--"31BF&Bopomofo Extended\\ +"31C0--"31EF&CJK Strokes& +"A000--"A48F&Yi Syllables\\ +"A490--"A4CF&Yi Radicals& +"A960--"A97F&Hangul Jamo Extended-A\\ +"AC00--"D7AF&Hangul Syllables& +"D7B0--"D7FF&Hangul Jamo Extended-B \end{tabular} -\end{center} +\end{table} +\end{description} -\newpage - \item[yu-win] Yu fonts bundled with Windows~8.1. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[yu-win10] Yu fonts bundled with Windows~10. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[yu-osx] Yu fonts bundled with OSX~Mavericks. -\begin{center}\small -\begin{tabular}{cllll} -\toprule -\bf family&\bf series&\texttt{yu-win}&\texttt{yu-win10}&\texttt{yu-osx}\\ -\midrule - &medium&YuMincho-Regular&YuMincho-Regular&YuMincho~Medium\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&YuMincho-Demibold&YuMincho-Demibold&YuMincho~Demibold\\ -\midrule - &&YuGothic-Regular*&YuGothic-Regular*&YuGothic~Medium*\\ - &\smash{\raisebox{1.5ex}{medium}}% - &YuGothic-Regular&YuGothic-Medium&YuGothic~Medium\\ -\cmidrule(l){2-5} -%\textit{gothic}% -%\gt ゴシック - &bold&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ - &heavy&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ -\bottomrule -\end{tabular} -\end{center} +%<*en> +\paragraph{Notes on \texttt{U+0080}--\texttt{U+00FF}} +You should treat characters in \\texttt{U+0080}--\texttt{U+00FF} as \textbf{ALchar}, +when you use traditional 8-bit fonts, such as the \Pkg{marvosym} package. -\item[moga-mobo] MogaMincho, MogaGothic, and MoboGothic. -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] -\item[moga-mobo-ex] MogaExMincho, MogaExGothic, and MoboExGothic. -%\par These fonts can be downloaded from \url{http://yozvox.web.fc2.com/}. -%これらのフォントは \url{http://yozvox.web.fc2.com/} からダウンロードできる. -\begin{center}\small -\begin{tabular}{clll} -\toprule -\bf family&\bf series&\bf default, \texttt{90jis}~option&\bf \texttt{jis2004} option\\ -\midrule - &medium&Moga90Mincho&MogaMincho\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&Moga90Mincho Bold&MogaMincho Bold\\ -\midrule - &medium&Moga90Gothic&MogaGothic\\ -%\textit{gothic}% -%\gt ゴシック - &bold&Moga90Gothic Bold&MogaGothic Bold\\ - &heavy&Moga90Gothic Bold&MogaGothic Bold\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&Mobo90Gothic&MoboGothic\\ -\bottomrule -\end{tabular} -\end{center} -%When \texttt{moga-mobo-ex} is specified, the font ``MogaEx90Mincho'' etc.\ are used. -%\texttt{moga-mobo-ex}オプション指定時にはMogaEx90MinchoなどのExが名前についたフォントが使われる. +For example, \cs{Frowny} which is provided by the \Pkg{marvosym} package has +the same codepoint as \S\ (\text{U+00A7}). +Hence, as previous versions of \LuaTeX-ja, if these characters are treated as +\text{JAchar}s, then \cs{Frowny} produces ``\ltjjachar`§'' (in a Japanese font). -\item[ume] Ume Mincho and Ume Gothic. -%\par These fonts can be downloaded from\\\hfill \url{https://ja.osdn.net/projects/ume-font/wiki/FrontPage}. -%これらのフォントは \url{https://ja.osdn.net/projects/ume-font/wiki/FrontPage} からダウンロードできる. -\begin{center}\small -\begin{tabular}{cll} -\toprule -\bf family&\bf series&\bf default\\ -\midrule - &medium&Ume Mincho\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&Ume Mincho\\ -\midrule - &&Ume Gothic*\\ - &\smash{\raisebox{1.5ex}{medium}}&Ume Gothic O5\\ -\cmidrule(l){2-3} -%\textit{gothic}% -%\gt ゴシック - &bold&Ume Gothic O5\\ - &heavy&Ume Gothic O5\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&Ume Gothic O5\\ -\bottomrule -\end{tabular} -\end{center} +To avoid such situations, the default setting of \LuaTeX-ja is changed in version~20150906.0 +so that all characters \texttt{U+0080}--\texttt{U+00FF} are treated as \textbf{ALchar}. -%\newpage - \item[sourcehan] Source Han Serif and Source Han Sans fonts (Language-specific OTF \textit{or} OTC) -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[sourcehan-jp] Source Han Serif JP and Source Han Sans JP fonts (Region-specific Subset OTF) -\begin{center}\small -\def\AD#1#2{Source Han #1 #2&Source Han #1 JP #2}% -\begin{tabular}{cllll} -\toprule -\bf family&\bf series&\texttt{sourcehan}&\texttt{sourcehan-jp}\\ -\midrule - &medium&\AD{Serif}{Regular}\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&\AD{Serif}{Bold}\\ -\midrule - &&\AD{Sans}{Regular*}\\ - &\smash{\raisebox{1.5ex}{medium}} - &\AD{Sans}{Medium}\\ -\cmidrule(l){2-4} -%\smash{\raisebox{2ex}{\textit{gothic}}}% -%\smash{\raisebox{2ex}{\gt ゴシック}}% - &bold&\AD{Sans}{Bold}\\ - &heavy&\AD{Sans}{Heavy}\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&\AD{Sans}{Heavy}\\ -\bottomrule -\end{tabular} -\end{center} +If you want to output a character as \textbf{ALchar} and \textbf{JAchar} regardless the range +setting, you can use \cs{ltjalchar} and \cs{ltjjachar} respectively, as the following example. +\begin{LTXexample}[width=0.3\textwidth] +\gtfamily\large % default, ALchar, JAchar +¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar +α, \ltjalchar`α, \ltjjachar`α % default: JAchar +\end{LTXexample} +% +%<*ja> +\paragraph{\texttt{U+0080}--\texttt{U+00FF}についての注意} +\LuaTeX-jaで,\Pkg{marvosym}パッケージ等,Unicodeフォントでなく +伝統的な8ビットフォントを用いる場合には注意が必要である. +例えば,\Pkg{marvosym}パッケージの提供する \cs{Frowny} も,符号位置は167,つまりUnicodeにおける +\S\ (\text{U+00A7}) と同じ符号位置にある. +即ち,以前のバージョンのように,「前節の文字範囲8内の文字は\textbf{JAchar}」という設定で +あったとすると,上記の \cs{Frowny} は和文フォントで「\ltjjachar`§」を出力することになる. - \item[noto-otc] Noto Serif CJK and Noto Sans CJK fonts (OTC) -% \\*[-\dimexpr\medskipamount+\baselineskip\relax] - \item[noto-otf] Noto Serif CJK and Noto Sans CJK fonts (Language-specific OTF) -\begin{center}\small -\def\AD#1#2{Noto #1 CJK #2&Noto #1 CJK JP #2}% -\begin{tabular}{cllll} -\toprule -\bf family&\bf series&\texttt{noto-otc}&\texttt{noto-otf}\\ -\midrule - &medium&\AD{Serif}{Regular}\\ -%\smash{\raisebox{1.5ex}{\textit{mincho}}}% -%\smash{\raisebox{1.5ex}{\gt 明朝}}% - &bold&\AD{Serif}{Bold}\\ -\midrule - &&\AD{Sans}{Regular*}\\ - &\smash{\raisebox{1.5ex}{medium}} - &\AD{Sans}{Medium}\\ -\cmidrule(l){2-4} -%\smash{\raisebox{2ex}{\textit{gothic}}}% -%\smash{\raisebox{2ex}{\gt ゴシック}}% - &bold&\AD{Sans}{Bold}\\ - &heavy&\AD{Sans}{Black}\\ -\midrule -%\textit{rounded gothic} -%\gt 丸ゴシック -&&\AD{Sans}{Black}\\ -\bottomrule -\end{tabular} -\end{center} +このような事態を避けるために,バージョン20150906.0からは \texttt{U+0080}--\texttt{U+00FF} の範囲の +文字は全て\textbf{ALchar}となるように初期設定を変更している. +なお,文字範囲の設定に関わらず1つの文字を\textbf{ALchar}, \textbf{JAchar}で出力したい場合には, +以下の例のようにそれぞれ \cs{ltjalchar},~\cs{ltjjachar} に該当文字の文字コードを渡せばよい. +\begin{LTXexample}[width=0.3\textwidth] +\gtfamily\large % default, ALchar, JAchar +¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar +α, \ltjalchar`α, \ltjjachar`α % default: JAchar +\end{LTXexample} +% -\end{cslist} -%\paragraph{Presets for single weight} -%\paragraph{単ウェイト用プリセット一覧} +%\subsection{\Param{kanjiskip} and \Param{xkanjiskip}} +%\subsection{\Param{kanjiskip}と\Param{xkanjiskip}} +\label{subs-kskip} + +%\textbf{JAglue} is divided into the following three categories: +%\textbf{JAglue}は以下の3つのカテゴリに分類される: +\begin{itemize} %<*en> -Next, we describe settings for using only single weight. +\item Glues/kerns specified in JFM. If \cs{inhibitglue} is issued + around a \textbf{JAchar}, this glue will not be inserted at the + place. % %<*ja> -次に,単ウェイト用の設定を述べる.この4設定では -明朝体太字・丸ゴシック体はゴシック体と同じフォントが用いられる. +\item JFMで指定されたグルー/カーン.もし \cs{inhibitglue} が\textbf{JAchar}の周りで + 発行されていれば,このグルーは挿入されない. % -\par\nobreak\medskip -{\centering\small -\begin{tabular}{lllll} -\toprule -&\tt noembed&\tt ipa&\tt ipaex&\tt ms\\ -\midrule %<*en> -\it mincho&Ryumin-Light (non-embedded) -&IPA Mincho&IPAex Mincho&MS Mincho\\ -\it gothic&GothicBBB-Medium (non-embedded) -&IPA Gothic&IPAex Gothic&MS Gothic\\ +\item The default glue which inserted between two \textbf{JAchar}s (\Param{% + kanjiskip}). % %<*ja> -\gtfamily 明朝体&Ryumin-Light(非埋込) -&IPA明朝&IPAex明朝&MS明朝\\ -\gtfamily ゴシック体&GothicBBB-Medium(非埋込) -&IPAゴシック&IPAexゴシック&MSゴシック\\ +\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{kanjiskip}). % -\bottomrule -\end{tabular}\par\medskip} - -%\paragraph{Using HG fonts} -%\paragraph{HGフォントの利用} %<*en> -We can use HG~fonts bundled with Microsoft~Office for realizing multiple weights. -% -%<*ja> -すぐ前に書いた単ウェイト用設定を,Microsoft Office等に付属するHGフォントを使って -多ウェイト化した設定もある. -% -\par\nobreak\medskip -{\centering\small -\begin{tabular}{llll} -\toprule -&\tt ipa-hg&\tt ipaex-hg&\tt ms-hg\\ -\midrule -%<*en> -\bf mincho medium -&IPA Mincho&IPAex Mincho&MS Mincho\\\midrule -\bf mincho bold& -\multicolumn{3}{c}{HG Mincho E}\\\midrule -\bf Gothic medium\\ -~~without \texttt{deluxe} -&IPA Gothic&IPAex Gothic&MS Gothic\\ -~~with {\tt jis2004} -&IPA Gothic&IPAex Gothic&MS Gothic\\ -\cmidrule(lr){1-4} -~~otherwise& -\multicolumn{3}{c}{HG Gothic M}\\\midrule -\bf gothic bold& -\multicolumn{3}{c}{HG Gothic E}\\\midrule -\bf gothic heavy& -\multicolumn{3}{c}{HG Soei Kaku Gothic UB}\\\midrule -\bf rounded gothic& -\multicolumn{3}{c}{HG Maru Gothic PRO}\\ -% -%<*ja> -\gtfamily 明朝体中字 -&IPA明朝&IPAex明朝&MS明朝\\\midrule -\gtfamily 明朝体太字& -\multicolumn{3}{c}{HG明朝E}\\\midrule -\gtfamily ゴシック体中字\\ - 単ウェイト時 -&IPAゴシック&IPAexゴシック&MSゴシック\\ - {\tt jis2004}指定時 -&IPAゴシック&IPAexゴシック&MSゴシック\\ -\cmidrule(lr){1-4} - それ以外の時& -\multicolumn{3}{c}{HGゴシックM}\\\midrule -\gtfamily ゴシック体太字& -\multicolumn{3}{c}{HGゴシックE}\\\midrule -\gtfamily ゴシック体極太& -\multicolumn{3}{c}{HG創英角ゴシックUB}\\\midrule -\gtfamily 丸ゴシック体& -\multicolumn{3}{c}{HG丸ゴシック体PRO}\\ -% -\bottomrule -\end{tabular}\par\medskip} - -%<*en> -Note that HG~Mincho~E, HG~Gothic~E, HG Soei Kaku Gothic UB, and HG Maru Gothic PRO -are internally specified by: -\begin{description} -\item[default] by font name (\texttt{HGMinchoE}, etc.). -\item[{\tt 90jis}] by file name (\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf}). -\item[{\tt jis2004}] by file name (\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf}). -\end{description} +\item The default glue which inserted between a \textbf{JAchar} and an + \textbf{ALchar} (\Param{xkanjiskip}). % %<*ja> -なお,HG明朝E・HGゴシックE・HG創英角ゴシックUB・HG丸ゴシック体PROの4つについては,内部で -\begin{description} -\item[標準] フォント名(\texttt{HGMinchoE} など) -\item[{\tt 90jis}指定時] ファイル名 (% -\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf}) -\item[{\tt jis2004}指定時] ファイル名 (% -\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf}) -\end{description} -として指定を行っているので注意すること. +\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{xkanjiskip}). % - - +\end{itemize} %<*en> -\subsection{\cs{CID}, \cs{UTF}, and macros in \Pkg{japanese-otf} package} -Under \pLaTeX, \Pkg{japanese-otf} package (developed by Shuzaburo Saito) is -used for typesetting characters which is in Adobe-Japan1-6 CID but not -in JIS~X~0208. Since this package is widely used, \LuaTeX-ja -supports some of functions in the \Pkg{japanese-otf} package, -as an external package \Pkg{luatexja-otf}. +The value (a skip) of \Param{kanjiskip} or +\Param{xkanjiskip} can be changed as the following. +Note that only their values \emph{at the end of a paragraph or a hbox are +adopted in the whole paragraph or the whole hbox. +} % %<*ja> -\subsection{\cs{CID}, \cs{UTF}と\Pkg{otf}パッケージのマクロ} -\pLaTeX では,JIS~X~0208にないAdobe-Japan1-6の文字を出力するために, -齋藤修三郎氏による\Pkg{otf}パッケージが用いられていた.このパッケージは -広く用いられているため,\LuaTeX-jaにおいても\Pkg{otf}パッケージの機能の -一部を(\Pkg{luatexja-otf}という別のパッケージとして)実装した. -% - -\begin{LTXexample} -\jfontspec{KozMinPr6N-Regular.otf} -森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。 - -\CID{7652}飾区の\CID{13706}野家, -\CID{1481}城市,葛西駅, -高崎と\CID{8705}\UTF{FA11} - -\aj半角{はんかくカタカナ} -\end{LTXexample} - -%<*ja> -\Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した: -\begin{cslist} -\item[deluxe] 明朝体・ゴシック体各3ウェイトと,丸ゴシック体を扱えるようになる. -\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も -\ \cs{rubyfamily}\ によって扱えるようになる. -\item[bold] ゴシック体を標準で太いウェイトのものに設定する. -\end{cslist} -しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない. -\Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し, -\Pkg{luatexja-otf}パッケージでは,そのようなことは行わないからである. - -これら3オプションについては, -\Pkg{luatexja-preset} パッケージにプリセットを使う時に一緒に指定するか, -あるいは対応する内容を\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節 (NFSS2) や -\ref{ssec-fontspec}節 (\Pkg{fontspec}) の方法で手動で指定する必要がある. +\Param{kanjiskip}や\Param{xkanjiskip}の値 +は以下のようにして変更可能である. % - -%\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} +\ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt}, + xkanjiskip={0.25\zw plus 1pt minus 1pt}} \end{lstlisting} -makes that IPA~Mincho and IPA~Gothic will be used as default Japanese fonts, instead of -IPAex~Mincho and IPAex~Gothic. +%<*en> +Here \cs{zw} is a internal dimension +which stores fullwidth of the current Japanese font. +This \cs{zw} can be used as the unit \texttt{zw} in \pTeX. -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} +The value of these parameter can be get by \cs{ltjgetparameter}. +Note that the result by \cs{ltjgetparameter} is \emph{not} the internal quantities, +but \emph{a string} (hence \cs{the} cannot be prefixed). % %<*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ゴシックへと変 -更される. - +ここで,\cs{zw} は現在の和文フォントの全角幅を表す長さであり, +\pTeX における長さ単位 \texttt{zw} と同じように使用できる. -なお,20140906.0以前のバージョンのように, -Ryumin-Light, GothicBBB-Mediumという名前の非埋込フォントを用いる場合は -\begin{lstlisting} -\def\ltj@stdmcfont{psft:Ryumin-Light} -\def\ltj@stdgtfont{psft:GothicBBB-Medium} -\end{lstlisting} -と記述すればよい. +これらのパラメータの値は以下のように取得できる. +戻り値は内部値ではなく\emph{文字列}である(\cs{the} は前置できない)ことに注意してほしい: % - - -%\section{Changing Internal Parameters} -%\section{パラメータの変更} +\begin{LTXexample} +kanjiskip: \ltjgetparameter{kanjiskip},\\ +xkanjiskip: \ltjgetparameter{xkanjiskip} +\end{LTXexample} %<*en> -There are many internal parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX, -most of them are not stored as internal register of \TeX, but as an -original storage system in \LuaTeX-ja. Hence, to assign or acquire those -parameters, you have to use commands \cs{ltjsetparameter} and -\cs{ltjgetparameter}. +It may occur that JFM contains the data of ``ideal width of +\Param{kanjiskip}'' +and/or ``ideal width of \Param{xkanjiskip}''. +To use these data from JFM, set the value of \Param{kanjiskip} or +\Param{xkanjiskip} to \cs{maxdimen} +(these ``ideal width'' cannot be retrived by \cs{ltjgetparameter}). % %<*ja> -\LuaTeX-jaには多くのパラメータが存在する.そして\LuaTeX の仕様のために, -その多くは\TeX のレジスタにではなく,\LuaTeX-ja独自の方法で保持されている. -これらのパラメータを設定・取得するためには \cs{ltjsetparameter} と \cs{ltjgetparameter} を -用いる. +JFMは「望ましい\Param{kanjiskip}の値」や +「望ましい\Param{xkanjiskip}の値」を持っていることがある. +これらのデータを使うためには,\Param{kanjiskip}や% +\Param{xkanjiskip}の値を \cs{maxdimen} の値に設定すればよいが, +\cs{ltjgetparameter} によって取得することはできないので注意が必要である. % -%\subsection{Range of \textbf{JAchar}s} -%\subsection{\textbf{JAchar}の範囲} -\label{ssec-setrange} +%\subsection{Insertion setting of \Param{xkanjiskip}} +%\subsection{\Param{xkanjiskip} の挿入設定} %<*en> -\LuaTeX-ja divides the Unicode codespace \texttt{U+0080}--\texttt{U+10FFFF} -into \emph{character ranges}, -numbered 1 to 217. The grouping can be (globally) customized by \cs{ltjdefcharrange}. -The next line adds whole characters in Supplementary Ideographic Plane -and the character ``漢'' to the character range~100. +It is not desirable that \Param{xkanjiskip} is inserted into every +boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example, +\Param{xkanjiskip} should not be inserted after opening parenthesis +(\textit{e.g.}, compare ``(あ'' and ``(\hskip\ltjgetparameter{xkanjiskip}あ''). +\LuaTeX-ja can control whether \Param{xkanjiskip} can be inserted +before/after a character, by changing \Param{jaxspmode} for \textbf{JAchar}s and +\Param{alxspmode} parameters \textbf{ALchar}s respectively. % %<*ja> -\LuaTeX-jaは,Unicodeの \texttt{U+0080}--\texttt{U+10FFFF} の空間を -1番から217番までの\emph{文字範囲}に分割している. -区分けは \cs{ltjdefcharrange} を用いることで(グローバルに)変更することができ, -例えば,次は追加漢字面(SIP)にある全ての文字と「漢」を「100番の文字範囲」に追加する. +\Param{xkanjiskip}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に +挿入されるのは望ましいことではない.例えば,\Param{xkanjiskip}は開き括弧の +後には挿入されるべきではない(「(あ」と「(\hskip\ltjgetparameter{xkanjiskip}あ」を +比べてみよ). +\LuaTeX-jaでは\Param{xkanjiskip}をある文字の前/後に挿入するかどうかを, +\textbf{JAchar}に対しては\Param{jaxspmode}を,\textbf{ALchar}に対しては +\Param{alxspmode}をそれぞれ変えることで制御することができる. % -\begin{lstlisting} -\ltjdefcharrange{100}{"20000-"2FFFF,`漢} -\end{lstlisting} +\begin{LTXexample} +\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}} +pあq い!う +\end{LTXexample} %<*en> -A character can belong to only one character range. -For example, whole SIP belong to the range~4 in the default setting of \LuaTeX-ja, -and if you execute the above line, then SIP will belong to the range~100 and be -removed from the range~4. +The second argument \texttt{preonly} means that the insertion of +\Param{xkanjiskip} is allowed before this character, but not after. +the other possible values are \texttt{postonly}, \texttt{allow}, and \texttt{inhibit}. % %<*ja> -各文字はただ一つの文字範囲に所属することができる. -例えば,SIP内の文字は全て\LuaTeX-jaのデフォルトでは4番の文字範囲に -属しているが,上記の指定を行えばSIP内の文字は100番に属すようになり,4番からは除かれる. +2つ目の引数の \texttt{preonly}は「\Param{xkanjiskip}の挿入はこの文字の +前でのみ許され,後では許さない」ことを意味する.他に指定可能な値は +\texttt{postonly}, \texttt{allow}, \texttt{inhibit}である. % %<*en> -The distinction between \textbf{ALchar} and \textbf{JAchar} is performed by character ranges. -This can be edited by setting the \textsf{jacharrange} parameter. -For example, the code below is just the default setting of \LuaTeX-ja, and -it sets -\begin{itemize} - \item a character which belongs character ranges 1,~4, 5, and~8 is \textbf{ALchar}, - \item a character which belongs character ranges 2,~3, 6, and~7 is \textbf{JAchar}. -\end{itemize} +\Param{jaxspmode} and \Param{alxspmode} use a same table to store the parameters +on the current version. Therefore, line~1 in the code above can be rewritten +as follows: % %<*ja> -\textbf{ALchar}と\textbf{JAchar}の区別は文字範囲ごとに行われる. -これは\textsf{jacharrange}パラメータによって編集できる. -例えば,以下は\LuaTeX-jaの初期設定であり,次の内容を設定している: -\begin{itemize} - \item 1番,4番,5番,8番の文字範囲に属する文字は\textbf{ALchar}. - \item 2番,3番,6番,7番の文字範囲に属する文字は\textbf{JAchar}. -\end{itemize} +なお,現行の +仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており, +上のコードの1行目を次のように変えても同じことになる: % \begin{lstlisting} -\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}} +\ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}} \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 -\textbf{ALchar}'', -and positive integer $+n$ means that ``\dots\ is a \textbf{JAchar}''. -% -%<*ja> -\textsf{jacharrange}パラメータの引数は非零の整数のリストである. -リスト中の負の整数$-n$は「文字範囲$n$に属する文字は\textbf{ALchar}として -扱う」ことを意味し,正の整数$+n$は「\textbf{JAchar}として扱う」ことを意味する. -% - -%<*en> -Note that characters \texttt{U+0000}--\texttt{U+007F} are always treated as an -\textbf{ALchar} (this cannot be customized). +One can use also numbers to specify these two parameters (see Subsection~\ref{ssec:param}). % %<*ja> -なお,\texttt{U+0000}--\texttt{U+007F} は常に\textbf{ALchar}として扱われる(利用者が変更す -ることは出来ない). +また,これら2パラメータには数値で値を指定することもできる(\ref{ssec:param}節を参照). % %<*en> -\paragraph{Default character ranges} -\LuaTeX-ja predefines eight character ranges for convenience. They are -determined from the following data: +If you want to enable/disable all insertions of \Param{kanjiskip} and +\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing} +parameters to \texttt{true}/\texttt{false}, respectively. % %<*ja> -\paragraph{文字範囲の初期値} -\LuaTeX-jaでは8つの文字範囲を予め定義しており, -これらは以下のデータに基づいて決定している. +もし全ての\Param{kanjiskip}と\Param{xkanjiskip}の挿入を有効化/無効化 +したければ,それぞれ\Param{autospacing}と\Param{autoxspacing}を +\texttt{true}/\texttt{false}に設定すればよい. % -\begin{itemize} -%\item Blocks in Unicode~6.0. -%\item Unicode~6.0のブロック. -%\item The \texttt{Adobe-Japan1-UCS2} mapping between a CID Adobe-Japan1-6 and Unicode. -%\item Adobe-Japan1-6のCIDとUnicodeの間の対応表\texttt{Adobe-Japan1-UCS2}. -%\item The \Pkg{PXbase} bundle for \upTeX\ by Takayuki Yato. -%\item 八登崇之氏による\upTeX 用の\Pkg{PXbase}バンドル. -\end{itemize} +%\subsection{Shifting the baseline} +%\subsection{ベースラインの移動} %<*en> -Now we describe these eight ranges. The superscript ``J'' or ``A'' after the -number shows whether each character in the range is treated as -\textbf{JAchar}s or not by default. These settings are similar to the -\texttt{prefercjk} settings defined in \texttt{PXbase} bundle. -Any characters equal to or above \texttt{U+0080} which does not belong to -these eight ranges belongs to the character range~217. +To make a match between a Japanese font and an alphabetic font, sometimes +shifting of the baseline of one of the pair is needed. In \pTeX, this is achieved +by setting \cs{ybaselineshift} (or \cs{tbaselineshift}) to a non-zero length (the +baseline of \textbf{ALchar} is shifted below). However, for documents +whose main language is not Japanese, it is good to shift the baseline of +Japanese fonts, but not that of alphabetic fonts. +Because of this, \LuaTeX-ja can independently set the shifting amount +of the baseline of alphabetic fonts and that of Japanese fonts. +\begin{center} + \small +\begin{tabular}{>{\bfseries}lcc} +\toprule +&\bfseries Horizontal writing (\emph{yoko} direction) etc. +&\bfseries Vertical writing(\emph{tate} direction)\\ +\midrule +Alphabetic fonts&\Param{yalbaselineshift} + parameter&\Param{talbaselineshift} parameter\\ +Japanese fonts&\Param{yjabaselineshift} + parameter&\Param{tjabaselineshift} parameter\\ +\bottomrule +\end{tabular} +\end{center} % %<*ja> -以下ではこれら8つの文字範囲について記述する.添字のアルファベット「J」「A」 -は,その文字範囲内の文字が\textbf{JAchar}か\textbf{ALchar}かを表している.これらの初期設定は -\texttt{PXbase}バンドルで定義されている\texttt{prefercjk}と類似のものであるが, -8ビットフォント使用時のトラブルを防ぐために \texttt{U+0080}--\texttt{U+00FF} の文字は全部 -\textbf{ALchar}としている. -なお,\texttt{U+0080} 以降でこれら8つの文字範囲に属さない文字は,217番の文字範囲に属することになっている. +和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が +必要になる.\pTeX ではこれは \cs{ybaselineshift}(または\cs{tbaselineshift})を設定することで +なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない +文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい. +このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量 +と和文フォントのベースラインのシフト量を独立に設定できるようになっている. +\begin{center} + \small +\begin{tabular}{>{\bfseries}lcc} +\toprule +&\bfseries 横組など&\bfseries 縦組\\ +\midrule +欧文フォントのシフト量&\Param{yalbaselineshift} + parameter&\Param{talbaselineshift} parameter\\ +和文フォントのシフト量&\Param{yjabaselineshift} + parameter&\Param{tjabaselineshift} parameter\\ +\bottomrule +\end{tabular} +\end{center} % -\begin{description} -%<*en> -\item[Range~8${}^{\text{A}}$] 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: +%<*en> +Here the horizontal line in the below example is the baseline of a line. % %<*ja> -\item[範囲8${}^{\text{A}}$] ISO~8859-1の上位領域(ラテン1補助)と - JIS~X~0208の共通部分.この文字範囲は - 以下の文字で構成される: +下の例において引かれている水平線がベースラインである. % -\begin{multicols}{2} -\begin{itemize} -\def\ch#1#2{\item \char"#1\ (\texttt{U+00#1}, #2)}%" -\ch{A7}{Section Sign} -\ch{A8}{Diaeresis} -\ch{B0}{Degree sign} -\ch{B1}{Plus-minus sign} -\ch{B4}{Spacing acute} -\ch{B6}{Paragraph sign} -\ch{D7}{Multiplication sign} -\ch{F7}{Division Sign} -\end{itemize} -\end{multicols} +\begin{LTXexample} +\vrule width 150pt height 0.2pt depth 0.2pt \hskip-120pt +\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう +\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう +\end{LTXexample} %<*en> -\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-6. -This range consists of the following Unicode ranges, \emph{except characters in the range~8 above}: +There is an interesting side-effect: characters in different size can be +vertically aligned center in a line, by setting two parameters appropriately. +The following is an example (beware the value is not well tuned): % %<*ja> -\item[範囲1${}^{\text{A}}$] ラテン文字のうち,Adobe-Japan1-6との共通部分があるもの. - この範囲は以下のUnicodeのブロックのうち - \emph{範囲8を除いた}部分で構成されている: +この機能には面白い使い方がある:2つのパラメータを適切に設定することで,サイズの +異なる文字を中心線に揃えることができる. +以下は一つの例である(値はあまり調整されていないことに注意): % -\begin{multicols}{2} +\begin{LTXexample}[width=0.4\textwidth] +\vrule width 150pt height4.417pt depth-4.217pt% +\kern-150pt +\large xyz漢字 +{\scriptsize + \ltjsetparameter{yjabaselineshift=-1.757pt, + yalbaselineshift=-1.757pt} + 漢字xyzあいう +}あいうabc +\end{LTXexample} + +%<*en> +Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift} +parameters does not increase the depth of one-letter \emph{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 \texttt{U+0080}--\texttt{U+00FF}: Latin-1 Supplement -\item \texttt{U+0100}--\texttt{U+017F}: Latin Extended-A -\item \texttt{U+0180}--\texttt{U+024F}: Latin Extended-B -\item \texttt{U+0250}--\texttt{U+02AF}: IPA Extensions -\item \texttt{U+02B0}--\texttt{U+02FF}: Spacing Modifier Letters -%\par\ -\item \texttt{U+0300}--\texttt{U+036F}: \\*\null\hfill Combining Diacritical Marks -\item \texttt{U+1E00}--\texttt{U+1EFF}: \\*\null\hfill Latin Extended Additional -%\par\ +\item These two parameters are implemented by setting \texttt{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 a syllable comprises just + one letter whose \cs{lpcode}~and~\cs{rpcode} are both non-zero. \end{itemize} -\end{multicols} -%<*en> -\item[Range~2${}^{\text{\kern.1emJ}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese - fonts) has some of these characters. + +This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift}, +becuse a \emph{JAchar} is encapsulated by a horizontal box if needed. % %<*ja> -\item[範囲2${}^{\text{\kern.1emJ}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの - 和文フォント)には,これらの文字の一部が含まれている. -% -\begin{multicols}{2} +なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意. \begin{itemize} -\item \texttt{U+0370}--\texttt{U+03FF}: Greek and Coptic -\item \texttt{U+0400}--\texttt{U+04FF}: Cyrillic -\item \texttt{U+1F00}--\texttt{U+1FFF}: Greek Extended -\\\ + \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている. + \item 「音節」を構成する唯一の文字$p$の +左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である. \end{itemize} -\end{multicols} -%<*en> -\item[Range~3${}^{\text{\kern.1emJ}}$] Punctuations and Miscellaneous symbols. The block list is - indicated in \autoref{tab:rng3}. -% -%<*ja> -\item[範囲3${}^{\text{\kern.1emJ}}$] 句読点と記号類.ブロックのリストは\autoref{tab:rng3}% - に示してある. +\emph{JAchar}は必要に応じて1文字ずつボックスにカプセル化されるため, +\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない. % -\begin{table}[!tb] -%\caption{Unicode blocks in predefined character range~3.}\medskip -%\caption{文字範囲3に指定されているUnicodeブロック.} -\label{tab:rng3} -\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" -\centering\small -\begin{tabular}{llll} -"2000--"206F&General Punctuation& -"2070--"209F&Superscripts and Subscripts\\ -"20A0--"20CF&Currency Symbols& -"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\ -"2100--"214F&Letterlike Symbols& -"2150--"218F&Number Forms\\ -"2190--"21FF&Arrows& -"2200--"22FF&Mathematical Operators\\ -"2300--"23FF&Miscellaneous Technical& -"2400--"243F&Control Pictures\\ -"2500--"257F&Box Drawing& -"2580--"259F&Block Elements\\ -"25A0--"25FF&Geometric Shapes& -"2600--"26FF&Miscellaneous Symbols\\ -"2700--"27BF&Dingbats& -"2900--"297F&Supplemental Arrows-B\\ -"2980--"29FF&Misc.\ Mathematical Symbols-B& -"2B00--"2BFF&Miscellaneous Symbols and Arrows + +%<*ja> +\paragraph{数式における挙動:\pTeX との違い} +\textbf{ALchar}のベースラインを補正する\Param{yalbaselineshift}, \Param{talbaselineshift}パラメータは +ほぼ\pTeX における \cs{ybaselineshift}, \cs{tbaselineshift} に対応しているものであるが, +数式中の挙動は異なっているので注意が必要である. +例えば,\autoref{tab:math_bsa}のように,数式中に明示的に現れた \cs{hbox},~\cs{vbox} は,横組において +\begin{itemize} + \item 2015年以前の\pTeX では,ボックス全体が \cs{ybaselineshift} だとシフトされるので, + \autoref{tab:math_bsa}中の``い''のように,ボックス中の和文文字は + \ \cs{ybaselineshift} だけシフトされ,一方,``for all''のように, + ボックス内の欧文文字は2重にシフトされることになる. + \item 一方,\LuaTeX-jaではそのようなことはおこらず, + 数式中に明示的に現れた \cs{hbox},~\cs{vbox} はシフトしない.そのため, + \autoref{tab:math_bsa}中の``い''も``for all''も,それぞれ本文中に + 書かれたときと同じ上下位置に組まれる. + + なお,\TeX~Live~2016以降の\pTeX では改修がなされ,\LuaTeX-jaと + 近い挙動になるようにしているが,数式中に直に書かれた``あ''のベースラインについては + まだ違いが見られる. +\end{itemize} + +なお,バージョン20170401.0以降の\LuaTeX-jaでは,\cs{vcenter} によるボックスには +全体が\Param{yalbaselineshift}, \Param{talbaselineshift} パラメータが反映されるようにしている. +その方が結果が自然であることによる変更なのだが,結果的に\cs{vcenter} については\pTeX と同じ挙動となった. + +\begin{table} +\small\centering +\caption{数式関係のベースライン補正($\Param{yalbaselineshift}=10\,\textrm{pt}$)} +\label{tab:math_bsa} +\newdimen\origbaselineskip +\origbaselineskip=\baselineskip +\begin{tabular}{lp{30\zw}} +\toprule +\emph{入力}&\vspace*{\dimexpr-\origbaselineskip-\smallskipamount} +\begin{lstlisting} +数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ +\end{lstlisting}\\ +\noalign{\vskip-\origbaselineskip} +\midrule +\emph{\pTeX~(--2015)}& +{\ltjsetparameter{yalbaselineshift=10pt}% +数式abc: $\lower10pt\hbox{あ}a\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +$\Phi\vdash F(x)\ \lower10pt\hbox{for all}\ x\in A$ +\par}\\\noalign{\vskip-\origbaselineskip}\midrule +\emph{\pTeX~(2016--)}& +{\ltjsetparameter{yalbaselineshift=10pt}% +数式abc: $\lower10pt\hbox{あ}a\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ +\par}\\\noalign{\vskip-\origbaselineskip}\midrule +\emph{\LuaTeX-ja}& +{\ltjsetparameter{yalbaselineshift=10pt}% +数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$, +$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ +\par}\\ +\noalign{\vskip-\origbaselineskip} +\bottomrule \end{tabular} \end{table} +% + %<*en> -\item[Range~4${}^{\text{A}}$] Characters usually not in Japanese fonts. This range consists - of almost all Unicode blocks which are not in other - predefined ranges. Hence, instead of showing the block list, - we put the definition of this range itself: +\subsection{\emph{kinsoku} parameters and OpenType features} +Among parameters which related to Japanese word-wrapping process (\emph{kinsoku shori}), +\begin{quote} + \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty}, + \Param{postbreakpenalty}~and~\Param{kcatcode} +\end{quote} +are stored by each character codes. + +OpenType font features are ignored in these parameters. +For example, a fullwidth katakana ``ア'' on line~10 in the below input is replaced to +its halfwidth variant ``ア'', by \verb+hwid+ feature. +However, the penalty inserted after it is 10 which is the \Param{postbreakpenalty} of +``ア'', not 20. % %<*ja> -\item[範囲4${}^{\text{A}}$] 通常和文フォントには含まれていない文字. - この範囲は他の範囲にないほとんど全てのUnicodeブロック - で構成されている.したがって,ブロックのリストを示す - 代わりに,範囲の定義そのものを示す: -% -\begin{lstlisting} -\ltjdefcharrange{4}{% - "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF, - "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A82F, "A840-"ABFF, "FB00-"FE0F, - "FE20-"FE2F, "FE70-"FEFF, "10000-"1FFFF, "E000-"F8FF} % non-Japanese -\end{lstlisting} -%\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas. -%\item[範囲5${}^{\text{A}}$] 代用符号と補助私用領域. -%\item[Range~6${}^{\text{\kern.1emJ}}$] Characters used in Japanese. The block list is indicated in \autoref{tab:rng6}. -%\item[範囲6${}^{\text{\kern.1emJ}}$] 日本語で用いられる文字.ブロックのリストは\autoref{tab:rng6}に示す. -\begin{table}[!tb] -%\caption{Unicode blocks in predefined character range~6.}\medskip -%\caption{文字範囲6に指定されているUnicodeブロック.} -\label{tab:rng6} -\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" -\centering\small -\begin{tabular}{llll} -"2460--"24FF&Enclosed Alphanumerics& -"2E80--"2EFF&CJK Radicals Supplement\\ -"3000--"303F&CJK Symbols and Punctuation& -"3040--"309F&Hiragana\\ -"30A0--"30FF&Katakana& -"3190--"319F&Kanbun\\ -"31F0--"31FF&Katakana Phonetic Extensions& -"3200--"32FF&Enclosed CJK Letters and Months\\ -"3300--"33FF&CJK Compatibility& -"3400--"4DBF&CJK Unified Ideographs Extension A\\ -"4E00--"9FFF&CJK Unified Ideographs& -"F900--"FAFF&CJK Compatibility Ideographs\\ -"FE10--"FE1F&Vertical Forms& -"FE30--"FE4F&CJK Compatibility Forms\\ -"FE50--"FE6F&Small Form Variants& -"{20}000--"{2F}FFF&(Supplementary Ideographic Plane)\\ -"{E0}100--"{E0}1EF&Variation Selectors Supplement -\end{tabular} -\end{table} -%<*en> -\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6. -The block list is indicated in \autoref{tab:rng7}. -% -%<*ja> -\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に - 含まれていないもの. - ブロックのリストは\autoref{tab:rng7}に示す. -% -\begin{table}[!tb] -%\caption{Unicode blocks in predefined character range~7.}\medskip -%\caption{文字範囲7に指定されているUnicodeブロック.} -\label{tab:rng7} -\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%" -\centering\small -\begin{tabular}{llll} -"1100--"11FF&Hangul Jamo& -"2F00--"2FDF&Kangxi Radicals\\ -"2FF0--"2FFF&Ideographic Description Characters& -"3100--"312F&Bopomofo\\ -"3130--"318F&Hangul Compatibility Jamo& -"31A0--"31BF&Bopomofo Extended\\ -"31C0--"31EF&CJK Strokes& -"A000--"A48F&Yi Syllables\\ -"A490--"A4CF&Yi Radicals& -"A830--"A83F&Common Indic Number Forms\\ -"AC00--"D7AF&Hangul Syllables& -"D7B0--"D7FF&Hangul Jamo Extended-B -\end{tabular} -\end{table} -\end{description} +\subsection{禁則処理関連パラメータとOpenType機能} +禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち +\begin{quote} + \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty}, + \Param{postbreakpenalty}, \Param{kcatcode} +\end{quote} +は,文字コードごとに設定する量である. -%<*en> -\paragraph{Notes on \texttt{U+0080}--\texttt{U+00FF}} -You should treat characters in \\texttt{U+0080}--\texttt{U+00FF} as \textbf{ALchar}, -when you use traditional 8-bit fonts, such as the \Pkg{marvosym} package. +\Pkg{fontspec}パッケージを使う(\ref{ssec:fontspec}節)場合など, +各種のOpenType機能を適用することもあると思うが,前段落に述べたパラメータ類は, +\emph{OpenType機能の適用前の文字コードによって適用される.} +例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」 +に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である. +% -For example, \cs{Frowny} which is provided by the \Pkg{marvosym} package has -the same codepoint as \S\ (\text{U+00A7}). -Hence, as previous versions of \LuaTeX-ja, if these characters are treated as -\text{JAchar}s, then \cs{Frowny} produces ``\ltjjachar`§'' (in a Japanese font). +\begin{LTXexample}[width=0.2\textwidth] +\ltjsetparameter{postbreakpenalty={`ア, 10}} +\ltjsetparameter{postbreakpenalty={`ア, 20}} -To avoid such situations, the default setting of \LuaTeX-ja is changed in this release -so that all characters \texttt{U+0080}--\texttt{U+00FF} are treated as \textbf{ALchar}. +\newcommand\showpostpena[1]{% + \leavevmode\setbox0=\hbox{#1\hbox{}}% + \unhbox0\setbox0=\lastbox\the\lastpenalty} -If you want to output a character as \textbf{ALchar} and \textbf{JAchar} regardless the range -setting, you can use \cs{ltjalchar} and \cs{ltjjachar} respectively, as the following example. -\begin{LTXexample}[width=0.3\textwidth] -\gtfamily\large % default, ALchar, JAchar -¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar -α, \ltjalchar`α, \ltjjachar`α % default: JAchar +\showpostpena{ア}, +\showpostpena{ア}, +{\addjfontfeatures{CharacterWidth=Half}\showpostpena{ア}} \end{LTXexample} -% -%<*ja> -\paragraph{\texttt{U+0080}--\texttt{U+00FF}についての注意} -\LuaTeX-jaで,\Pkg{marvosym}パッケージ等,Unicodeフォントでなく -伝統的な8ビットフォントを用いる場合には注意が必要である. - -例えば,\Pkg{marvosym}パッケージの提供する \cs{Frowny} も,符号位置は167,つまりUnicodeにおける -\S\ (\text{U+00A7}) と同じ符号位置にある. -即ち,以前のバージョンのように,「前節の文字範囲8内の文字は\textbf{JAchar}」という設定で -あったとすると,上記の \cs{Frowny} は和文フォントで「\ltjjachar`§」を出力することになる. -このような事態を避けるために,本バージョンからは \texttt{U+0080}--\texttt{U+00FF} の範囲の -文字は全て\textbf{ALchar}となるように初期設定を変更している. - -なお,文字範囲の設定に関わらず1つの文字を\textbf{ALchar}, \textbf{JAchar}で出力したい場合には, -以下の例のようにそれぞれ \cs{ltjalchar},~\cs{ltjjachar} に該当文字の文字コードを渡せばよい. -\begin{LTXexample}[width=0.3\textwidth] -\gtfamily\large % default, ALchar, JAchar -¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar -α, \ltjalchar`α, \ltjjachar`α % default: JAchar -\end{LTXexample} +\clearpage +%\part{Reference} +%\part{リファレンス} +\label{part-ref} +\suppressfloats[t] +%<*ja> +\section{\LuaTeX-jaにおける \cs{catcode}} +\label{sec-catcode} +\subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}} +\pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか +は \cs{kcatcode} の値によって決定されるのであった. +詳細は\autoref{tab:kcat}を参照されたい. % - - -%\subsection{\Param{kanjiskip} and \Param{xkanjiskip}} -%\subsection{\Param{kanjiskip}と\Param{xkanjiskip}} -\label{subs-kskip} - -%\textbf{JAglue} is divided into the following three categories: -%\textbf{JAglue}は以下の3つのカテゴリに分類される: -\begin{itemize} %<*en> -\item Glues/kerns specified in JFM. If \cs{inhibitglue} is issued - around a \textbf{JAchar}, this glue will not be inserted at the - place. +\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. +For the detail, see \autoref{tab:kcat}. % -%<*ja> -\item JFMで指定されたグルー/カーン.もし \cs{inhibitglue} が\textbf{JAchar}の周りで - 発行されていれば,このグルーは挿入されない. -% + +\begin{table}[t] +\small +\caption{\cs{kcatcode} in \upTeX} +\label{tab:kcat} +%\medskip + +\noindent\hfill +\begin{tabular}{llccc} +\toprule +\bfseries \cs{kcatcode}& %<*en> -\item The default glue which inserted between two \textbf{JAchar}s (\Param{% - kanjiskip}). +\bfseries meaning& +\bfseries control word& +\bfseries widow penalty& +\bfseries linebreak\\ % %<*ja> -\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{kanjiskip}). +\bfseries 意図& +\bfseries 制御綴中に使用& +\bfseries 文字ウィドウ処理& +\bfseries 直後での改行\\ % -%<*en> -\item The default glue which inserted between a \textbf{JAchar} and an - \textbf{ALchar} (\Param{xkanjiskip}). -% +\midrule +15&non-cjk&\multicolumn{3}{c}{(treated as usual \LaTeX)}\\ +16&kanji&Y&Y&ignored\\ +17&kana&Y&Y&ignored\\ +18&other&N&N&ignored\\ +19&hangul&Y&Y&space\\ +\bottomrule +\end{tabular}\hfill\null + +\medskip + %<*ja> -\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{xkanjiskip}). +文字ウィドウ処理:「漢字が一文字だけ次の行に行くのを防ぐ」 +\cs{jcharwidowpenalty} が, +その文字の直前に挿入されうるか否か,を示す. % -\end{itemize} +\end{table} + %<*en> -The value (a skip) of \Param{kanjiskip} or -\Param{xkanjiskip} can be changed as the following. -Note that only their values \emph{at the end of a paragraph or a hbox are -adopted in the whole paragraph or the whole hbox. +\cs{kcatcode} can be set by a row of JIS~X~0208 in \pTeX, +and generally by a Unicode block\footnote{% + \upTeX\ divides \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms) + into three subblocks, and \cs{kcatcode} can be set by a subblock. } +in \upTeX. So characters which can be used in a control word +slightly differ between \pTeX~and~\upTeX. % %<*ja> -\Param{kanjiskip}や\Param{xkanjiskip}の値 -は以下のようにして変更可能である. +\pTeX では \cs{kcatcode} はJIS~X~0208の区単位, +\upTeX では概ねUnicodeブロック単位\footnote{% + \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms)は + 「全角英数字」「半角カナ」「その他」と3つに分割されており, + それぞれ別々に \cs{kcatcode} が指定できるようになっている. +}で設定可能になっている.そのため,\pTeX と\upTeX の初期状態では +制御綴内で使用可能な文字が微妙に異なっている. % -\begin{lstlisting} -\ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt}, - xkanjiskip={0.25\zw plus 1pt minus 1pt}} -\end{lstlisting} -%<*en> -Here \cs{zw} is a internal dimension -which stores fullwidth of the current Japanese font. -This \cs{zw} can be used as the unit \texttt{zw} in \pTeX. -The value of these parameter can be get by \cs{ltjgetparameter}. -Note that the result by \cs{ltjgetparameter} is \emph{not} the internal quantities, -but \emph{a string} (hence \cs{the} cannot be prefixed). +%<*en> +\subsection{Case of \LuaTeX-ja} +The role of \cs{kcatcode} in \pTeX~and~\upTeX\ can be +divided into the following four kinds, +and \LuaTeX-ja can control these four kinds separately: +\begin{itemize} + \item +\emph{Distinction between \textbf{JAchar} or \textbf{ALchar}} +is controlled by the character range, see Subsection~\ref{ssec:setrange}. + \item +\emph{Whether the character can be used in a control word} +is controlled by setting \cs{catcode} to 11~(enabled) or 12~(disabled), as usual. + \item +\emph{Whether \Param{jcharwidowpenalty} can be inserted before the character} +is controlled by the lowermost bit of the \Param{kcatcode} parameter. + \item +\emph{Linebreak after a \textbf{JAchar}} does not produce a space. +\end{itemize} % %<*ja> -ここで,\cs{zw} は現在の和文フォントの全角幅を表す長さであり, -\pTeX における長さ単位 \texttt{zw} と同じように使用できる. - -これらのパラメータの値は以下のように取得できる. -戻り値は内部値ではなく\emph{文字列}である(\cs{the} は前置できない)ことに注意してほしい: +\subsection{\LuaTeX-jaの場合} +\LuaTeX-jaでは,従来の\pTeX・\upTeX における \cs{kcatcode} の役割を +分割している: +\begin{description} + \item[欧文/和文の区別 (\upTeX)] +\cs{ltjdefcharrange} と\textsf{jacharrange}パラメータ(\ref{ssec:setrange}節) + \item[制御綴中に使用可か] +\LuaTeX 自身の \cs{catcode} でよい + \item[\Param{jcharwidowpenalty}が挿入可か] +\Param{kcatcode}パラメータの最下位ビット + \item[直後の改行] +日本語しか想定していないので,\textbf{JAchar}直後の改行で半角スペースが挿入されることはない. +\end{description} % -\begin{LTXexample} -kanjiskip: \ltjgetparameter{kanjiskip},\\ -xkanjiskip: \ltjgetparameter{xkanjiskip} -\end{LTXexample} %<*en> -It may occur that JFM contains the data of ``ideal width of -\Param{kanjiskip}'' -and/or ``ideal width of \Param{xkanjiskip}''. -To use these data from JFM, set the value of \Param{kanjiskip} or -\Param{xkanjiskip} to \cs{maxdimen} -(these ``ideal width'' cannot be retrived by \cs{ltjgetparameter}). -% -%<*ja> -JFMは「望ましい\Param{kanjiskip}の値」や -「望ましい\Param{xkanjiskip}の値」を持っていることがある. -これらのデータを使うためには,\Param{kanjiskip}や% -\Param{xkanjiskip}の値を \cs{maxdimen} の値に設定すればよいが, -\cs{ltjgetparameter} によって取得することはできないので注意が必要である. -% - -%\subsection{Insertion setting of \Param{xkanjiskip}} -%\subsection{\Param{xkanjiskip} の挿入設定} - -%<*en> -It is not desirable that \Param{xkanjiskip} is inserted into every -boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example, -\Param{xkanjiskip} should not be inserted after opening parenthesis -(\textit{e.g.}, compare ``(あ'' and ``(\hskip\ltjgetparameter{xkanjiskip}あ''). -\LuaTeX-ja can control whether \Param{xkanjiskip} can be inserted -before/after a character, by changing \Param{jaxspmode} for \textbf{JAchar}s and -\Param{alxspmode} parameters \textbf{ALchar}s respectively. -% -%<*ja> -\Param{xkanjiskip}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に -挿入されるのは望ましいことではない.例えば,\Param{xkanjiskip}は開き括弧の -後には挿入されるべきではない(「(あ」と「(\hskip\ltjgetparameter{xkanjiskip}あ」を -比べてみよ). -\LuaTeX-jaでは\Param{xkanjiskip}をある文字の前/後に挿入するかどうかを, -\textbf{JAchar}に対しては\Param{jaxspmode}を,\textbf{ALchar}に対しては -\Param{alxspmode}をそれぞれ変えることで制御することができる. -% -\begin{LTXexample} -\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}} -pあq い!う -\end{LTXexample} - -%<*en> -The second argument \texttt{preonly} means that the insertion of -\Param{xkanjiskip} is allowed before this character, but not after. -the other possible values are \texttt{postonly}, \texttt{allow}, and \texttt{inhibit}. -% -%<*ja> -2つ目の引数の \texttt{preonly}は「\Param{xkanjiskip}の挿入はこの文字の -前でのみ許され,後では許さない」ことを意味する.他に指定可能な値は -\texttt{postonly}, \texttt{allow}, \texttt{inhibit}である. -% +Default setting of \cs{catcode} of Unicode characters are located in +\begin{description} + \item[plain \LuaTeX] \texttt{luatex-unicode-letters.tex}, which is based on \texttt{unicode-letters.tex} +(for \XeTeX). + \item[\LuaLaTeX] now included in \LaTeX\ kernel as~\texttt{unicode-letters.def}. +\end{description} +However, the default setting of \cs{catcode} differs +between \XeTeX\ and \LuaTeX, by the following reasons: +\begin{itemize} + \item (plain format) \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}. + \item The latter half of \texttt{unicode-letters.tex}~and~\texttt{unicode-letters.def} +sets\cs{catcode} of several characters to 11, via setting \cs{XeTeXcharclass}. +However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX. +\end{itemize} +In other words, +\begin{description} +\item[plain \LuaTeX] +Kanji nor kana characters cannot be used in +a control word, in the default setting of plain \LuaTeX. +\item[\LuaLaTeX] +In recent (2015-10-01 or later) \LuaLaTeX, Kanji and kana characters in a control word is supported (these catcode are 11), +but not fullwidth alphanumerics and several other characters. +\end{description} -%<*en> -\Param{jaxspmode} and \Param{alxspmode} use a same table to store the parameters -on the current version. Therefore, line~1 in the code above can be rewritten -as follows: -% -%<*ja> -なお,現行の -仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており, -上のコードの1行目を次のように変えても同じことになる: -% -\begin{lstlisting} -\ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}} -\end{lstlisting} -%<*en> -One can use also numbers to specify these two parameters (see Subsection~\ref{ssec-param}). +This would be inconvenient for \pTeX~users to shifting to \LuaTeX-ja, +since several control words containing Kanji or other fullwidth characters, such as +\verb+\西暦+~or~\verb+\1年目西暦+ are used in \pTeX. +Hence, \LuaTeX-ja have a counterpart of \texttt{unicode-letters.tex} +for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.} % %<*ja> -また,これら2パラメータには数値で値を指定することもできる(\ref{ssec-param}節を参照). -% +ネイティブにUnicode全部の文字を扱える\XeTeX や\LuaTeX では, +文字が制御綴内で使用できるかは通常の欧文文字と同じく\cs{catcode}% +で指定することとなる.plain \XeTeX における\cs{catcode}の初期設定は% +\texttt{unicode-letters.tex}中に記述されており,plain \LuaTeX ではそれを +元にした\texttt{luatex-unicode-letters.tex}を用いている. +\LaTeX では\cs{catcode}の設定はカーネルに\texttt{unicode-letters.def}として統合され. +このファイルを\XeLaTeX, \LuaLaTeX の両方が用いている. -%<*en> -If you want to enable/disable all insertions of \Param{kanjiskip} and -\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing} -parameters to \texttt{true}/\texttt{false}, respectively. -% -%<*ja> -もし全ての\Param{kanjiskip}と\Param{xkanjiskip}の挿入を有効化/無効化 -したければ,それぞれ\Param{autospacing}と\Param{autoxspacing}を -\texttt{true}/\texttt{false}に設定すればよい. +だが,\XeTeX における\cs{catcode}の初期設定と +\LuaTeX におけるそれは一致していない: +\begin{itemize} + \item \texttt{luatex-unicode-letters.tex} の元になった + \texttt{unicode-letters.tex}が古い + \item \texttt{unicode-letters.tex} 後半部や\texttt{unicode-letters.def}後半部では +\cs{XeTeXcharclass}の設定を行なっており, +それによって漢字や仮名,および全角英数字の\cs{catcode}が11に設定されている. +しかし,\texttt{luatex-unicode-letters.tex}ではこの「後半部」が +まるごと省略されており,また\LuaLaTeX でも\texttt{unicode-letters.def}後半部は実行されな + い. +\end{itemize} +言い換えると, +\begin{description} + \item[plain \LuaTeX] 漢字や仮名を制御綴内に +使用することはできない. + \item[\LuaLaTeX] 最近の(2015-10-01以降の) +\LuaLaTeX では漢字や仮名を制御綴内に +使用することが可能になったが,全角英数字は相変わらず使用できない, +\end{description} +これでは\pTeX で使用できた\verb+\1年目西暦+\footnote{科研費\LaTeX で使用されているそうです.}などが使えないこととなり, +\LuaTeX-jaへの移行で手間が生じる.そのため,\LuaTeX-jaでは +\texttt{unicode-letters.tex}の後半部にあたる内容を自前でパッチし, +結果として\emph{\XeTeX における初期設定と同じになるようにしている.} % -%\subsection{Shifting the baseline} -%\subsection{ベースラインの移動} -%<*en> -To make a match between a Japanese font and an alphabetic font, sometimes -shifting of the baseline of one of the pair is needed. In \pTeX, this is achieved -by setting \cs{ybaselineshift} (or \cs{tbaselineshift}) to a non-zero length (the -baseline of \textbf{ALchar} is shifted below). However, for documents -whose main language is not Japanese, it is good to shift the baseline of -Japanese fonts, but not that of alphabetic fonts. -Because of this, \LuaTeX-ja can independently set the shifting amount -of the baseline of alphabetic fonts and that of Japanese fonts. -\begin{center} - \small -\begin{tabular}{>{\bfseries}lcc} +\begin{table} + \centering\small +%\caption{Difference of the set of non-kanji JIS~X~0208 characters which can be used in a control word} +%\caption{制御綴中に使用出来るJIS~X~0208非漢字の違い} +%\medskip +\label{tab:kcat-diff} +\def\D#1#2#3#4{% + {\fboxsep0pt\fcolorbox{cyan}{white}% + {\large\char"#1#2#3#4}}\ (\texttt{U+#1#2#3#4})} %" +\leavevmode\hbox to 0pt{\hss\begin{tabular}{cccccc} \toprule -&\bfseries Horizontal writing (\emph{yoko} direction) etc. -&\bfseries Vertical writing(\emph{tate} direction)\\ +%&\textbf{row}&\textbf{col.}&\textbf{\pTeX}&\textbf{\upTeX}&\textbf{\LuaTeX-ja}\\ +%&\emph{区}&\emph{点}&\emph{\pTeX}&\emph{\upTeX}&\emph{\LuaTeX-ja}\\ \midrule -Alphabetic fonts&\Param{yalbaselineshift} - parameter&\Param{talbaselineshift} parameter\\ -Japanese fonts&\Param{yjabaselineshift} - parameter&\Param{tjabaselineshift} parameter\\ +%\D 3000&1&1&N&N&Y\\ +\D 30FB&1&6&N&Y&N\\ +\D 309B&1&11&N&Y&N\\ +\D 309C&1&12&N&Y&N\\ +\D FF40&1&14&N&N&Y\\ +\D FF3E&1&16&N&N&Y\\ +\D FFE3&1&17&N&N&Y\\ +\D FF3F&1&18&N&N&Y\\ +%\D 30FD&1&19&N&Y&Y\\ +%\D 30FE&1&20&N&Y&Y\\ +%\D 309D&1&21&N&Y&Y\\ +%\D 309E&1&22&N&Y&Y\\ +\D 3003&1&23&N&N&Y\\ +\D 4EDD&1&24&N&Y&Y\\ +\D 3005&1&25&N&N&Y\\ +\D 3006&1&26&N&N&Y\\ +\D 3007&1&27&N&N&Y\\ +\D 30FC&1&28&N&Y&Y\\ +\D FF0F&1&31&N&N&Y\\ +\D FF3C&1&32&N&N&Y\\ \bottomrule -\end{tabular} -\end{center} -% -%<*ja> -和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が -必要になる.\pTeX ではこれは \cs{ybaselineshift}(または\cs{tbaselineshift})を設定することで -なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない -文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい. -このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量 -と和文フォントのベースラインのシフト量を独立に設定できるようになっている. -\begin{center} - \small -\begin{tabular}{>{\bfseries}lcc} +\end{tabular}\qquad +\begin{tabular}{cccccc} \toprule -&\bfseries 横組など&\bfseries 縦組\\ +%&\textbf{row}&\textbf{col.}&\textbf{\pTeX}&\textbf{\upTeX}&\textbf{\LuaTeX-ja}\\ +%&\emph{区}&\emph{点}&\emph{\pTeX}&\emph{\upTeX}&\emph{\LuaTeX-ja}\\ \midrule -欧文フォントのシフト量&\Param{yalbaselineshift} - parameter&\Param{talbaselineshift} parameter\\ -和文フォントのシフト量&\Param{yjabaselineshift} - parameter&\Param{tjabaselineshift} parameter\\ +\D FF5C&1&35&N&N&Y\\ +\D FF0B&1&60&N&N&Y\\ +\D FF1D&1&65&N&N&Y\\ +\D FF1C&1&67&N&N&Y\\ +\D FF1E&1&68&N&N&Y\\ +\D FF03&1&84&N&N&Y\\ +\D FF06&1&85&N&N&Y\\ +\D FF0A&1&86&N&N&Y\\ +\D FF20&1&87&N&N&Y\\ +\D 3012&2&9&N&N&Y\\ +\D 3013&2&14&N&N&Y\\ +\D FFE2&2&44&N&N&Y\\ +\D 212B&2&82&N&N&Y\\ +%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Greek letters (row 6)}&Y&N&Y\\ +%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Cyrillic letters (row 7)}&N&N&Y\\ +%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}ギリシャ文字(6区)}&Y&N&Y\\ +%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}キリル文字(7区)}&N&N&Y\\ \bottomrule -\end{tabular} -\end{center} -% +\end{tabular}\hss}\par +\end{table} %<*en> -Here the horizontal line in the below example is the baseline of a line. +\subsection{Non-kanji characters in a control word} +Because the engine differ, so non-kanji JIS~X~0208 characters +which can be used in a control word differ in \pTeX, in \upTeX,~and~in \LuaTeX-ja. +\autoref{tab:kcat-diff} shows the difference. +Except for four characters ``・'',~``゛'', ``゜'',~``゠'', +\LuaTeX-ja admits more characters in a control word than \upTeX. + +Difference becomes larger, if we consider +non-kanji JIS~X~0213 characters. +For the detail, see \url{https://github.com/h-kitagawa/kct}. % %<*ja> -下の例において引かれている水平線がベースラインである. +\subsection{制御綴中に使用出来るJIS非漢字の違い} + +エンジンが異なるので,\pTeX, \upTeX, \LuaTeX-ja +において制御綴中に使用可能なJIS~X~0208の文字は異なる. +異なっているところだけを載せると,\autoref{tab:kcat-diff}のようになる. +「・」「゛」「゜」「゠」を除けば,\LuaTeX-jaでは\upTeX より多くの文字が +制御綴に使用可能になっている. + +JIS~X~0213の範囲に広げると,差異はさらに大きくなる. +詳細については例えば \url{https://github.com/h-kitagawa/kct} 中の\ +\texttt{kct-out.pdf} などを参照すること. % -\begin{LTXexample} -\vrule width 150pt height 0.2pt depth 0.2pt \hskip-120pt -\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう -\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう -\end{LTXexample} + %<*en> -There is an interesting side-effect: characters in different size can be -vertically aligned center in a line, by setting two parameters appropriately. -The following is an example (beware the value is not well tuned): +\section{Directions} +\LuaTeX\ supports four $\Omega$-style directions: \texttt{TLT},~\texttt{TRT}, \texttt{RTT} +and \texttt{LTL}. +However, neither directions are not well-suited for typesetting Japanese vertically, hence we +implemented vertical writing by rotating \texttt{TLT}-box by 90~degrees. % %<*ja> -この機能には面白い使い方がある:2つのパラメータを適切に設定することで,サイズの -異なる文字を中心線に揃えることができる. -以下は一つの例である(値はあまり調整されていないことに注意): -% -\begin{LTXexample}[width=0.4\textwidth] -\vrule width 150pt height4.417pt depth-4.217pt% -\kern-150pt -\large xyz漢字 -{\scriptsize - \ltjsetparameter{yjabaselineshift=-1.757pt, - yalbaselineshift=-1.757pt} - 漢字xyzあいう -}あいうabc -\end{LTXexample} - -%<*en> -Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift} -parameters does not increase the depth of one-letter \emph{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 \texttt{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 a syllable comprises just - one letter whose \cs{lpcode}~and~\cs{rpcode} are both non-zero. -\end{itemize} - -This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift}, -becuse a \emph{JAchar} is encapsulated by a horizontal box if needed. -% -%<*ja> -なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意. -\begin{itemize} - \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている. - \item 「音節」を構成する唯一の文字$p$の -左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である. -\end{itemize} -\emph{JAchar}は必要に応じて1文字ずつボックスにカプセル化されるため, -\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない. +\section{縦組} +\label{sec-direction} +\LuaTeX 本体でも,$\Omega$・$\aleph$由来の機能として,複数の組方向をサポートしている. +しかし,\LuaTeX がサポートするのは \texttt{TLT},~\texttt{TRT}, \texttt{RTT},~\texttt{LTL}\ +のみであり,日本語の縦組に使うのは望ましくない\footnote{% +和文文字だけならば \texttt{RTT} を使えばなんとかなると思うが, +欧文文字が入ってきた場合はうまくいかず,\texttt{RTR} という組方向が必要になる. +}.そのため,\LuaTeX-jaでは横組(\texttt{TLT})で組んだボックスを回転させる方式で +縦組を実装した. % +%\subsection{サポートする組方向} +\begin{table}[t] +%\caption{\LuaTeX-ja のサポートする組方向} +%\caption{Directions supported by \LuaTeX-ja} +%\medskip +\label{tab-dir} +\centering\small +\def\obox#1{% + \setbox0=\hbox{\yoko\hbox{#1% + \large\ltjsetparameter{talbaselineshift=0pt}% + \vrule height 25pt width 0.4pt depth 15pt\kern-.2pt% + \raise25pt\hbox to 0pt{\hss\composite{*r^@{>>}}\hss}% + \raise-15pt\hbox to 0pt{\hss\composite{*l^@{>|}}\hss}\kern.2pt% + \vrule height.2pt depth.2pt width 60pt\hbox to 0pt{\hss\composite{*d^@{>}}\hss}\kern-60pt + \hbox to 60pt{\,銀は、Ag\hss}}}% + \raise\dimexpr 0.5\ltjgetdp0-0.5\ltjgetht0\box0% +} %<*ja> -\paragraph{数式における挙動:\pTeX との違い} -\textbf{ALchar}のベースラインを補正する\Param{yalbaselineshift}, \Param{talbaselineshift}パラメータは -ほぼ\pTeX における \cs{ybaselineshift}, \cs{tbaselineshift} に対応しているものであるが, -数式中の挙動は異なっているので注意が必要である. -例えば,\autoref{tab:math_bsa}のように,数式中に明示的に現れた \cs{hbox},~\cs{vbox} は,横組において -\begin{itemize} - \item 2015年以前の\pTeX では,ボックス全体が \cs{ybaselineshift} だとシフトされるので, - \autoref{tab:math_bsa}中の``い''のように,ボックス中の和文文字は - \ \cs{ybaselineshift} だけシフトされ,一方,``for all''のように, - ボックス内の欧文文字は2重にシフトされることになる. - \item 一方,\LuaTeX-jaではそのようなことはおこらず, - 数式中に明示的に現れた \cs{hbox},~\cs{vbox} はシフトしない.そのため, - \autoref{tab:math_bsa}中の``い''も``for all''も,それぞれ本文中に - 書かれたときと同じ上下位置に組まれる. - - なお,\TeX~Live~2016以降の\pTeX では改修がなされ,\LuaTeX-jaと - 近い挙動になるようにしているが,数式中に直に書かれた``あ''のベースラインについては - まだ違いが見られる. -\end{itemize} - -なお,20170401.0版以降の\LuaTeX-jaでは,\cs{vcenter} によるボックスには -全体が\Param{yalbaselineshift}, \Param{talbaselineshift} パラメータが反映されるようにしている. -その方が結果が自然であることによる変更なのだが,結果的に\cs{vcenter} については\pTeX と同じ挙動となった. - -\begin{table} -\small\centering -\caption{数式関係のベースライン補正($\Param{yalbaselineshift}=10\,\textrm{pt}$)} -\label{tab:math_bsa} -\newdimen\origbaselineskip -\origbaselineskip=\baselineskip -\begin{tabular}{lp{30\zw}} +\begin{tabular}{>{\bfseries}lcccc} \toprule -\emph{入力}&\vspace*{\dimexpr-\origbaselineskip-\smallskipamount} -\begin{lstlisting} -数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$, -$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ -\end{lstlisting}\\ -\noalign{\vskip-\origbaselineskip} +&横組&縦組 &「dtou方向」&「utod方向」\\ \midrule -\emph{\pTeX~(--2015)}& -{\ltjsetparameter{yalbaselineshift=10pt}% -数式abc: $\lower10pt\hbox{あ}a\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$, -$\Phi\vdash F(x)\ \lower10pt\hbox{for all}\ x\in A$ -\par}\\\noalign{\vskip-\origbaselineskip}\midrule -\emph{\pTeX~(2016--)}& -{\ltjsetparameter{yalbaselineshift=10pt}% -数式abc: $\lower10pt\hbox{あ}a\hbox{い}$, $\int_0^x t\,dt=x^2/2$, -$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ -\par}\\\noalign{\vskip-\origbaselineskip}\midrule -\emph{\LuaTeX-ja}& -{\ltjsetparameter{yalbaselineshift=10pt}% -数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$, -$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$ -\par}\\ -\noalign{\vskip-\origbaselineskip} +命令&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\ +字送り方向&水平右向き(→)&垂直下向き(↓)&垂直上向き(↑)&垂直下向き(↓)\\ +行送り方向&垂直下向き(↓)&水平左向き(←)&水平右向き(→)&水平左向き(←)\\ +使用する和文フォント&横組用(\cs{jfont})&縦組用(\cs{tfont})& +\multicolumn{2}{c}{% + 横組用(\cs{jfont})の$90^\circ$回転}\\[\smallskipamount] +組版例\null $^*$ &\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\ +\noalign{\medskip} \bottomrule \end{tabular} -\end{table} + +\medskip\raggedright +\def\R#1{% + \raise0.38\zw\hbox{% + \vrule height.2pt depth.2pt width2\zw% + \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}% + }% +} +$^*$\ 幅(width),高さ(height),深さ(depth)の増加方向を, +それぞれ「\R{>}」,「\R{>>}」,「\R{>|}」で表している. +\raggedright % %<*en> -\subsection{\emph{kinsoku} parameters and OpenType features} -Among parameters which related to Japanese word-wrapping process (\emph{kinsoku shori}), -\begin{quote} - \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty}, - \Param{postbreakpenalty}~and~\Param{kcatcode} -\end{quote} -are stored by each character codes. +\begin{tabular}{>{\bfseries}lcccc} +\toprule +&horizontal (\emph{yoko}~direction)&vertical (\emph{tate}~direction)&% + \emph{dtou} direction&\emph{utod} direction\\ +\midrule +Commands&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\ +Beginning of the page&Top&Right&Left&Right\\ +Beginning of the line&Left&Top&Bottom&Top\\ +Used Japanese font&horizontal (\cs{jfont})&vertical (\cs{tfont})& +\multicolumn{2}{c}{% + horizontal ($90^\circ$ rotated)}\\[\smallskipamount] +Example&\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\ +\noalign{\medskip} +(Notation used in $\Omega$)&TLT&RTR, RTT&LBL&RTR\\ +\bottomrule +\end{tabular} -OpenType font features are ignored in these parameters. -For example, a fullwidth katakana ``ア'' on line~10 in the below input is replaced to -its halfwidth variant ``ア'', by \verb+hwid+ feature. -However, the penalty inserted after it is 10 which is the \Param{postbreakpenalty} of -``ア'', not 20. +\medskip\raggedright +\def\R#1{% + \raise0.38\zw\hbox{% + \vrule height.2pt depth.2pt width2\zw% + \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}% + }% +} +\raggedright % -%<*ja> -\newpage -\subsection{禁則処理関連パラメータとOpenTypeのfont feature} -禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち -\begin{quote} - \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty}, - \Param{postbreakpenalty}, \Param{kcatcode} -\end{quote} -は,文字コードごとに設定する量である. +\end{table} -\Pkg{fontspec}パッケージを使う(\ref{ssec-fontspec}節)場合など, -各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は, -\emph{OpenType featureの適用前の文字コードによって適用される.} -例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」 -に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である. -% +%<*en> +\LuaTeX-ja supports four directions, as shown in \autoref{tab-dir}. +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. +The fifth column (\emph{utod} direction) corresponds the ``\texttt{tate (math) direction}'' of \pTeX. -\begin{LTXexample}[width=0.2\textwidth] -\ltjsetparameter{postbreakpenalty={`ア, 10}} -\ltjsetparameter{postbreakpenalty={`ア, 20}} +Directions can be changed by \cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod}, +only when the current list is null. +These commands cannot be executed in unrestricted horizontal modes, nor math modes. +The direction of a math formula is changed to +\emph{utod}, when the direction outside the math formula is \emph{tate} (vertical writing). +% -\newcommand\showpostpena[1]{% - \leavevmode\setbox0=\hbox{#1\hbox{}}% - \unhbox0\setbox0=\lastbox\the\lastpenalty} +%<*ja> +\LuaTeX-jaがサポートする組方向は\autoref{tab-dir}に示す4つである. +4列目の \cs{dtou} は聞き慣れない命令だと思うが, +実は\pTeX に同名の命令が(ドキュメントには書かれていないが)存在する. +Down-TO-Upの意味なのだろう.\cs{dtou} を使用する機会はないだろうが, +\LuaTeX-jaではデバッグ用に実装している. +5列目の \cs{utod} は,\pTeX で言う「縦数式ディレクション」に相当するものである. -\showpostpena{ア}, -\showpostpena{ア}, -{\addjfontfeatures{CharacterWidth=Half}\showpostpena{ア}} -\end{LTXexample} +組方向は,\cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod} をそれぞれ使用することで, +現在作成中のリストやボックスが空の時にのみ変更可能である. +ただし,現在のモードが非制限水平モードや(文中,別行立て問わず)数式モードであるときには +組方向を変更することは出来ない. +また,縦組中の数式内のボックスは\pTeX と同じように組方向が \cs{utod} となる. -\clearpage -%\part{Reference} -%\part{リファレンス} -\label{part-ref} -\suppressfloats[t] -%<*ja> -\section{\LuaTeX-jaにおける \cs{catcode}} -\label{sec-catcode} -\subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}} -\pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか -は \cs{kcatcode} の値によって決定されるのであった. -詳細は\autoref{tab:kcat}を参照されたい. +なお,\LaTeX の下で\LuaTeX-jaを使用する場合,組方向変更命令には +「新たな組方向下での和文フォントを必要なら読み込み(・選択する)」という +処理が付け加えられている(\ref{ssec:ltx-jfm}節参照). % + %<*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. -For the detail, see \autoref{tab:kcat}. -% +\subsection{Boxes in different direction} -\begin{table}[t] -\small -\caption{\cs{kcatcode} in \upTeX} -\label{tab:kcat} -%\medskip +As in \pTeX, one can use boxes of different direction in one document. +The below is an example. +\begin{LTXexample} +ここは横組% yoko +\hbox{\tate % tate + \hbox{縦組}% tate + の中に + \hbox{\yoko 横組の内容}% yoko + を挿入する +} +また横組に戻る% yoko +\end{LTXexample} -\noindent\hfill -\begin{tabular}{ccccc} -\toprule -\bfseries \cs{kcatcode}& -%<*en> -\bfseries meaning& -\bfseries control word& -\bfseries widow penalty& -\bfseries linebreak\\ +\autoref{tab-diffdir} shows how a box is arranged when +the direction inside the box and that outside the box differ. % %<*ja> -\bfseries 意図& -\bfseries 制御綴中に使用& -\bfseries 文字ウィドウ処理& -\bfseries 直後での改行\\ -% -\midrule -15&non-cjk&\multicolumn{3}{c}{(treated as usual \LaTeX)}\\ -16&kanji&Y&Y&ignored\\ -17&kana&Y&Y&ignored\\ -18&other&N&N&ignored\\ -19&hangul&Y&Y&space\\ -\bottomrule -\end{tabular}\hfill\null - -\medskip - -%<*ja> -文字ウィドウ処理:「漢字が一文字だけ次の行に行くのを防ぐ」 -\cs{jcharwidowpenalty} が, -その文字の直前に挿入されうるか否か,を示す. -% -\end{table} +\subsection{異方向のボックス} -%<*en> -\cs{kcatcode} can be set by a row of JIS~X~0208 in \pTeX, -and generally by a Unicode block\footnote{% - \upTeX\ divides \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms) - into three subblocks, and \cs{kcatcode} can be set by a subblock. +縦組の中に「42」などの2桁以上の算用数字を横組で組むなど, +異なる組方向を混在させることがしばしば行われる. +組方向の混在も\pTeX と同じようにできる: +\begin{LTXexample} +ここは横組% yoko +\hbox{\tate % tate + \hbox{縦組}% tate + の中に + \hbox{\yoko 横組の内容}% yoko + を挿入する } -in \upTeX. So characters which can be used in a control word -slightly differ between \pTeX~and~\upTeX. -% -%<*ja> -\pTeX では \cs{kcatcode} はJIS~X~0208の区単位, -\upTeX では概ねUnicodeブロック単位\footnote{% - \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms)は - 「全角英数字」「半角カナ」「その他」と3つに分割されており, - それぞれ別々に \cs{kcatcode} が指定できるようになっている. -}で設定可能になっている.そのため,\pTeX と\upTeX の初期状態では -制御綴内で使用可能な文字が微妙に異なっている. -% - -%<*en> -\subsection{Case of \LuaTeX-ja} -The role of \cs{kcatcode} in \pTeX~and~\upTeX\ can be -divided into the following four kinds, -and \LuaTeX-ja can control these four kinds separately: -\begin{itemize} - \item -\emph{Distinction between \textbf{JAchar} or \textbf{ALchar}} -is controlled by the character range, see Subsection~\ref{ssec-setrange}. - \item -\emph{Whether the character can be used in a control word} -is controlled by setting \cs{catcode} to 11~(enabled) or 12~(disabled), as usual. - \item -\emph{Whether \Param{jcharwidowpenalty} can be inserted before the character} -is controlled by the lowermost bit of the \Param{kcatcode} parameter. - \item -\emph{Linebreak after a \textbf{JAchar}} does not produce a space. -\end{itemize} -% -%<*ja> -\subsection{\LuaTeX-jaの場合} -\LuaTeX-jaでは,従来の\pTeX・\upTeX における \cs{kcatcode} の役割を -分割している: -\begin{description} - \item[欧文/和文の区別 (\upTeX)] -\cs{ltjdefcharrange} と\textsf{jacharrange}パラメータ(\ref{ssec-setrange}節) - \item[制御綴中に使用可か] -\LuaTeX 自身の \cs{catcode} でよい - \item[\Param{jcharwidowpenalty}が挿入可か] -\Param{kcatcode}パラメータの最下位ビット - \item[直後の改行] -日本語しか想定していないので,\textbf{JAchar}直後の改行で半角スペースが挿入されることはない. -\end{description} -% - -%<*en> -Default setting of \cs{catcode} of Unicode characters are located in -\begin{description} - \item[plain \LuaTeX] \texttt{luatex-unicode-letters.tex}, which is based on \texttt{unicode-letters.tex} -(for \XeTeX). - \item[\LuaLaTeX] now included in \LaTeX\ kernel as~\texttt{unicode-letters.def}. -\end{description} -However, the default setting of \cs{catcode} differs -between \XeTeX\ and \LuaTeX, by the following reasons: -\begin{itemize} - \item (plain format) \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}. - \item The latter half of \texttt{unicode-letters.tex}~and~\texttt{unicode-letters.def} -sets\cs{catcode} of several characters to 11, via setting \cs{XeTeXcharclass}. -However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX. -\end{itemize} -In other words, -\begin{description} -\item[plain \LuaTeX] -Kanji nor kana characters cannot be used in -a control word, in the default setting of plain \LuaTeX. -\item[\LuaLaTeX] -In recent (2015-10-01 or later) \LuaLaTeX, Kanji and kana characters in a control word is supported (these catcode are 11), -but not fullwidth alphanumerics and several other characters. -\end{description} - -This would be inconvenient for \pTeX~users to shifting to \LuaTeX-ja, -since several control words containing Kanji or other fullwidth characters, such as -\verb+\西暦+~or~\verb+\1年目西暦+ are used in \pTeX. -Hence, \LuaTeX-ja have a counterpart of \texttt{unicode-letters.tex} -for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.} -% -%<*ja> -ネイティブにUnicode全部の文字を扱える\XeTeX や\LuaTeX では, -文字が制御綴内で使用できるかは通常の欧文文字と同じく \cs{catcode} -で指定することとなる.plain \XeTeX における \cs{catcode} の初期設定は\ -\texttt{unicode-letters.tex} 中に記述されており,plain \LuaTeX ではそれを -元にした \texttt{luatex-unicode-letters.tex} を用いている. -\LaTeX では \cs{catcode} の設定はカーネルに \texttt{unicode-letters.def} として統合され. -このファイルを\XeLaTeX, \LuaLaTeX の両方が用いている. +また横組に戻る% yoko +\end{LTXexample} -だが,\XeTeX における \cs{catcode} の初期設定と -\LuaTeX におけるそれは一致していない: -\begin{itemize} - \item \texttt{luatex-unicode-letters.tex} の元になった\ -\texttt{unicode-letters.tex} が古い - \item \texttt{unicode-letters.tex} 後半部や \texttt{unicode-letters.def} 後半部では -\cs{XeTeXcharclass} の設定を行なっており, -それによって漢字や仮名,および全角英数字の \cs{catcode} が11に設定されている. -しかし,\texttt{luatex-unicode-letters.tex} ではこの「後半部」が -まるごと省略されており,また\LuaLaTeX でも \texttt{unicode-letters.def} 後半部は実行されな - い. -\end{itemize} -言い換えると, -\begin{description} - \item[plain \LuaTeX] 漢字や仮名を制御綴内に -使用することはできない. - \item[\LuaLaTeX] 最近の(2015-10-01以降の) -\LuaLaTeX では漢字や仮名を制御綴内に -使用することが可能になったが,全角英数字は相変わらず使用できない, -\end{description} -これでは \pTeX で使用できた \verb+\1年目西暦+\footnote{科研費\LaTeX で使用されているそうです.}などが使えないこととなり, -\LuaTeX-jaへの移行で手間が生じる.そのため,\LuaTeX-jaでは -\texttt{unicode-letters.tex} の後半部にあたる内容を自前でパッチし, -結果として\textbf{\XeTeX における初期設定と同じになるようにしている.} +異なる組方向のボックスを配置した場合にどう組まれるかの仕様も,\pTeX を +踏襲している.\autoref{tab-diffdir}に示す. % -\begin{table} - \centering\small -%\caption{Difference of the set of non-kanji JIS~X~0208 characters which can be used in a control word} -%\caption{制御綴中に使用出来るJIS~X~0208非漢字の違い} +\begin{table}[t] +%\caption{異方向のボックスの配置} +%\caption{Boxes in different direction} %\medskip -\label{tab:kcat-diff} -\def\D#1#2#3#4{% - {\fboxsep0pt\fcolorbox{cyan}{white}% - {\large\char"#1#2#3#4}}\ (\texttt{U+#1#2#3#4})} %" -\leavevmode\hbox to 0pt{\hss\begin{tabular}{cccccc} -\toprule -%&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\ -%&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\ -\midrule -%\D 3000&1&1&N&N&Y\\ -\D 30FB&1&6&N&Y&N\\ -\D 309B&1&11&N&Y&N\\ -\D 309C&1&12&N&Y&N\\ -\D FF40&1&14&N&N&Y\\ -\D FF3E&1&16&N&N&Y\\ -\D FFE3&1&17&N&N&Y\\ -\D FF3F&1&18&N&N&Y\\ -%\D 30FD&1&19&N&Y&Y\\ -%\D 30FE&1&20&N&Y&Y\\ -%\D 309D&1&21&N&Y&Y\\ -%\D 309E&1&22&N&Y&Y\\ -\D 3003&1&23&N&N&Y\\ -\D 4EDD&1&24&N&Y&Y\\ -\D 3005&1&25&N&N&Y\\ -\D 3006&1&26&N&N&Y\\ -\D 3007&1&27&N&N&Y\\ -\D 30FC&1&28&N&Y&Y\\ -\D FF0F&1&31&N&N&Y\\ -\D FF3C&1&32&N&N&Y\\ -\bottomrule -\end{tabular}\qquad -\begin{tabular}{cccccc} +\label{tab-diffdir} + \centering\small\unitlength3mm + \def\TATEeg{% + \hbox{\smash{\begin{picture}(0,0)(-2,0) + \thicklines + \polyline(-2,0)(-2,-7)(5,-7)(5,0) + \put(0,0){\circle*{0.3}} + \put(2.5,-4){\makebox(0,0){\hbox{\tate\bfseries \emph{tate}/\emph{utod}}}} + \put(0,0){\vector(1,0){5}} \put(2.5,-0.2){\makebox(0,0)[t]{$h_{\mathrm{T}}$}} + \put(0,0){\vector(-1,0){2}}\put(-1,-0.2){\makebox(0,0)[t]{$d_{\mathrm{T}}$}} + \put(0,0){\vector(0,-1){7}}\put(0.2,-3.5){\makebox(0,0)[l]{$w_{\mathrm{T}}$}} + \end{picture}}}% + } + \def\DTOUeg{% + \hbox{\smash{\begin{picture}(0,0)(-5,0) + \thicklines + \polyline(-5,0)(-5,7)(2,7)(2,0) + \put(0,0){\circle*{0.3}} + \put(-2.5,4){\makebox(0,0){\hbox{\dtou\bfseries \emph{dtou}}}} + \put(0,0){\vector(-1,0){5}} \put(-2.5,0.3){\makebox(0,0)[b]{$h_{\mathrm{D}}$}} + \put(0,0){\vector(1,0){2}}\put(1,0.3){\makebox(0,0)[b]{$d_{\mathrm{D}}$}} + \put(0,0){\vector(0,1){7}}\put(-0.2,3.5){\makebox(0,0)[r]{$w_{\mathrm{D}}$}} + \end{picture}}}% + } + \def\YOKOeg{% + \hbox{\smash{\begin{picture}(0,0) + \thicklines + \polyline(0,5)(7,5)(7,-2)(0,-2) + \put(4,2.5){\makebox(0,0){\hbox{\yoko\bfseries \emph{yoko}}}} + \put(0,0){\circle*{0.3}} + \put(0,0){\vector(0,1){5}} \put(0.3,2.5){\makebox(0,0)[l]{$h_{\mathrm{Y}}$}} + \put(0,0){\vector(0,-1){2}}\put(0.3,-1){\makebox(0,0)[l]{$d_{\mathrm{Y}}$}} + \put(0,0){\vector(1,0){7}}\put(3.5,0.2){\makebox(0,0)[b]{$w_{\mathrm{Y}}$}} + \end{picture}}}% + } +\begin{tabular}{ccc} \toprule -%&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\ -%&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\ -\midrule -\D FF5C&1&35&N&N&Y\\ -\D FF0B&1&60&N&N&Y\\ -\D FF1D&1&65&N&N&Y\\ -\D FF1C&1&67&N&N&Y\\ -\D FF1E&1&68&N&N&Y\\ -\D FF03&1&84&N&N&Y\\ -\D FF06&1&85&N&N&Y\\ -\D FF0A&1&86&N&N&Y\\ -\D FF20&1&87&N&N&Y\\ -\D 3012&2&9&N&N&Y\\ -\D 3013&2&14&N&N&Y\\ -\D FFE2&2&44&N&N&Y\\ -\D 212B&2&82&N&N&Y\\ -%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Greek letters (row 6)}&Y&N&Y\\ -%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Cyrillic letters (row 7)}&N&N&Y\\ -%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}ギリシャ文字(6区)}&Y&N&Y\\ -%\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}キリル文字(7区)}&N&N&Y\\ -\bottomrule -\end{tabular}\hss}\par -\end{table} - -%<*en> -\subsection{Non-kanji characters in a control word} -Because the engine differ, so non-kanji JIS~X~0208 characters -which can be used in a control word differ in \pTeX, in \upTeX,~and~in \LuaTeX-ja. -\autoref{tab:kcat-diff} shows the difference. -Except for four characters ``・'',~``゛'', ``゜'',~``゠'', -\LuaTeX-ja admits more characters in a control word than \upTeX. - -Difference becomes larger, if we consider -non-kanji JIS~X~0213 characters. -For the detail, see \url{https://github.com/h-kitagawa/kct}. -% -%<*ja> -\subsection{制御綴中に使用出来るJIS非漢字の違い} - -エンジンが異なるので,\pTeX, \upTeX, \LuaTeX-ja -において制御綴中に使用可能なJIS~X~0208の文字は異なる. -異なっているところだけを載せると,\autoref{tab:kcat-diff}のようになる. -「・」「゛」「゜」「゠」を除けば,\LuaTeX-jaでは\upTeX より多くの文字が -制御綴に使用可能になっている. - -JIS~X~0213の範囲に広げると,差異はさらに大きくなる. -詳細については例えば \url{https://github.com/h-kitagawa/kct} 中の\ -\texttt{kct-out.pdf} などを参照すること. -% - - -%<*en> -\section{Directions} -\LuaTeX\ supports four $\Omega$-style directions: \texttt{TLT},~\texttt{TRT}, \texttt{RTT} -and \texttt{LTL}. -However, neither directions are not well-suited for typesetting Japanese vertically, hence we -implemented vertical writing by rotating \texttt{TLT}-box by 90~degrees. -% -%<*ja> -\section{縦組} -\label{sec-direction} -\LuaTeX 本体でも,$\Omega$・$\aleph$由来の機能として,複数の組方向をサポートしている. -しかし,\LuaTeX がサポートするのは \texttt{TLT},~\texttt{TRT}, \texttt{RTT},~\texttt{LTL}\ -のみであり,日本語の縦組に使うのは望ましくない\footnote{% -和文文字だけならば \texttt{RTT} を使えばなんとかなると思うが, -欧文文字が入ってきた場合はうまくいかず,\texttt{RTR} という組方向が必要になる. -}.そのため,\LuaTeX-jaでは横組(\texttt{TLT})で組んだボックスを回転させる方式で -縦組を実装した. -% - -%\subsection{サポートする組方向} -\begin{table}[t] -%\caption{\LuaTeX-ja のサポートする組方向} -%\caption{Directions supported by \LuaTeX-ja} -%\medskip -\label{tab-dir} -\centering\small -\def\obox#1{% - \setbox0=\hbox{\yoko\hbox{#1% - \large\ltjsetparameter{talbaselineshift=0pt}% - \vrule height 25pt width 0.4pt depth 15pt\kern-.2pt% - \raise25pt\hbox to 0pt{\hss\composite{*r^@{>>}}\hss}% - \raise-15pt\hbox to 0pt{\hss\composite{*l^@{>|}}\hss}\kern.2pt% - \vrule height.2pt depth.2pt width 60pt\hbox to 0pt{\hss\composite{*d^@{>}}\hss}\kern-60pt - \hbox to 60pt{\,銀は、Ag\hss}}}% - \raise\dimexpr 0.5\ltjgetdp0-0.5\ltjgetht0\box0% -} -%<*ja> -\begin{tabular}{>{\bfseries}lcccc} -\toprule -&横組&縦組 &「dtou方向」&「utod方向」\\ -\midrule -命令&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\ -字送り方向&水平右向き(→)&垂直下向き(↓)&垂直上向き(↑)&垂直下向き(↓)\\ -行送り方向&垂直下向き(↓)&水平左向き(←)&水平右向き(→)&水平左向き(←)\\ -使用する和文フォント&横組用(\cs{jfont})&縦組用(\cs{tfont})& -\multicolumn{2}{c}{% - 横組用(\cs{jfont})の$90^\circ$回転}\\[\smallskipamount] -組版例\null $^*$ &\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\ -\noalign{\medskip} -\bottomrule -\end{tabular} - -\medskip\raggedright -\def\R#1{% - \raise0.38\zw\hbox{% - \vrule height.2pt depth.2pt width2\zw% - \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}% - }% -} -$^*$\ 幅(width),高さ(height),深さ(depth)の増加方向を, -それぞれ「\R{>}」,「\R{>>}」,「\R{>|}」で表している. -\raggedright -% - -%<*en> -\begin{tabular}{>{\bfseries}lcccc} -\toprule -&horizontal (\emph{yoko}~direction)&vertical (\emph{tate}~direction)&% - \emph{dtou} direction&\emph{utod} direction\\ -\midrule -Commands&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\ -Beginning of the page&Top&Right&Left&Right\\ -Beginning of the line&Left&Top&Bottom&Top\\ -Used Japanese font&horizontal (\cs{jfont})&vertical (\cs{tfont})& -\multicolumn{2}{c}{% - horizontal ($90^\circ$ rotated)}\\[\smallskipamount] -Example&\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\ -\noalign{\medskip} -(Notation used in $\Omega$)&TLT&RTR, RTT&LBL&RTR\\ -\bottomrule -\end{tabular} - -\medskip\raggedright -\def\R#1{% - \raise0.38\zw\hbox{% - \vrule height.2pt depth.2pt width2\zw% - \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}% - }% -} -\raggedright -% -\end{table} - -%<*en> -\LuaTeX-ja supports four directions, as shown in \autoref{tab-dir}. -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. -The fifth column (\emph{utod} direction) corresponds the ``\texttt{tate (math) direction}'' of \pTeX. - -Directions can be changed by \cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod}, -only when the current list is null. Also, the direction of a math formula is changed to -\emph{utod}, when the direction outside the math formula is \emph{tate} (vertical writing). -% - -%<*ja> -\LuaTeX-jaがサポートする組方向は\autoref{tab-dir}に示す4つである. -4列目の \cs{dtou} は聞き慣れない命令だと思うが, -実は\pTeX に同名の命令が(ドキュメントには書かれていないが)存在する. -Down-TO-Upの意味なのだろう.\cs{dtou} を使用する機会はないだろうが, -\LuaTeX-jaではデバッグ用に実装している. -5列目の \cs{utod} は,\pTeX で言う「縦数式ディレクション」に相当するものである. - -組方向は,\cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod} をそれぞれ使用することで, -現在作成中のリストやボックスが空の時にのみ変更可能である. -また,縦組中の数式内のボックスは\pTeX と同じように組方向が \cs{utod} となる. -% - -%<*en> -\subsection{Boxes in different direction} - -As in \pTeX, one can use boxes of different direction in one document. -The below is an example. -\begin{LTXexample} -ここは横組% yoko -\hbox{\tate % tate - \hbox{縦組}% tate - の中に - \hbox{\yoko 横組の内容}% yoko - を挿入する -} -また横組に戻る% yoko -\end{LTXexample} - -\autoref{tab-diffdir} shows how a box is arranged when -the direction inside the box and that outside the box differ. -% -%<*ja> -\subsection{異方向のボックス} - -縦組の中に「42」などの2桁以上の算用数字を横組で組むなど, -異なる組方向を混在させることがしばしば行われる. -組方向の混在も\pTeX と同じようにできる: -\begin{LTXexample} -ここは横組% yoko -\hbox{\tate % tate - \hbox{縦組}% tate - の中に - \hbox{\yoko 横組の内容}% yoko - を挿入する -} -また横組に戻る% yoko -\end{LTXexample} - -異なる組方向のボックスを配置した場合にどう組まれるかの仕様も,\pTeX を -踏襲している.\autoref{tab-diffdir}に示す. -% - -\begin{table}[t] -%\caption{異方向のボックスの配置} -%\caption{Boxes in different direction} -%\medskip -\label{tab-diffdir} - \centering\small\unitlength3mm - \def\TATEeg{% - \hbox{\smash{\begin{picture}(0,0)(-2,0) - \thicklines - \polyline(-2,0)(-2,-7)(5,-7)(5,0) - \put(0,0){\circle*{0.3}} - \put(2.5,-4){\makebox(0,0){\hbox{\tate\bfseries \emph{tate}/\emph{utod}}}} - \put(0,0){\vector(1,0){5}} \put(2.5,-0.2){\makebox(0,0)[t]{$h_{\mathrm{T}}$}} - \put(0,0){\vector(-1,0){2}}\put(-1,-0.2){\makebox(0,0)[t]{$d_{\mathrm{T}}$}} - \put(0,0){\vector(0,-1){7}}\put(0.2,-3.5){\makebox(0,0)[l]{$w_{\mathrm{T}}$}} - \end{picture}}}% - } - \def\DTOUeg{% - \hbox{\smash{\begin{picture}(0,0)(-5,0) - \thicklines - \polyline(-5,0)(-5,7)(2,7)(2,0) - \put(0,0){\circle*{0.3}} - \put(-2.5,4){\makebox(0,0){\hbox{\dtou\bfseries \emph{dtou}}}} - \put(0,0){\vector(-1,0){5}} \put(-2.5,0.3){\makebox(0,0)[b]{$h_{\mathrm{D}}$}} - \put(0,0){\vector(1,0){2}}\put(1,0.3){\makebox(0,0)[b]{$d_{\mathrm{D}}$}} - \put(0,0){\vector(0,1){7}}\put(-0.2,3.5){\makebox(0,0)[r]{$w_{\mathrm{D}}$}} - \end{picture}}}% - } - \def\YOKOeg{% - \hbox{\smash{\begin{picture}(0,0) - \thicklines - \polyline(0,5)(7,5)(7,-2)(0,-2) - \put(4,2.5){\makebox(0,0){\hbox{\yoko\bfseries \emph{yoko}}}} - \put(0,0){\circle*{0.3}} - \put(0,0){\vector(0,1){5}} \put(0.3,2.5){\makebox(0,0)[l]{$h_{\mathrm{Y}}$}} - \put(0,0){\vector(0,-1){2}}\put(0.3,-1){\makebox(0,0)[l]{$d_{\mathrm{Y}}$}} - \put(0,0){\vector(1,0){7}}\put(3.5,0.2){\makebox(0,0)[b]{$w_{\mathrm{Y}}$}} - \end{picture}}}% - } -\begin{tabular}{ccc} -\toprule -%\emph{横組中に配置}&\emph{縦組中に配置}&% -%\emph{組方向 \cs{dtou} 中に配置}\\ -%\textbf{typeset in \emph{yoko} direction} -%&\textbf{typeset in \emph{tate} or \emph{utod} direction} -%&\textbf{typeset in \emph{dtou} direction}\\ +%\emph{横組中に配置}&\emph{縦組中に配置}&% +%\emph{組方向 \cs{dtou} 中に配置}\\ +%\textbf{typeset in \emph{yoko} direction} +%&\textbf{typeset in \emph{tate} or \emph{utod} direction} +%&\textbf{typeset in \emph{dtou} direction}\\ \midrule \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4) \put(0,0){\line(1,0){3.8}} @@ -3587,3937 +3079,5343 @@ the direction inside the box and that outside the box differ. %<*en> -\paragraph{\cs{wd} and direction} -In \pTeX, \cs{wd},~\cs{ht},~\cs{dp} means the dimensions of a box register -\emph{with respact to the current direction}. -This means that the value of \cs{wd0} etc.\ might differ when the current direction is -different, even if \cs{box0} stores the same box. -However, this no longer applies in \LuaTeX-ja. +\paragraph{\cs{wd} and direction} +In \pTeX, \cs{wd},~\cs{ht},~\cs{dp} means the dimensions of a box register +\emph{with respact to the current direction}. +This means that the value of \cs{wd0} etc.\ might differ when the current direction is +different, even if \cs{box0} stores the same box. +However, this no longer applies in \LuaTeX-ja. + +\begin{LTXexample} +% yoko direction +\setbox0=\hbox to 20pt{foo} +\the\wd0,~\hbox{\tate\vrule\the\wd0} +\wd0=100pt +\the\wd0,~\hbox{\tate \the\wd0} +\end{LTXexample} + +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 +the current direction. One can use these in \cs{dimexpr} primitive, as the followings. +\begin{lstlisting} +\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701 +\end{lstlisting} +The following is an example. +\begin{LTXexample}[width=0.3\textwidth] +\parindent0pt +\setbox32767=\hbox{\yoko よこぐみ} +\fboxsep=0mm\fbox{\copy32767} +\vbox{\hsize=20mm +\yoko YOKO \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\vbox{\hsize=20mm\raggedleft +\tate TATE \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\vbox{\hsize=20mm\raggedleft +\dtou DTOU \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\end{LTXexample} + + \item[\cs{ltjsetwd}=\textrm{, }\cs{ltjsetht}=\textrm{, }% + \cs{ltjsetdp}=] +These commands set the dimension of \cs{box}. One does not need + to group the argument ; four calls of \cs{ltjsetwd} below have the same meaning. +\begin{lstlisting} +\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt +\end{lstlisting} + +\end{cslist} +% +%<*ja> +\paragraph{\cs{wd} 達と組方向} +ボックスレジスタ \cs{box} にセットされているボックスの幅・高さ・深さの取得や +変更にはそれぞれ \cs{wd},~\cs{ht},~\cs{dp} プリミティブを用いるのであった. +\pTeX ではこれらのプリミティブは,「現在の組方向におけるボックスの寸法」を指すもので, +同じボックスに対しても現在の組方向によって返る値は異なるもであった. + +\LuaTeX-jaにおいては状況が異なり,\cs{wd},~\cs{ht},~\cs{dp} が返す値は +現在の組方向には依存しない.下の例のように,横組のボックスが格納されていれば +\cs{wd}等は常に「横組におけるボックスの寸法」を意味する. + +\begin{LTXexample} +% yoko direction +\setbox0=\hbox to 20pt{foo} +\the\wd0,~\hbox{\tate\vrule\the\wd0} +\wd0=100pt +\the\wd0,~\hbox{\tate \the\wd0} +\end{LTXexample} + +\pTeX のように現在の組方向に応じたボックスの寸法の取得・設定を行うには, +代わりに次の命令を使用する. + +\begin{cslist} + + \item[\cs{ltjgetwd}\textrm{, }\cs{ltjgetht}\textrm{, }% + \cs{ltjgetdp}] +現在の組方向に応じたボックスの寸法の取得を行う.結果は内部長さであるため, +\begin{lstlisting} +\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701 +\end{lstlisting} +のように \cs{wd} の代わりとして扱うことができる. +使用例は以下の通りである. +\begin{LTXexample}[width=0.3\textwidth] +\parindent0pt +\setbox32767=\hbox{\yoko よこぐみ} +\fboxsep=0mm\fbox{\copy32767} +\vbox{\hsize=20mm +\yoko YOKO \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\vbox{\hsize=20mm\raggedleft +\tate TATE \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\vbox{\hsize=20mm\raggedleft +\dtou DTOU \the\ltjgetwd32767, \\ + \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\end{LTXexample} + + \item[\cs{ltjsetwd}=\textrm{, }\cs{ltjsetht}=\textrm{, }% + \cs{ltjsetdp}=] +現在の組方向に応じたボックスの寸法の設定を行う.\cs{afterassignment} を2回利用して +実装しているので,次の4通りは全て同じ意味である. +\begin{lstlisting} +\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt +\end{lstlisting} + +設定値は「横組」「縦組及びutod方向」「dtou方向」 +の3種ごとに独立して記録される.参考として,Gitリポジトリ内の + \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を挙げておく. + +\end{cslist} +% + +%<*en> +\subsection{Getting current direction} +The \Param{direction} parameter returns the current direction, and +the \Param{boxdir} parameter (with the argument ) +returns the direction of a box register \cs{box}. +The returned value of these parameters are a \emph{string}: +\begin{center} +\small +\begin{tabular}{>{\bfseries}lccccc} +\toprule +Direction&\emph{yoko}&\emph{tate}&\emph{dtou}&\emph{utod}&(empty)\\ +\midrule +Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ +\bottomrule +\end{tabular} +\end{center} +\begin{LTXexample}[width=0.3\textwidth] +\leavevmode\def\DIR{\ltjgetparameter{direction}} +\hbox{\yoko \DIR}, \hbox{\tate\DIR}, +\hbox{\dtou\DIR}, \hbox{\utod\DIR}, +\hbox{\tate$\hbox{tate math: \DIR}$} + +\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2} +\end{LTXexample} +% +%<*ja> +\subsection{組方向の取得} +「現在の組方向」や「番のボックスの組方向」は, +\pTeX では \cs{ifydir} や \cs{ifybox} といった条件判断文を使って +判断することができた. +しかし,\LuaTeX-jaはあくまでも\TeX マクロとLuaコードで +記述されており,それでは新たな条件判断命令を作るのは難しい. + +\LuaTeX-jaでは,\Param{direction}パラメータで現在の組方向を, +\Param{boxdir}パラメータ(と追加の引数)によって +\cs{box}の組方向をそれぞれ取得できるようにした. +戻り値は文字列である: +\begin{center} +\small +\begin{tabular}{>{\bfseries}lccccc} +\toprule +組方向&\emph{横組}&\emph{tate縦組}&\emph{dtou方向}&\emph{utod方向}&(未割り当て)\\ +\midrule +戻り値&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ +\bottomrule +\end{tabular} +\end{center} + +\begin{LTXexample}[width=0.3\textwidth] +\leavevmode\def\DIR{\ltjgetparameter{direction}} +\hbox{\yoko\DIR}, \hbox{\tate\DIR}, +\hbox{\dtou\DIR}, \hbox{\utod\DIR}, +\hbox{\tate$\hbox{tate math: \DIR}$} + +\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2} +\end{LTXexample} + +これらを用いれば,例えば +\pTeX の \cs{ifydir},~\cs{ifybox200} と同等の条件判断を +\begin{lstlisting} +\ifnum\ltjgetparameter{direction}=4 +\ifnum\ltjgetparameter{boxdir}{200}=4 +\end{lstlisting} +のように行うことができる. +\cs{iftdir} は少々面倒であるが,8で割った余りが3であるか否かを判断すれば良いから +\begin{lstlisting} +\ifnum\numexpr + \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3 +\end{lstlisting} +とすればよい. +% + +%<*en> +\subsection{Overridden box primitives} +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}\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{vcenter}] +\end{cslist} +% +%<*ja> +\subsection{プリミティブの再定義} +異なる組方向に対応するために,以下に挙げるプリミティブは +\LuaTeX-jaによる前処理もしくは後処理が行われるように +\ \verb+\protected\def+ により再定義してある. + +\begin{cslist} + \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\_box}という)を必要ならば除去し, + 正しく「中身」のボックスが返されるように前処理をする. + \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] + 一方,こちらでは必要に応じて\textit{dir\_box}を作成する前処理を追加している. +\end{cslist} +% + +%\section{Font Metric and Japanese Font} +%\section{フォントメトリックと和文フォント} +%\subsection{\cs{jfont}} +%\subsection{\cs{jfont} 命令} +\label{ssec:jfont} + +%<*en> +To load a font as a Japanese font (for horizontal direction), you must use the +\cs{jfont} instead of~\cs{font}, while +\cs{jfont} admits the same syntax used in~\cs{font}. +\LuaTeX-ja automatically loads \Pkg{luaotfload} package, +so TrueType/OpenType fonts with features can be used for Japanese fonts: +% +%<*ja> +フォントを(横組用)和文フォントとして読み込むためには,\cs{jfont} を +\ \cs{font} プリミティブの代わりに用いる. +\cs{jfont} の文法は \cs{font} と同じである. +\LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので, +TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる +ことができる: +% +\begin{LTXexample}[width=0.3\textwidth] +\jfont\tradgt={file:KozMinPr6N-Regular.otf:script=latn;% + +trad;-kern;jfm=ujis} at 14pt +\tradgt 当/体/医/区 +\end{LTXexample} + +%<*en> +Note that the defined control sequence +(\cs{tradgt} in the example above) using \cs{jfont} is not a +\textit{font\_def} token, but a macro. +Hence the input like \verb+\fontname\tradgt+ +causes a error. We denote control sequences which are defined in +\cs{jfont} by . +% +%<*ja> +なお,\cs{jfont} で定義された制御綴(上の例だと \cs{tradgt}) +は\textit{font\_def}トークンではなくマクロである.従って,\verb+\fontname\tradgt+ のような +入力はエラーとなる.以下では \cs{jfont} で定義された +制御綴をで表す. +% + +\paragraph{JFM} +%<*en> +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の構造は次の節で述べる. +\cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで +指定する必要がある: +% + + +\begin{table}[t] +%\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#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> +Specify the name of (horizontal) JFM. +If specified JFM has not been loaded, \LuaTeX-ja search and load +a file named \texttt{jfm-.lua}. + +The following horizontal JFMs are shipped with \LuaTeX-ja: +% +%<*ja> +用いる(横組用)JFMの名前を指定する.もし以前に指定されたJFMが読み込まれていなければ, +\texttt{jfm-.lua}を読み込む.以下の横組用JFMが\LuaTeX-jaには同梱されている: +% +\begin{description} +%<*en> +\item[\tt jfm-ujis.lua] A standard horizontal JFM in \LuaTeX-ja. This JFM is + based on \verb+upnmlminr-h.tfm+, a metric for UTF/OTF package that + is used in \upTeX. When you use the \Pkg{luatexja-otf} package, you should use this JFM. +% +%<*ja> +\item[\tt jfm-ujis.lua] \LuaTeX-jaの標準JFMである.このJFMは\upTeX で + 用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-h.tfm+ を + 元にしている.\Pkg{luatexja-otf}パッケージを使うときはこのJFMを指定するべきである. +% +%<*en> +\item[\tt jfm-jis.lua] A counterpart for \verb+jis.tfm+, ``JIS font + metric'' which is widely used in \pTeX. A major difference between + \texttt{jfm-ujis.lua} and this \texttt{jfm-jis.lua} is that + most characters under \texttt{jfm-ujis.lua} are square-shaped, + while that under \texttt{jfm-jis.lua} are horizontal + rectangles. +% +%<*ja> +\item[\tt jfm-jis.lua] \pTeX で広く用いられている「JISフォントメトリック」 + \verb+jis.tfm+ に相当するJFMである.\texttt{jfm-ujis.lua} とこの + \texttt{jfm-jis.lua} の主な違いは,\texttt{jfm-ujis.lua} ではほとんどの文字が + 正方形状であるのに対し,\texttt{jfm-jis.lua} では横長の長方形状であることと, + \texttt{jfm-ujis.lua} では「?」「!」の直後に半角空白が挿入されることである. +% +%<*en> +\item[\tt jfm-min.lua] A counterpart for \verb+min10.tfm+, which is one + of the default Japanese font metric shipped with \pTeX. +% +%<*ja> +\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用TFM +(\verb+min10.tfm+)に相当し,行末で文字が揃うようにするために「っ」など一部の文字幅が変わっ + ている.\verb+min10.tfm+ については\cite{min10}が詳しい. +% +\end{description} +%<*en> +The difference among these three~JFMs is shown in \autoref{tab-difjfm}. +% +%<*ja> +これら3つのJFMの違いは\autoref{tab-difjfm}に示した.表中の文例の一部には, +\cite{min10}の図3,~4のものを用いた. +% + +\begin{figure} +\begin{LTXexample}[width=0.3\textwidth] +\ltjsetparameter{differentjfm=both} +\jfont\F=file:KozMinPr6N-Regular.otf:jfm=ujis +\jfont\G=file:KozGoPr6N-Medium.otf:jfm=ujis +\jfont\H=file:KozGoPr6N-Medium.otf:jfm=ujis;jfmvar=hoge +\F ){\G 【】}( % halfwidth space + ){\H 『』}( % fullwidth space + +ほげ,{\G 「ほげ」}(ほげ)\par +ほげ,{\H 「ほげ」}(ほげ)% pTeX-like + +\ltjsetparameter{differentjfm=paverage} +\end{LTXexample} +\caption{Example of \texttt{jfmvar} key} +\label{fig:jfmvar} +\end{figure} + +%<*en> +\item[jfmvar=] +Sometimes there is a need that \ldots. +% +%<*ja> +\item[jfmvar=] +標準では,JFMとサイズが同じで, + 実フォントだけが異なる2つの和文フォントは「区別されない」.例えば +\autoref{fig:jfmvar}において,最初の「)」と「【」の実フォントは異なるが, +JFMもサイズも同じなので,普通に「)【」と入力した時と同じように半角空きとなる. -\begin{LTXexample} -% yoko direction -\setbox0=\hbox to 20pt{foo} -\the\wd0,~\hbox{\tate\vrule\the\wd0} -\wd0=100pt -\the\wd0,~\hbox{\tate \the\wd0} +しかし,JFMとサイズが同じであっても,\texttt{jfmvar} キーの異なる +2つの和文フォント,例えば\autoref{fig:jfmvar}で言う \cs{F} と \cs{H}, +は「区別される」.異なる和文フォントに異なる \texttt{jfmvar} キーを割り当て, +かつ\Param{differentjfm}パラメータを \texttt{both} に設定すれば, +\pTeX と似た状況で組版されることになる. +% +\end{cslist} + +\begin{figure} +\begin{LTXexample}[pos=t] +\newcommand\test{\vrule ダイナミックダイクマ\vrule\\} +\jfont\KMFW = KozMinPr6N-Regular:jfm=prop;-kern at 17pt +\jfont\KMFK = KozMinPr6N-Regular:jfm=prop at 17pt % kern is activated +\jfont\KMPW = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;-kern at 17pt +\jfont\KMPK = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;+kern at 17pt +\begin{multicols}{2} +\ltjsetparameter{kanjiskip=0pt} +{\KMFW\test \KMFK\test \KMPW\test \KMPK\test} + +\ltjsetparameter{kanjiskip=3pt} +{\KMFW\test \KMFK\test \KMPW\test \KMPK\test} +\end{multicols} \end{LTXexample} +\caption{Kerning information and \Param{kanjiskip}} +\label{fig:kern-jfm} +\end{figure} -To access box dimensions \emph{with respect to current direction}, -one have to use the following commands instead of \cs{wd} wtc. -\begin{cslist} +%\paragraph{Using kerning information in a font} +%\paragraph{ペアカーニング情報の使用} +\label{para-kern} +%<*en> +Some fonts have information for inter-glyph spacing. +\LuaTeX-ja 20140324.0 or later treats kerning spaces like an italic correction; +any glue and/or kern from the JFM and a kerning space can coexist. +See \autoref{fig:kern-jfm} for detail. - \item[\cs{ltjgetwd}\textrm{, }\cs{ltjgetht}\textrm{, }% - \cs{ltjgetdp}] -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. +Note that in \cs{setmainjfont} etc.\ which are provided by \Pkg{luatexja-fontspec} +package, kerning option is set \emph{off} (\texttt{Kerning=Off}) by default, +because of the compatibility with previous versions of \LuaTeX-ja. +% +%<*ja> +いくつかのフォントはグリフ間のスペースについての情報を持っている. +このカーニング情報は以前の\LuaTeX-ja とはあまり相性が良くなかったが, +バージョン20140324.0以降ではカーニングによる空白はイタリック補正と同様に扱うことになっている. +つまり,カーニング由来の空白とJFM由来のグルー・カーンは同時に入りうる. +\autoref{fig:kern-jfm}を参照. +\begin{itemize} + \item \emph{\cs{jfont} や, +NFSS2用の命令(\ref{ssec:chgfnt}節,\ref{ssec:nfsspat}節)における指定では +カーニング情報は標準で使用する}ことになっているようである. +言い換えれば,カーニング情報を使用しない設定にするには,面倒でも \begin{lstlisting} -\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701 +\jfont\hoge=KozMinPr6N-Regular:jfm=ujis;-kern at 3.5mm +\DeclareFontShape{JY3}{fuga}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;-kern}{} \end{lstlisting} -The following is an example. +のように,\texttt{-kern} という指定を自分で追加しなければいけない. + \item +一方,\emph{\Pkg{luatexja-fontspec} の提供する \cs{setmainjfont}\ +などの命令の標準設定ではカーニング情報は使用しない}(\texttt{Kerning=Off}) +ことになっている.これは以前のバージョンの\LuaTeX-jaとの互換性のためである. +\end{itemize} +% + +%<*ja> +\paragraph{\texttt{extend}と\texttt{slant}} +OpenType機能と見かけ上同じような形式で指定できるものに, +\begin{description} +\item[\texttt{extend=}] 横方向に倍拡大する. +\item[\texttt{slant=}] に指定された割合だけ傾ける. +\end{description} +の2つがある. +\texttt{extend}や\texttt{slant}を指定した場合は,それに応じたJFMを指定すべきである% +\footnote{\LuaTeX-jaでは,これらに対するJFMを特に提供することはしない予定である.}. +例えば,次の例では無理やり通常のJFMを使っているために,文字間隔やイタリック補正量が +正しくない: +% +%<*en> +\paragraph{\texttt{extend} and \texttt{slant}} +The following setting can be specified as OpenType font features: +\begin{cslist}[style=standard] +\item[\texttt{extend=}] expand the font horizontally by . +\item[\texttt{slant=}] slant the font. +\end{cslist} +Note that \LuaTeX-ja doesn't adjust JFMs by these \texttt{extend} and \texttt{slant} +settings; you have to write new JFMs on purpose. +For example, the following example uses the standard JFM \texttt{jfm-ujis.lua}, hence +letter-spacing and the width of italic correction are not correct: +% \begin{LTXexample}[width=0.3\textwidth] -\parindent0pt -\setbox32767=\hbox{\yoko よこぐみ} -\fboxsep=0mm\fbox{\copy32767} -\vbox{\hsize=20mm -\yoko YOKO \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} -\vbox{\hsize=20mm\raggedleft -\tate TATE \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} -\vbox{\hsize=20mm\raggedleft -\dtou DTOU \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} +\jfont\E=KozMinPr6N-Regular:extend=1.5;jfm=ujis;-kern +\E あいうえお + +\jfont\S=KozMinPr6N-Regular:slant=1;jfm=ujis;-kern +\S あいう\/ABC \end{LTXexample} - \item[\cs{ltjsetwd}=\textrm{, }\cs{ltjsetht}=\textrm{, }% - \cs{ltjsetdp}=] -These commands set the dimension of \cs{box}. One does not need - to group the argument ; four calls of \cs{ltjsetwd} below have the same meaning. +%<*ja> +\paragraph{\texttt{ltjksp} 指定} +\label{pg:ltjksp} +\LuaTeX-ja標準では, +JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ +\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の使用によって, +「JFM由来のグルーの他に,\Param{kanjiskip}の自然長/伸び量/縮み量の一部が +同じ場所に挿入される」という状況が起こりうる. +この機能を無効化し,バージョン20150922.0以前と同じような組版を得るためには +他のOpenType機能と同じように\ \texttt{-ltjksp}\ 指定を行えば良い. +\begin{LTXexample}[width=16\zw] +\leavevmode +\ltjsetparameter{kanjiskip=0pt plus 3\zw} +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule + +\jfont\G=file:KozMinPr6N-Regular.otf% + :jfm=ujis;-ltjksp at 9.2487pt +\G\leavevmode% +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule +\end{LTXexample} +なお, \begin{lstlisting} -\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt + \jfont\G=file:KozMinPr6N-Regular.otf:jfm=ujis;-ltjksp;+ltjksp at 9.2487pt \end{lstlisting} +のように \texttt{+ltjksp} 指定を行った場合は,\texttt{kanjiskip\_natural} など +3キーは再び有効化される.\texttt{-ltjksp}, \texttt{+ltjksp} を複数回指定した場合は, +最後に指定したものが有効となる. +% +%<*en> +\paragraph{\texttt{ltjksp}} +\label{pg:ltjksp} +\texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ +\texttt{kanjiskip\_shrink} keys (Page~\pageref{pg:ksp_nat}) makes tha +\LuaTeX-ja inserts not only a glue which is specified by a JFM, and also +the natural width/stretch part/shrink part of \Param{kanjiskip}. -\end{cslist} +This functionality is disabled by \texttt{-ltjksp} specification. +\begin{LTXexample}[width=16\zw] +\leavevmode +\ltjsetparameter{kanjiskip=0pt plus 3\zw} +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule + +\jfont\G=file:KozMinPr6N-Regular.otf% + :jfm=ujis;-ltjksp at 9.2487pt +\G\leavevmode% +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule +\end{LTXexample} % -%<*ja> -\paragraph{\cs{wd} 達と組方向} -ボックスレジスタ \cs{box} にセットされているボックスの幅・高さ・深さの取得や -変更にはそれぞれ \cs{wd},~\cs{ht},~\cs{dp} プリミティブを用いるのであった. -\pTeX ではこれらのプリミティブは,「現在の組方向におけるボックスの寸法」を指すもので, -同じボックスに対しても現在の組方向によって返る値は異なるもであった. -\LuaTeX-jaにおいては状況が異なり,\cs{wd},~\cs{ht},~\cs{dp} が返す値は -現在の組方向には依存しない.下の例のように,横組のボックスが格納されていれば -\cs{wd}等は常に「横組におけるボックスの寸法」を意味する. -\begin{LTXexample} -% yoko direction -\setbox0=\hbox to 20pt{foo} -\the\wd0,~\hbox{\tate\vrule\the\wd0} -\wd0=100pt -\the\wd0,~\hbox{\tate \the\wd0} -\end{LTXexample} -\pTeX のように現在の組方向に応じたボックスの寸法の取得・設定を行うには, -代わりに次の命令を使用する. -\begin{cslist} +%\subsection{\cs{tfont}} +%\subsection{\cs{tfont} 命令} +\label{ssec:tfont} - \item[\cs{ltjgetwd}\textrm{, }\cs{ltjgetht}\textrm{, }% - \cs{ltjgetdp}] -現在の組方向に応じたボックスの寸法の取得を行う.結果は内部長さであるため, +\begin{comment} + {\catcode`\<=12\catcode`\>=12 +\begin{table}[t] +%\caption{Differences between vertical JFMs shipped with \LuaTeX-ja} +%\caption{\LuaTeX-ja に同梱されている縦組用 JFM の違い} +%\medskip +\label{tab-difjfm-tate} +\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} +} +\end{comment} + +%<*en> +\cs{tfont} loads a font as a Japanese font for vertical direction. +This command admits the same syntax used in \cs{font}~and~\cs{jfont}. +A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont}: +\begin{itemize} + \item OpenType Feature~\texttt{vrt2}% + \footnote{If the font does not define \texttt{vrt2} feature, + use \texttt{vert} instead.} is automatically activated, + unless \texttt{vert}~and//or~\texttt{vrt2} are explicitly activated + or deactivated (as the second line in the example below). \begin{lstlisting} -\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701 +\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujisv % vrt2 is automatically activated +\tfont\T=file:KozMinPr6N-Regular.otf:jfm=ujisv;-vert % vert and vrt2 are not activated +\tfont\U=file:ipaexm.ttf:jfm=ujisv + % vert is automatically activated, since this font does not have vrt2 \end{lstlisting} -のように \cs{wd} の代わりとして扱うことができる. -使用例は以下の通りである. -\begin{LTXexample}[width=0.3\textwidth] -\parindent0pt -\setbox32767=\hbox{\yoko よこぐみ} -\fboxsep=0mm\fbox{\copy32767} -\vbox{\hsize=20mm -\yoko YOKO \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} -\vbox{\hsize=20mm\raggedleft -\tate TATE \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} -\vbox{\hsize=20mm\raggedleft -\dtou DTOU \the\ltjgetwd32767, \\ - \the\ltjgetht32767, \\ \the\ltjgetdp32767.} + \item Sometimes \texttt{vert} and/or \texttt{vrt2} are not activated + while one specified activation of these feature. + This is because the font does not define these features in current combination of + script~tag and language~system~identifier. + + In this situation, \LuaTeX-ja performs all replacements which is defined in~\texttt{vert} + feature for \emph{some} scripts for \emph{some} languages. + \item Furthermore, a glyph is automatically rotated 90~degrees, + if it is not replaced by \texttt{vert} feature for \emph{any} script + for \emph{any} language, and if it is marked as `r''~or~``Tr'' in UAX~\#50. + \item One have to specify the name of vertical JFM in \texttt{jfm=}. +\LuaTeX-ja ships following vertical JFMs: +\begin{description} +\item[\tt jfm-ujisv.lua] A standard vertical JFM in \LuaTeX-ja. This JFM is + based on \verb+upnmlminr-v.tfm+, a metric for UTF/OTF package that + is used in \upTeX. +\item[\tt jfm-tmin.lua] A counterpart for \verb+tmin10.tfm+, which is one + of the default Japanese font metric shipped with \pTeX. +\end{description} +\begin{figure}[!tb] +\begin{LTXexample}[pos=b] +\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis +\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv +\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf +\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}} +\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V \end{LTXexample} - - \item[\cs{ltjsetwd}=\textrm{, }\cs{ltjsetht}=\textrm{, }% - \cs{ltjsetdp}=] -現在の組方向に応じたボックスの寸法の設定を行う.\cs{afterassignment} を2回利用して -実装しているので,次の4通りは全て同じ意味である. +\caption{\texttt{jpotf} ``feature''} +\label{fig:jpotf} +\end{figure} + + \item If \texttt{vert}~and/or~\texttt{vrt2} features are activated, + one can specify \texttt{jpotf} to additional substitutions. + By default, it substitutes ideographic comma/period for fullwidth comma/period, + and double prime quotation marks for double quotation marks + (See~\autoref{fig:jpotf}). +\end{itemize} +% +%<*ja> +\cs{tfont} はフォントを縦組用の和文フォントとして読み込む命令であり, +\cs{tfont} の文法は \cs{jfont} と同じである. +\cs{tfont} で定義された縦組用和文フォントは, +以下の点が \cs{jfont} による横組用和文フォントとは異なる: +\begin{itemize} + \item 明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の + 有効・無効を指定した場合を除き,自動的に OpenType機能 \texttt{vrt2} の有効化が + 指定されたものとみなされる + \footnote{もしフォントが\texttt{vrt2}を定義していなかった場合,代わりに + \texttt{vert}を用いる.}. \begin{lstlisting} -\ltjsetwd42 20pt, \ltjsetwd42=20pt, \ltjsetwd=42 20pt, \ltjsetwd=42=20pt +\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujisv % vrt2 is automatically activated +\tfont\T=file:KozMinPr6N-Regular.otf:jfm=ujisv;-vert % vert and vrt2 are not activated +\tfont\U=file:ipaexm.ttf:jfm=ujisv + % vert is automatically activated, since this font does not have vrt2 \end{lstlisting} + \item \texttt{vert}, \texttt{vrt2} の少なくとも一つの有効を指定した場合にも関わらず, + script tagとlanguage system identifierの値の組み合わせによって + 実際には有効にならなかった場合,\LuaTeX-jaは + \begin{quote} + どれかのscript,~languageで定義されている\texttt{vert}による + (単一グリフから単一グリフへの)置換を全部適用する + \end{quote} + という挙動を取る\footnote{% + 例えば,Windows~7に付属しているSimHeiでは,\texttt{vert}はScriptが\texttt{hani}, + Languageが\texttt{CHN}という状況でのみ定義されている.しかし,\Pkg{luaotfload}では + このscript,~languageの組み合わせを指定することはできないので, + \Pkg{luaotfload}そのままでは\texttt{vert}を適用させることはできない. + }. + \item さらに,「いかなるscript,~languageでも\texttt{vert}により置換されない」グリフ + のうち,UAX~\#50で``r''もしくは``Tr''と指定されているものは90度自動回転させる. + \item \ref{ssec:math}節で述べる,数式中の和文フォントには縦組用和文フォントは指定できない. + \item \texttt{jfm=}\ の部分には縦組用JFMを指定する. +以下の縦組用JFMが\LuaTeX-jaには同梱されている.%おり,違いを\autoref{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} -設定値は「横組」「縦組及びutod方向」「dtou方向」 -の3種ごとに独立して記録される.参考として,Gitリポジトリ内の - \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を挙げておく. +\begin{figure}[!tb] +\begin{LTXexample}[pos=b] +\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis +\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv +\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf +\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}} +\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V +\end{LTXexample} +\caption{\texttt{jpotf} ``feature''} +\label{fig:jpotf} +\end{figure} + + \item \texttt{vert}, \texttt{vrt2}の少なくとも片方が(明示的・自動的を問わず) + 有効になっていた場合,さらに\texttt{jpotf}を指定することで + 「通常では行わない縦組用字形への変換」を行うことができる. -\end{cslist} + 標準では,この「変換」は全角のコンマ・ピリオドを句読点に, + また全角の二重引用符をダブルミニュートへ置き換える + \footnote{% + \texttt{jpotf}という名前にしたのは, + OTFパッケージの縦組用和文TFMでほぼ同じの処理(そちらではさらに一重引用符を + 「シングルミニュート」に置換する機能もあった)を行っていたことに由来する. + }.\autoref{fig:jpotf}を参照. + + ユーザ側で「変換」をカスタマイズしたい場合, + \verb+luatexja.jfont.register_vert_replace+ 関数に変更内容を記したテーブルを渡す. + 例えば縦組中では「あ」を「い」に置換し,また「,」は(「、」に置換せず)「,」のままに + したい場合は次のようにすれば良い. +\begin{lstlisting} +\directlua{luatexja.jfont.register_vert_replace{ + ['あ']='い', [',']=false, +}} +\end{lstlisting} + \verb+luatexja.jfont.register_vert_replace+ による変更はこの関数の\emph{実行後}に定義される + フォントについてのみ有効である. + +\end{itemize} + +なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン +ト・縦組用和文フォントの定義が可能であったが,\LuaTeX-jaではそうでないので注意. % +%\subsection{Default Japanese fonts and JFMs} +%\subsection{標準和文フォント・JFMの変更} +\label{ssec:cfg} %<*en> -\subsection{Getting current direction} -The \Param{direction} parameter returns the current direction, and -the \Param{boxdir} parameter (with the argument ) -returns the direction of a box register \cs{box}. -The returned value of these parameters are a \emph{string}: -\begin{center} -\small -\begin{tabular}{>{\bfseries}lccccc} -\toprule -Direction&\emph{yoko}&\emph{tate}&\emph{dtou}&\emph{utod}&(empty)\\ -\midrule -Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ -\bottomrule -\end{tabular} -\end{center} -\begin{LTXexample}[width=0.3\textwidth] -\leavevmode\def\DIR{\ltjgetparameter{direction}} -\hbox{\yoko \DIR}, \hbox{\tate\DIR}, -\hbox{\dtou\DIR}, \hbox{\utod\DIR}, -\hbox{\tate$\hbox{tate math: \DIR}$} - -\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2} -\end{LTXexample} +If following commands are defined at loading \LuaTeX-ja package, these change +default Japanese fonts and JFMs for them: % %<*ja> -\subsection{組方向の取得} -「現在の組方向」や「番のボックスの組方向」は, -\pTeX では \cs{ifydir} や \cs{ifybox} といった条件判断文を使って -判断することができた. -しかし,\LuaTeX-jaはあくまでも\TeX マクロとLuaコードで -記述されており,それでは新たな条件判断命令を作るのは難しい. - -\LuaTeX-jaでは,\Param{direction}パラメータで現在の組方向を, -\Param{boxdir}パラメータ(と追加の引数)によって -\cs{box}の組方向をそれぞれ取得できるようにした. -戻り値は文字列である: -\begin{center} -\small -\begin{tabular}{>{\bfseries}lccccc} -\toprule -組方向&\emph{横組}&\emph{tate縦組}&\emph{dtou方向}&\emph{utod方向}&(未割り当て)\\ -\midrule -戻り値&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\ -\bottomrule -\end{tabular} -\end{center} - -\begin{LTXexample}[width=0.3\textwidth] -\leavevmode\def\DIR{\ltjgetparameter{direction}} -\hbox{\yoko\DIR}, \hbox{\tate\DIR}, -\hbox{\dtou\DIR}, \hbox{\utod\DIR}, -\hbox{\tate$\hbox{tate math: \DIR}$} +\LuaTeX-jaが読み込まれる前に以下の命令が定義されていた場合は, +それらが標準和文フォントやそれらに用いるJFMとして使われる. +% -\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2} -\end{LTXexample} +\begin{cslist}[style=standard] + \item[\cs{ltj@stdmcfont}] +%The default Japanese font for the mincho family. +%明朝体として用いるフォント. + \item[\cs{ltj@stdgtfont}] +%The default Japanese font for the gothic family. +%ゴシック体として用いるフォント. + \item[\cs{ltj@stdyokojfm}] +%The default JFM for horizontal direction. +%標準で用いる横組用JFM. + \item[\cs{ltj@stdyokojfm}] +%The default JFM for vertical direction. +%標準で用いる縦組用JFM. +\end{cslist} -これらを用いれば,例えば -\pTeX の \cs{ifydir},~\cs{ifybox200} と同等の条件判断を +%<*en> +For example, \begin{lstlisting} -\ifnum\ltjgetparameter{direction}=4 -\ifnum\ltjgetparameter{boxdir}{200}=4 +\def\ltj@stdmcfont{IPAMincho} +\def\ltj@stdgtfont{IPAGothic} \end{lstlisting} -のように行うことができる. -\cs{iftdir} は少々面倒であるが,8で割った余りが3であるか否かを判断すれば良いから +makes that IPA~Mincho and IPA~Gothic will be used as default Japanese fonts, instead of +IPAex~Mincho and IPAex~Gothic. + +This feature is intended for classes which use special JFMs +\footnote{This is because commands has \texttt{@} in their names.}. +It is recommended to use \cs{luatexja-preset}~or~\cs{luatexja-fontspec} package +to select standard fonts in ordinary \LaTeX\ sources. +% +%<*ja> +例えば \begin{lstlisting} -\ifnum\numexpr - \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3 +\def\ltj@stdmcfont{IPAMincho} +\def\ltj@stdgtfont{IPAGothic} \end{lstlisting} -とすればよい. +と記述しておけば,標準和文フォントがIPA明朝・IPAゴシックへと変 +更される. + +この機能は,特別のJFMを用いるクラス +\footnote{例えば阿部紀行氏によるjlreqがそれにあたる.}% +などでの使用を意図しており,命令名に\texttt{@}が含まれることから +通常の\TeX/\LaTeX 文書での使用は意図していない. +通常の\LaTeX 文書では\Pkg{luatexja-preset}や\Pkg{luatexja-fontspec}などで +使用フォントを選択することを推奨する. +% + +%<*en> +For compatibility with earlier versions, +\LuaTeX-ja reads \texttt{luatexja.cfg} automatically if it is found by \LuaTeX. +One should not overuse this \texttt{luatexja.cfg}; it will overwrite +the definition of \cs{ltj@stdmcfont} and others. +% +%<*ja> +旧バージョンとの互換性のため, +\LuaTeX から見える位置に\texttt{luatexja.cfg}があれば,\LuaTeX-jaはそれを読み込む. +しかし,\texttt{luatexja.cfg}内で\cs{ltj@stdmcfont}等が定義されていた場合はそちらが +優先されるので,もはや\texttt{luatexja.cfg}は使わないほうが良いだろう. % +%\subsection{Prefix \texttt{psft}} +%\subsection{\texttt{psft}プリフィックス} +\label{ssec:psft} %<*en> -\subsection{Overridden box primitives} -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}\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{vcenter}] -\end{cslist} +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. +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, +because we can't expect what fonts are actually used by the PDF reader.} +Note that \texttt{extend}~and~\texttt{slant} settings (see~above) are supported +with \texttt{psft} prefix, because they are only simple linear transformations. % %<*ja> -\subsection{プリミティブの再定義} -異なる組方向に対応するために,以下に挙げるプリミティブは -\LuaTeX-jaによる前処理もしくは後処理が行われるように -\ \verb+\protected\def+ により再定義してある. +\Pkg{luaotfload}で使用可能になった +\texttt{file:}\ と \texttt{name:}\ のプリフィックスに加えて, +\cs{jfont}(と \cs{font} プリミティブ)では +\texttt{psft:}プリフィックスを用いることができる. +このプリフィックスを用いることで,PDFには埋め込まれない「名前だけの」 +和文フォントを指定することができる. +なお,現行の\LuaTeX で非埋め込みフォントを作成するとPDF内でのエンコーディングが +Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準拠になってしまう +ので注意してほしい. -\begin{cslist} - \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\_box}という)を必要ならば除去し, - 正しく「中身」のボックスが返されるように前処理をする. - \item[\cs{raise}\textrm{, }\cs{lower}\textrm{\ etc., }\cs{vcenter}] - 一方,こちらでは必要に応じて\textit{dir\_box}を作成する前処理を追加している. -\end{cslist} +\emph{\texttt{psft} プリフィックスの下では +\texttt{+jp90} などのOpenType機能の効力はない. +非埋込フォントをPDFに使用すると,実際にどのようなフォントが +表示に用いられるか予測できないからである.}\ +\texttt{extend} と \texttt{slant} 指定は単なる変形のため +\texttt{psft} プリフィックスでも使用可能である. % -%\section{Font Metric and Japanese Font} -%\section{フォントメトリックと和文フォント} -%\subsection{\cs{jfont}} -%\subsection{\cs{jfont} 命令} -\label{ssec-jfont} +%\paragraph{\texttt{cid} key} +%\paragraph{\texttt{cid}キー} +\label{para-cid} %<*en> -To load a font as a Japanese font (for horizontal direction), you must use the -\cs{jfont} instead of~\cs{font}, while -\cs{jfont} admits the same syntax used in~\cs{font}. -\LuaTeX-ja automatically loads \Pkg{luaotfload} package, -so TrueType/OpenType fonts with features can be used for Japanese fonts: +The default font defined by using \texttt{psft:} prefix is for Japanese typesetting; +it is Adobe-Japan1-7 CID-keyed font. +One can specify \texttt{cid} key to use other CID-keyed non-embedded fonts +for Chinese or Korean typesetting. % %<*ja> -フォントを(横組用)和文フォントとして読み込むためには,\cs{jfont} を -\ \cs{font} プリミティブの代わりに用いる. -\cs{jfont} の文法は \cs{font} と同じである. -\LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので, -TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる -ことができる: -% -\begin{LTXexample}[width=0.3\textwidth] -\jfont\tradgt={file:KozMinPr6N-Regular.otf:script=latn;% - +trad;-kern;jfm=ujis} at 14pt -\tradgt 当/体/医/区 -\end{LTXexample} +標準で\texttt{psft:}プリフィックスで定義されるフォントは日本語用のもので +あり,Adobe-Japan1-7のCIDに対応したものとなる.しかし,\LuaTeX-jaは中国語 +の組版にも威力を発揮することが分かり,日本語フォントでない非埋込フォント +の対応も必要となった.そのために追加されたのが\texttt{cid}キーである. +\texttt{cid}キーに値を指定すると,そのCIDを持った非埋込フォントを定義することができる: +% +\begin{lstlisting}[numbers=left] +\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-7;jfm=jis} % Japanese +\jfont\testD={psft:Ryumin-Light:jfm=jis} % default: Adobe-Japan1-7 +\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-7;jfm=jis}% Traditional Chinese +\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis} % Simplified Chinese +\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis} % Korean +\jfont\testKR={psft:SourceHanSerifAKR9:cid=Adobe-KR-9;jfm=jis} % Korean +\end{lstlisting} %<*en> -Note that the defined control sequence -(\cs{tradgt} in the example above) using \cs{jfont} is not a -\textit{font\_def} token, but a macro. -Hence the input like \verb+\fontname\tradgt+ -causes a error. We denote control sequences which are defined in -\cs{jfont} by . +Note that the code above specifies \texttt{jfm-jis.lua}, which is for Japanese fonts, +as JFM for Chinese and Korean fonts. % %<*ja> -なお,\cs{jfont} で定義された制御綴(上の例だと \cs{tradgt}) -は\textit{font\_def}トークンではなくマクロである.従って,\verb+\fontname\tradgt+ のような -入力はエラーとなる.以下では \cs{jfont} で定義された -制御綴をで表す. +上のコードでは中国語・韓国語用フォントに対してもJFMに +日本語用の\texttt{jfm-jis.lua}を指定しているので注意されたい. % -\paragraph{JFM} %<*en> -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: +At present, \LuaTeX-ja supports only 5 values written in the sample code above. +Specifying other values, e.g., % %<*ja> -JFMは文字と和文組版で自動的に挿入される -グルー/カーンの寸法情報を持っている.JFMの構造は次の節で述べる. -\cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで -指定する必要がある: +今のところ,\LuaTeX-jaは上のサンプルコード中に書いた5つの値しかサポートしていない. % +\begin{lstlisting} +\jfont\test={psft:Ryumin-Light:cid=Adobe-Japan2;jfm=jis} +\end{lstlisting} +%<*en> +produces the following error: +% +%<*ja> +のようにそれら以外の値を指定すると,エラーが発生する: +% +\begin{lstlisting}[numbers=left] +! Package luatexja Error: bad cid key `Adobe-Japan2'. +See the luatexja package documentation for explanation. +Type H for immediate help. + + \par +l.78 -\begin{table}[t] -%\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#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} +? h +I couldn't find any non-embedded font information for the CID +`Adobe-Japan2'. For now, I'll use `Adobe-Japan1-6'. +Please contact the LuaTeX-ja project team. +? +\end{lstlisting} -\begin{cslist} -\item[jfm=] +%\subsection{Structure of a JFM file} +%\subsection{JFMファイルの構造} +\label{ssec:jfm-str} +%A JFM file is a Lua script which has only one function call: +%JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである: +\begin{lstlisting} +luatexja.jfont.define_jfm { ... } +\end{lstlisting} %<*en> -Specify the name of (horizontal) JFM. -If specified JFM has not been loaded, \LuaTeX-ja search and load -a file named \texttt{jfm-.lua}. - -The following JFMs are shipped with \LuaTeX-ja: +Real data are stored in the table which indicated above by +\verb+{ ... }+. So, the rest of this subsection are devoted to describe the +structure of this table. Note that all lengths in a JFM file are +floating-point numbers in design-size unit. % %<*ja> -用いる(横組用)JFMの名前を指定する.もし以前に指定されたJFMが読み込まれていなければ, -\texttt{jfm-.lua}を読み込む.以下の横組用JFMが\LuaTeX-jaには同梱されている: +実際のデータは上で \verb+{ ... }+ で示されたテーブルの中に格納されている. +以下ではこのテーブルの構造について記す. +なお,JFMファイル中の長さは全てdesign-sizeを単位とする浮動小数点数であることに +注意する. % -\begin{description} + +\begin{cslist}[style=standard] + +\item[version=] +%(optional, default value is~1) +%(任意,既定値は1) + %<*en> -\item[\tt jfm-ujis.lua] A standard JFM in \LuaTeX-ja. This JFM is - based on \verb+upnmlminr-h.tfm+, a metric for UTF/OTF package that - is used in \upTeX. When you use the \Pkg{luatexja-otf} package, you should use this JFM. +The version JFM. Currently 1,~2,~and,~3 are supported % %<*ja> -\item[\tt jfm-ujis.lua] \LuaTeX-jaの標準JFMである.このJFMは\upTeX で - 用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-h.tfm+ を - 元にしている.\Pkg{luatexja-otf}パッケージを使うときはこのJFMを指定するべきである. +JFMのバージョン.1,~2,~3がサポートされる. % + +\item[dir=] +%(required) +%(必須) + %<*en> -\item[\tt jfm-jis.lua] A counterpart for \verb+jis.tfm+, ``JIS font - metric'' which is widely used in \pTeX. A major difference between - \texttt{jfm-ujis.lua} and this \texttt{jfm-jis.lua} is that - most characters under \texttt{jfm-ujis.lua} are square-shaped, - while that under \texttt{jfm-jis.lua} are horizontal - rectangles. +The direction of JFM. \texttt{'yoko'}~(horizontal) +or \texttt{'tate'}~(vertical) are supported. % %<*ja> -\item[\tt jfm-jis.lua] \pTeX で広く用いられている「JISフォントメトリック」 - \verb+jis.tfm+ に相当するJFMである.\texttt{jfm-ujis.lua} とこの - \texttt{jfm-jis.lua} の主な違いは,\texttt{jfm-ujis.lua} ではほとんどの文字が - 正方形状であるのに対し,\texttt{jfm-jis.lua} では横長の長方形状であることと, - \texttt{jfm-ujis.lua} では「?」「!」の直後に半角空白が挿入されることである. +JFMの書字方向.\texttt{'yoko'}(横組)と \texttt{'tate'}(縦組)がサポートされる. +% + +\item[zw=] +%(required) +%(必須) + +%The amount of the length of the ``full-width''. +%<*ja> +「全角幅」の長さ.この量が \cs{zw} の長さとなる.\pTeX では +「全角幅」\texttt{1zw} は「文字クラス0の文字」の幅と決められていたが, +\LuaTeX-jaではここで指定する. % -%<*en> -\item[\tt jfm-min.lua] A counterpart for \verb+min10.tfm+, which is one - of the default Japanese font metric shipped with \pTeX. -% + +\item[zh=] +%(required) +%(必須) + +%The amount of the ``full-height'' (height + depth). %<*ja> -\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用TFM -(\verb+min10.tfm+)に相当し,行末で文字が揃うようにするために「っ」など一部の文字幅が変わっ - ている.\verb+min10.tfm+ については\cite{min10}が詳しい. +「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう. +\pTeX では 「全角高さ」\texttt{1zh} は「文字クラス0の文字」の高さと深さの和と決められていたが, +\LuaTeX-jaではここで指定する. % -\end{description} + +\item[kanjiskip=\{, , \}] +%(optional) +%(任意) + %<*en> -The difference among these three~JFMs is shown in \autoref{tab-difjfm}. +This field specifies the ``ideal'' amount of \Param{kanjiskip}. As noted + in Subsection~\ref{subs-kskip}, if the parameter + \Param{kanjiskip} is \cs{maxdimen}, the value specified + in this field is actually used (if this field is not specified in + JFM, it is regarded as 0\,pt). Note that and + fields are in design-size unit too. % %<*ja> -これら3つのJFMの違いは\autoref{tab-difjfm}に示した.表中の文例の一部には, -\cite{min10}の図3,~4のものを用いた. +理想的な\Param{kanjiskip}の量を指定する.\ref{subs-kskip}節で述べたように, +もし\Param{kanjiskip}が \cs{maxdimen} の値ならば,このフィールドで指定された +値が実際には用いられる(指定なしは0\,ptとして扱われる).とのフィールドもdesign-size +が単位であることに注意せよ. % -\begin{figure} -\begin{LTXexample}[width=0.3\textwidth] -\ltjsetparameter{differentjfm=both} -\jfont\F=file:KozMinPr6N-Regular.otf:jfm=ujis -\jfont\G=file:KozGoPr6N-Medium.otf:jfm=ujis -\jfont\H=file:KozGoPr6N-Medium.otf:jfm=ujis;jfmvar=hoge -\F ){\G 【】}( % halfwidth space - ){\H 『』}( % fullwidth space - -ほげ,{\G 「ほげ」}(ほげ)\par -ほげ,{\H 「ほげ」}(ほげ)% pTeX-like - -\ltjsetparameter{differentjfm=paverage} -\end{LTXexample} -\caption{Example of \texttt{jfmvar} key} -\label{fig:jfmvar} -\end{figure} +\item[xkanjiskip=\{, , \}] +%(optional) +%(任意) %<*en> -\item[jfmvar=] -Sometimes there is a need that \ldots. +Like the \texttt{kanjiskip} field, this field specifies the ``ideal'' + amount of \Param{xkanjiskip}. % %<*ja> -\item[jfmvar=] -標準では,JFMとサイズが同じで, - 実フォントだけが異なる2つの和文フォントは「区別されない」.例えば -\autoref{fig:jfmvar}において,最初の「)」と「【」の実フォントは異なるが, -JFMもサイズも同じなので,普通に「)【」と入力した時と同じように半角空きとなる. - -しかし,JFMとサイズが同じであっても,\texttt{jfmvar} キーの異なる -2つの和文フォント,例えば\autoref{fig:jfmvar}で言う \cs{F} と \cs{H}, -は「区別される」.異なる和文フォントに異なる \texttt{jfmvar} キーを割り当て, -かつ\Param{differentjfm}パラメータを \texttt{both} に設定すれば, -\pTeX と似た状況で組版されることになる. +\texttt{kanjiskip}フィールドと同様に,\Param{xkanjiskip}の理想的な量を +指定する. % \end{cslist} -\begin{figure} -\begin{LTXexample}[pos=t] -\newcommand\test{\vrule ダイナミックダイクマ\vrule\\} -\jfont\KMFW = KozMinPr6N-Regular:jfm=prop;-kern at 17pt -\jfont\KMFK = KozMinPr6N-Regular:jfm=prop at 17pt % kern is activated -\jfont\KMPW = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;-kern at 17pt -\jfont\KMPK = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;+kern at 17pt -\begin{multicols}{2} -\ltjsetparameter{kanjiskip=0pt} -{\KMFW\test \KMFK\test \KMPW\test \KMPK\test} +%<*en> +\paragraph{Character classes} +Besides from above fields, a JFM file have several sub-tables those +indices are natural numbers. The table indexed by~$i\in\omega$ stores +information of \emph{character class}~$i$. At least, the character class~0 is +always present, so each JFM file must have a sub-table whose index is +\texttt{[0]}. Each sub-table (its numerical index is denoted by $i$) has +the following fields: +% +%<*ja> +\paragraph{文字クラス} +上記のフィールドに加えて,JFMファイルはそのインデックスが自然数であるいくつかの +サブテーブルを持つ.インデックスが$i\in\omega$であるテーブルは\emph{文字クラス}$i$の +情報を格納する.少なくとも,文字クラス0は常に存在するので,JFMファイルはインデックス +が\texttt{[0]}のサブテーブルを持たなければならない.それぞれのサブテーブル +(そのインデックスを$i$で表わす)は以下のフィールドを持つ: +% -\ltjsetparameter{kanjiskip=3pt} -{\KMFW\test \KMFK\test \KMPW\test \KMPK\test} -\end{multicols} -\end{LTXexample} -\caption{Kerning information and \Param{kanjiskip}} -\label{fig:kern-jfm} -\end{figure} +\begin{cslist}[style=standard] +\item[chars=\{, ...\}] +%(required except character class~0) +%(文字クラス0を除いて必須) -%\paragraph{Using kerning information in a font} -%\paragraph{ペアカーニング情報の使用} -\label{para-kern} %<*en> -Some fonts have information for inter-glyph spacing. -This version of \LuaTeX-ja treats kerning spaces like an italic correction; -any glue and/or kern from the JFM and a kerning space can coexist. -See \autoref{fig:kern-jfm} for detail. - -Note that in \cs{setmainjfont} etc.\ which are provided by \Pkg{luatexja-fontspec} -package, kerning option is set \emph{off} (\texttt{Kerning=Off}) by default, -because of the compatibility with previous versions of \LuaTeX-ja. +This field is a list of characters which are in this character + type~$i$. This field is optional if $i=0$, since all + \textbf{JAchar} which do not belong any character classes other + than 0 are in the character class 0 + (hence, the character class~0 contains most of + \textbf{JAchar}s). In the list, character(s) can be specified in the following form: +\begin{itemize} +\item a Unicode code point +\item the character itself (as a Lua string, like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+}) +\item a string like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+} (the character followed by an asterisk) +\item several ``imaginary'' characters (We will describe these later.) +\end{itemize} % %<*ja> -いくつかのフォントはグリフ間のスペースについての情報を持っている. -このカーニング情報は以前の\LuaTeX-ja とはあまり相性が良くなかったが, -本バージョンではカーニングによる空白はイタリック補正と同様に扱うことになっている. -つまり,カーニング由来の空白とJFM由来のグルー・カーンは同時に入りうる. -\autoref{fig:kern-jfm}を参照. +このフィールドは文字クラス$i$に属する文字のリストである.このフィールドは$i=0$の +場合には任意である(文字クラス0には,0以外の文字クラスに属するものを +除いた全ての\textbf{JAchar}が属するから).このリスト中で文字を指定するには,以下の方法がある: \begin{itemize} - \item \emph{\cs{jfont} や, -NFSS2用の命令(\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節)における指定では -カーニング情報は標準で使用する}ことになっているようである. -言い換えれば,カーニング情報を使用しない設定にするには,面倒でも -\begin{lstlisting} -\jfont\hoge=KozMinPr6N-Regular:jfm=ujis;-kern at 3.5mm -\DeclareFontShape{JY3}{fuga}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;-kern}{} -\end{lstlisting} -のように,\texttt{-kern} という指定を自分で追加しなければいけない. - \item -一方,\emph{\Pkg{luatexja-fontspec} の提供する \cs{setmainjfont}\ -などの命令の標準設定ではカーニング情報は使用しない}(\texttt{Kerning=Off}) -ことになっている.これは以前のバージョンの\LuaTeX-jaとの互換性のためである. +\item Unicode におけるコード番号 +\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+}」のような,文字それ自体 +\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+}」のような,文字それ自体の後にアスタリスクをつけたもの +\item いくつかの「仮想的な文字」(後に説明する) \end{itemize} % -%<*ja> -\paragraph{\texttt{extend}と\texttt{slant}} -OpenType font featureと見かけ上同じような形式で指定できるものに, -\begin{description} -\item[\texttt{extend=}] 横方向に倍拡大する. -\item[\texttt{slant=}] に指定された割合だけ傾ける. -\end{description} -の2つがある. -\texttt{extend}や\texttt{slant}を指定した場合は,それに応じたJFMを指定すべきである% -\footnote{\LuaTeX-jaでは,これらに対するJFMを特に提供することはしない予定である.}. -例えば,次の例では無理やり通常のJFMを使っているために,文字間隔やイタリック補正量が -正しくない: -% +\item[width=, height=, depth=, italic=] +%(required) +%(必須) + %<*en> -\paragraph{\texttt{extend} and \texttt{slant}} -The following setting can be specified as OpenType font features: -\begin{cslist}[style=standard] -\item[\texttt{extend=}] expand the font horizontally by . -\item[\texttt{slant=}] slant the font. -\end{cslist} -Note that \LuaTeX-ja doesn't adjust JFMs by these \texttt{extend} and \texttt{slant} -settings; you have to write new JFMs on purpose. -For example, the following example uses the standard JFM \texttt{jfm-ujis.lua}, hence -letter-spacing and the width of italic correction are not correct: +\begin{table}[t] + \centering +\begin{tabular}{llr} +\toprule +Direction of JFM&\textbf{\texttt{'yoko'} (horizontal)}&\multicolumn{1}{l}{\textbf{\texttt{'tate'} (vertical)}}\\ +\midrule +\texttt{width} field&\multicolumn{2}{c}{the width of the ``real'' glyph}\\ +\texttt{height} field&the height of the ``real'' glyph&0.0\\ +\texttt{depth} field&the depth of the ``real'' glyph&0.0\\ +\midrule +\texttt{italic} field&\multicolumn{2}{c}{0.0}\\ +\bottomrule +\end{tabular} +\caption{Default values of \texttt{width} field and other fields} +\label{tab-wid} +\end{table} +Specify the width of characters in character class~$i$, the height, the depth and +the amount of italic correction. All characters in character class~$i$ are regarded that its width, height, and depth are +as values of these fields. The default values are shown in \autoref{tab-wid}. % -\begin{LTXexample}[width=0.3\textwidth] -\jfont\E=KozMinPr6N-Regular:extend=1.5;jfm=ujis;-kern -\E あいうえお +%<*ja> +\begin{table}[t] + \centering +\begin{tabular}{llr} +\toprule +JFM書字方向&\emph{\texttt{'yoko'}(横組)}&\multicolumn{1}{l}{\emph{\texttt{'tate'}(縦組)}}\\ +\midrule +\texttt{width}&\multicolumn{2}{c}{「実際のグリフ」の幅}\\ +\texttt{height}&「実際のグリフ」の高さ&0.0\\ +\texttt{depth}&「実際のグリフ」の深さ&0.0\\ +\midrule +\texttt{italic}&\multicolumn{2}{c}{0.0}\\ +\bottomrule +\end{tabular} +\caption{\texttt{width} フィールド等の標準値} +\label{tab-wid} +\end{table} +文字クラス$i$に属する文字の幅,高さ,深さ,イタリック補正の量を指定する. +文字クラス$i$に属する全ての文字は,その幅,高さ,深さがこのフィールドで指定した +値であるものとして扱われる.省略時や,数でない値を指定した時には表\nobreak\ref{tab-wid}に + 示されている値を用いる.例えば,横組用JFMで \texttt{width} フィールドには数値以外の値を指 + 定した場合,文字の幅はその「実際の」グリフの幅となる.OpenTypeの \texttt{prop} featureと併用 + すれば,これによってプロポーショナル組を行うことができる. +% -\jfont\S=KozMinPr6N-Regular:slant=1;jfm=ujis;-kern -\S あいう\/ABC -\end{LTXexample} +\item[left=, down=, align=]\ +%<*en> +These fields are for adjusting the position of the ``real'' glyph. Legal + values of \texttt{align} field are \texttt{'left'}, + \texttt{'middle'}, and \texttt{'right'}. If one of these + 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 +\autoref{fig:pos}~and~\autoref{fig:pos-tate}. +% %<*ja> -\paragraph{\texttt{ltjksp} 指定} -\label{pg:ltjksp} -\LuaTeX-ja標準では, -JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ -\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の使用によって, -「JFM由来のグルーの他に,\Param{kanjiskip}の自然長/伸び量/縮み量の一部が -同じ場所に挿入される」という状況が起こりうる. -この機能を無効化し,20150922.0版以前と同じような組版を得るためには -他のOpenType機能と同じように\ \texttt{-ltjksp}\ 指定を行えば良い. -\begin{LTXexample}[width=16\zw] -\leavevmode -\ltjsetparameter{kanjiskip=0pt plus 3\zw} -\vrule\hbox to 15\zw{あ「い」う,えお}\vrule +これらのフィールドは実際のグリフの位置を調整するためにある. +\texttt{align} フィールドに指定できる値は \texttt{'left'}, \texttt{'middle'}, +\texttt{'right'} のいずれかである.もしこれら3つのフィールドのうちの1つが省かれた +場合,\texttt{left} と \texttt{down} は0,\texttt{align} フィールドは +\ \texttt{'left'} であるものとして扱われる. +これら3つのフィールドの意味については\autoref{fig:pos}(横組用和文フォント), +\autoref{fig:pos-tate}(縦組用和文フォント)で説明する. +% -\jfont\G=file:KozMinPr6N-Regular.otf% - :jfm=ujis;-ltjksp at 9.2487pt -\G\leavevmode% -\vrule\hbox to 15\zw{あ「い」う,えお}\vrule -\end{LTXexample} -なお, -\begin{lstlisting} - \jfont\G=file:KozMinPr6N-Regular.otf:jfm=ujis;-ltjksp;+ltjksp at 9.2487pt -\end{lstlisting} -のように \texttt{+ltjksp} 指定を行った場合は,\texttt{kanjiskip\_natural} など -3キーは再び有効化される.\texttt{-ltjksp}, \texttt{+ltjksp} を複数回指定した場合は, -最後に指定したものが有効となる. +%<*en> +In most cases, \texttt{left} and \texttt{down} fields are~0, while +it is not uncommon that the \texttt{align} field is \texttt{'middle'} or \texttt{'right'}. +For example, setting the \texttt{align} field to \texttt{'right'} is practically needed +when the current character class is the class for opening delimiters'. +% +%<*ja> +多くの場合,\texttt{left}と\texttt{down}は0である一方, +\texttt{align}フィールドが\texttt{'middle'}や\texttt{'right'}であることは +珍しいことではない. +例えば,\texttt{align}フィールドを\texttt{'right'}に指定することは, +文字クラスが開き括弧類であるときに実際必要である. % +\begin{figure}[!tb] +\begin{minipage}{0.4\textwidth}% +\begin{center}\unitlength=10pt\small +\begin{picture}(15,12)(-1,-4) +\color{b_gray}% jfm +\put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength} -%\subsection{\cs{tfont}} -%\subsection{\cs{tfont} 命令} +\color{b_pink}% step1 +\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} +\color{red}% real glyph +\thicklines +\put(-1,-1.5){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}} +\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}} +\put(-1,5.5){\line(1,0){6}} +\put(-1,-4){\line(1,0){6}} -{\catcode`\<=12\catcode`\>=12 -\begin{table}[t] -%\caption{Differences between vertical JFMs shipped with \LuaTeX-ja} -%\caption{\LuaTeX-ja に同梱されている縦組用 JFM の違い} -%\medskip -\label{tab-difjfm-tate} -\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}} +\color{b_green}% real glyph +\put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} -\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} -} +\color{black}% jfm +\thicklines +\put(0,0){\vector(0,1){8}\line(0,-1){3}\vector(1,0){12}} +\put(12,0){\line(0,1){8}\vector(0,-1){3}} +\put(0,8){\line(1,0){12}} +\put(0,-3){\line(1,0){12}} +\put(0.2,4){\makebox(0,0)[l]{\texttt{height}}} +\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}} +\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}} + +\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}} +\put(3,7){\line(1,0){6}} +\put(3,-2.5){\line(1,0){6}} +\newsavebox{\eqdist} +\savebox{\eqdist}(0,0)[b]{% + \thinlines + \put(-0.08,0.2){\line(0,-1){0.4}}% + \put(0.08,0.2){\line(0,-1){0.4}}} +\put(1.5,0){\usebox{\eqdist}} +\put(10.5,0){\usebox{\eqdist}} +\color{blue}% shifted +\thicklines +\put(3,-1.5){\vector(-1,0){4}} +\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}} +\put(3,0){\vector(0,-1){1.5}} +\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}} +\end{picture} +\end{center} +\end{minipage}% +\begin{minipage}{0.6\textwidth}% %<*en> -... +Consider a Japanese character node which belongs to +a character class whose the \texttt{align} +field is \texttt{'middle'}. % %<*ja> -\cs{tfont} はフォントを縦組用の和文フォントとして読み込む命令であり, -\cs{tfont} の文法は \cs{jfont} と同じである. -\cs{tfont} で定義された縦組用和文フォントは, -以下の点が \cs{jfont} による横組用和文フォントとは異なる: +\texttt{align}フィールドの値が \texttt{'middle'} であるような文字クラスに属する +和文文字ノードを考えよう. +% \begin{itemize} - \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を指定する. -以下の縦組用JFMが\LuaTeX-jaには同梱されており,違いを\autoref{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ではそうでないので注意. +\item +%<*en> +The black rectangle is the imaginary body of the node. +Its width, height, and depth are specified by JFM. +% +%<*ja> +黒色の長方形はノードの枠であり, +その幅,高さ,深さはJFMによって指定されている. % - -%\subsection{Prefix \texttt{psft}} -%\subsection{\texttt{psft}プリフィックス} -\label{ssec-psft} +\item %<*en> -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. -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, -because we can't expect what fonts are actually used by the PDF reader.} -Note that \texttt{extend}~and~\texttt{slant} settings (see~above) are supported -with \texttt{psft} prefix, because they are only simple linear transformations. +Since the \texttt{align} field is \texttt{'middle'}, +the ``real'' glyph is centered horizontally (the green rectangle) first. % %<*ja> -\Pkg{luaotfload}で使用可能になった -\texttt{file:}\ と \texttt{name:}\ のプリフィックスに加えて, -\cs{jfont}(と \cs{font} プリミティブ)では -\texttt{psft:}プリフィックスを用いることができる. -このプリフィックスを用いることで,PDFには埋め込まれない「名前だけの」 -和文フォントを指定することができる. -なお,現行の\LuaTeX で非埋め込みフォントを作成するとPDF内でのエンコーディングが -Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準拠になってしまう -ので注意してほしい. - -\emph{\texttt{psft} プリフィックスの下では -\texttt{+jp90} などのOpenType font featureの効力はない. -非埋込フォントをPDFに使用すると,実際にどのようなフォントが -表示に用いられるか予測できないからである.}\ -\texttt{extend} と \texttt{slant} 指定は単なる変形のため -\texttt{psft} プリフィックスでも使用可能である. +\texttt{align}フィールドは \texttt{'middle'} なので, +実際のグリフの位置はまず水平方向に中央揃えしたものとなる(緑色の長方形). % - -%\paragraph{\texttt{cid} key} -%\paragraph{\texttt{cid}キー} -\label{para-cid} - +\item %<*en> -The default font defined by using \texttt{psft:} prefix is for Japanese typesetting; -it is Adobe-Japan1-6 CID-keyed font. -One can specify \texttt{cid} key to use other CID-keyed non-embedded fonts -for Chinese or Korean typesetting. +Furthermore, the glyph is shifted according to values of fields + \texttt{left} and \texttt{down}. The ultimate position of the real + glyph is indicated by the red rectangle. % %<*ja> -標準で\texttt{psft:}プリフィックスで定義されるフォントは日本語用のもので -あり,Adobe-Japan1-6のCIDに対応したものとなる.しかし,\LuaTeX-jaは中国語 -の組版にも威力を発揮することが分かり,日本語フォントでない非埋込フォント -の対応も必要となった.そのために追加されたのが\texttt{cid}キーである. +さらに,グリフは \texttt{left} と \texttt{down} の値に従ってシフトされる. +最終的な実際のグリフの位置は赤色の長方形で示された位置になる. +% +\end{itemize} +\end{minipage} +\medskip + +\caption{% +%The position of the real glyph (horizontal Japanese fonts) +%横組和文フォントにおける「実際の」グリフの位置 +} +\label{fig:pos} +\end{figure} +\begin{figure}[!tb] +\begin{minipage}{0.4\textwidth}% +\begin{center}\unitlength=10pt\small +\begin{picture}(15,12)(-6,0) +\color{b_gray}% jfm +\put(-6,0){\vrule width 12\unitlength height 11\unitlength} + +\color{b_pink}% real glyph +\put(-6.5,5.5){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} + +\color{red}% real glyph +\thicklines +\put(-6.5,5.5){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}} +\put( 1.5,5.5){\line(0,1){6}\line(0,-1){3}} +\put(-6.5,11.5){\line(1,0){8}} +\put(-6.5,2.5){\line(1,0){8}} + +\color{b_green}% step1 +\put(-4,3){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} + +\color{black}% jfm +\thicklines +\put(0,11){\vector(1,0){6}\vector(-1,0){6}\vector(0,-1){11}} +\put(0,0){\line(1,0){6}\line(-1,0){6}} +\put(-6,0){\line(0,1){11}} +\put( 6,0){\line(0,1){11}} +\put( 3,10.8){\makebox(0,0)[t]{\texttt{height}}} +\put(-3,10.8){\makebox(0,0)[t]{\texttt{depth}}} +\put(0.2,5.5){\makebox(0,0)[l]{\texttt{width}}} + +\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}} +\put(-4,9){\line(1,0){8}} +\put(-4,0){\line(1,0){8}} +\savebox{\eqdist}(0,0)[b]{% + \thinlines + \put(-0.08,0.2){\line(0,-1){0.4}}% + \put(0.08,0.2){\line(0,-1){0.4}}} +\put(2,9){\usebox{\eqdist}} +\put(-2,9){\usebox{\eqdist}} -\texttt{cid}キーに値を指定すると,そのCIDを持った非埋込フォントを定義することができる: -% -\begin{lstlisting}[numbers=left] -\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-6;jfm=jis} % Japanese -\jfont\testD={psft:Ryumin-Light:jfm=jis} % default value is Adobe-Japan1-6 -\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-6;jfm=jis} % Traditional Chinese -\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis} % Simplified Chinese -\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis} % Korean -\end{lstlisting} -%<*en> -Note that the code above specifies \texttt{jfm-jis.lua}, which is for Japanese fonts, -as JFM for Chinese and Korean fonts. -% -%<*ja> -上のコードでは中国語・韓国語用フォントに対してもJFMに -日本語用の\texttt{jfm-jis.lua}を指定しているので注意されたい. -% +\color{blue}% shifted +\thicklines +\put(-4,3){\vector(0,1){2.5}} +\put(-3.8,4.25){\makebox(0,0)[l]{\texttt{left}}} +\put(-4,5.5){\vector(-1,0){2.5}} +\put(-5.,5.7){\makebox(0,0)[b]{\texttt{down}}} +\end{picture} +\end{center} +\end{minipage}% +\begin{minipage}{0.6\textwidth}% %<*en> -At present, \LuaTeX-ja supports only 4 values written in the sample code above. -Specifying other values, e.g., -% -%<*ja> -今のところ,\LuaTeX-jaは上のサンプルコード中に書いた4つの値しかサポートしていない. -% -\begin{lstlisting} -\jfont\test={psft:Ryumin-Light:cid=Adobe-Japan2;jfm=jis} -\end{lstlisting} -%<*en> -produces the following error: +(\dots) % %<*ja> -のようにそれら以外の値を指定すると,エラーが発生する: +\texttt{align}フィールドの値が \texttt{'right'} であるような文字クラスに属する +和文文字を考えよう. +\begin{itemize} +\item +実際のグリフの「垂直位置」は,まずベースラインが文字の物理的な左右方向の中央を通る +位置となる. +\item +また,この場合 \texttt{align} フィールドは \texttt{'right'} なので, +「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形). +\item +その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる +のは横組用和文フォントと変わらない. +\end{itemize} % -\begin{lstlisting}[numbers=left] -! Package luatexja Error: bad cid key `Adobe-Japan2'. - -See the luatexja package documentation for explanation. -Type H for immediate help. - - \par -l.78 +\end{minipage} +\medskip -? h -I couldn't find any non-embedded font information for the CID -`Adobe-Japan2'. For now, I'll use `Adobe-Japan1-6'. -Please contact the LuaTeX-ja project team. -? -\end{lstlisting} +\caption{% +%The position of the real glyph (vertical Japanese fonts) +%縦組和文フォントにおける「実際の」グリフの位置 +} +\label{fig:pos-tate} +\end{figure} -%\subsection{Structure of a JFM file} -%\subsection{JFMファイルの構造} -\label{ssec-jfm-str} -%A JFM file is a Lua script which has only one function call: -%JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである: -\begin{lstlisting} -luatexja.jfont.define_jfm { ... } -\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 -structure of this table. Note that all lengths in a JFM file are -floating-point numbers in design-size unit. -% +\item[kern={\{[$j$]=, [$j'$]=\{, [ratio=]\}, ...\}}] +\nopagebreak +\item[glue={\{[$j$]=\{, , , [ratio=, ...]\}, ...\}}]\leavevmode %<*ja> -実際のデータは上で \verb+{ ... }+ で示されたテーブルの中に格納されている. -以下ではこのテーブルの構造について記す. -なお,JFMファイル中の長さは全てdesign-sizeを単位とする浮動小数点数であることに -注意する. -% -\begin{cslist}[style=standard] +文字クラス$i$の文字と$j$の文字の間に挿入されるカーンやグルーの量を指定する. -\item[version=$1\mathrel{\textrm{or}}2$] -%(optional, default value is~1) -%(任意,既定値は1) +は,グルーの自然長のうちどれだけの割合が「後の文字」由来かを示す量で, +$0$から$+1$の実数値をとる.省略時の値は$0.5$である. +このフィールドの値は\Param{differentjfm}の値が +\texttt{pleft},~\texttt{pright},~\texttt{paverage}の値のときのみ実際に用いられる. -%<*en> -The version JFM. Currently 1~and~2 are supported -% -%<*ja> -JFMのバージョン.1または2がサポートされる. +例えば,\cite{x4051}では,句点と中点の間には, +句点由来の二分空きと中点由来の四分空きが挿入されるが,この場合には +\begin{itemize} +\item には$0.5+0.25=0.75$を指定する. +\item には$0.25/(0.5+0.25)=1/3$を指定する. +\end{itemize} % - -\item[dir=] -%(required) -%(必須) - %<*en> -The direction of JFM. \texttt{'yoko'}~(horizontal) -or \texttt{'tate'}~(vertical) are supported. +\ + +Specifies the amount of kern or glue which will be inserted +between characters in character class~$i$ and those in character class~$j$. + + specifies how much the glue is originated in the ``right'' character. +It is a real number between 0 and 1, and treated as 0.5 if omitted. For example, +The width of a glue between an ideographic full stop ``。'' +and a fullwidth middle dot ``・'' is three-fourth of fullwidth, +namely halfwidth from the ideographic full stop, and +quarter-width from the fullwidth middle dot. In this case, +we specify to $0.25/(0.5+0.25)=1/3$. % + %<*ja> -JFMの書字方向.\texttt{'yoko'}(横組)と \texttt{'tate'}(縦組)がサポートされる. -% +グルーの指定においては,上記に加えて各 \texttt{[$j$]} の各サブテーブル内に +次のキーを指定できる, +\begin{cslist}[style=standard] +\item[priority=] + \Pkg{luatexja-adjust}による優先順位付き + 行長調整(\ref{ssec:adj}節)において,このグルーの優先度を指定する.許される値は以下の通り: + \begin{description} + \item[バージョン1] $-4$から$+3$の間の整数 + \item[バージョン2以降] $-4$から$+3$の間の整数の2つ組\texttt{\{, \}}か, + または$-4$から$+3$の間の整数., はそれぞれこのグルーが伸びるときの優先度,縮むときの + 優先度であり,単に整数$i$が指定された場合は\texttt{\{$i$, $i$\}}であると解釈される. + \end{description} + ここで指定する値は,大きい値ほど「先に伸ばされる」「先に縮ませる」ことを意味しており,省略時の値 + は0である.範囲外の値が指定されたときの動作は未定義である. +\item[kanjiskip\_natural=\textrm{, }% + kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode + \label{pg:ksp_nat} -\item[zw=] -%(required) -%(必須) +JFMによって本来挿入されるグルーの他に +\Param{kanjiskip}分の空白を自然長(\texttt{kanjiskip\_natural}),伸び量(\texttt{kanjiskip\_stretch}), +縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては + \Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに.追加できる.}% +ための指定である.いずれも省略された場合のデフォルト値は0(追加しない)である. -%The amount of the length of the ``full-width''. -%<*ja> -「全角幅」の長さ.この量が \cs{zw} の長さとなる.\pTeX では -「全角幅」\texttt{1zw} は「文字クラス0の文字」の幅と決められていたが, -\LuaTeX-jaではここで指定する. -% +例えば,\LuaTeX-jaの横組標準JFMの \texttt{jfm-ujis.lua} では, +\begin{itemize} + \item 通常の文字「あ」と開き括弧類の間に入るグルーは,自然長・縮み量半角,伸び量0のグルー +となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け + た分だけ伸びることが許される. + \item 同様に,閉じ括弧類(全角コンマ「,」も含む)と通常の文字「う」「え」の間にも +自然長・縮み量半角,伸び量0のグルー +となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け + た分だけ伸びることが許される. + \item 一方,開き括弧類と通常の文字の間,また通常の文字と閉じ括弧類の間は + 自然長・縮み量・伸び量0のグルーだが,\Param{kanjiskip}の縮み量に + \texttt{kanjiskip\_shrink}(ここでは1)を掛けた分だけ縮むことが許される. +\end{itemize} +となっている.従って,以下のような組版結果を得る. -\item[zh=] -%(required) -%(必須) +\medskip +\begin{LTXexample}[width=16\zw] +\leavevmode +\ltjsetparameter{kanjiskip=0pt plus 3\zw} +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule -%The amount of the ``full-height'' (height + depth). -%<*ja> -「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう. -\pTeX では 「全角高さ」\texttt{1zh} は「文字クラス0の文字」の高さと深さの和と決められていたが, -\LuaTeX-jaではここで指定する. +\vrule\hbox{あ「い」う,えお}\vrule\par +\ltjsetparameter{kanjiskip=0pt minus \zw} +\vrule\hbox to 6.5\zw{あ「い」う,えお}\vrule +\end{LTXexample} + +\end{cslist} % +%<*en> +In case of glue, one can specify following additional keys in each \texttt{[$j$]} + subtable: +\begin{cslist}[style=standard] +\item[priority=] +An integer in $[-4,3]$ (treated as 0 if omitted), or +a pair of these integers \texttt{\{, \}} (version 2~or~later). +This is +used only in line adjustment with priority by \Pkg{luatexja-adjust} +(see Subsection~\ref{ssec:adj}). Higher value means the glue is easy to stretch, +and is also easy to shrink. +\item[kanjiskip\_natural=\textrm{, }% + kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode -\item[kanjiskip=\{, , \}] -%(optional) -%(任意) +These keys specifies the amount of the natural width of \Param{kanjiskip} +(the stretch/shrink part, respectively) which will be inserted +in addition to the original JFM glue. Default values of them are all 0. -%<*en> -This field specifies the ``ideal'' amount of \Param{kanjiskip}. As noted - in Subsection~\ref{subs-kskip}, if the parameter - \Param{kanjiskip} is \cs{maxdimen}, the value specified - in this field is actually used (if this field is not specified in - JFM, it is regarded as 0\,pt). Note that and - fields are in design-size unit too. -% -%<*ja> -理想的な\Param{kanjiskip}の量を指定する.\ref{subs-kskip}節で述べたように, -もし\Param{kanjiskip}が \cs{maxdimen} の値ならば,このフィールドで指定された -値が実際には用いられる(指定なしは0\,ptとして扱われる).とのフィールドもdesign-size -が単位であることに注意せよ. -% +As an example, in \texttt{jfm-ujis.lua}, the standard JFM in horizontal writing, we have +\begin{itemize} + \item Between an ordinal letter ``あ'' and an ideographic opening bracket, we have +a glue whose natural part and shrink part are both half-width, while its stretch part is + zero. However, this glue also can be stretched + as much as the stretch part of \Param{kanjiskip} times the value of + \texttt{kanjiskip\_stretch} key (1 in this case). + \item Between an ideographic closeing brackets (the ideographic comma ``,'' + is included) and an ordinal letter, we have the same glue. + Again, this glue also can be stretched + as much as the stretch part of \Param{kanjiskip} times the value of + \texttt{kanjiskip\_stretch} key (1 in this case). + \item Between an ideographic opening bracket and an ordinal letter + and between an ordinal letter and an ideographic closing bracket, + we have a glue whose natural part and stretch part are both zero, while its shrink part as much as + the shrink part of \Param{kanjiskip}. +\end{itemize} +Hence we have the following result: -\item[xkanjiskip=\{, , \}] -%(optional) -%(任意) +\medskip +\begin{LTXexample}[width=16\zw] +\leavevmode +\ltjsetparameter{kanjiskip=0pt plus 3\zw} +\vrule\hbox to 15\zw{あ「い」う,えお}\vrule -%<*en> -Like the \texttt{kanjiskip} field, this field specifies the ``ideal'' - amount of \Param{xkanjiskip}. +\vrule\hbox{あ「い」う,えお}\vrule\par +\ltjsetparameter{kanjiskip=0pt minus \zw} +\vrule\hbox to 6.5\zw{あ「い」う,えお}\vrule +\end{LTXexample} + +\end{cslist} % + +\item[end\_stretch=, end\_shrink=] %<*ja> -\texttt{kanjiskip}フィールドと同様に,\Param{xkanjiskip}の理想的な量を -指定する. -% -\end{cslist} +(任意,バージョン1のみ) +優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行 + 末に来た時に,行長を詰める調整・伸ばす調整のた + めにこの文字と行末の間に挿入可能なカーンの大きさを指定する. +% %<*en> -\paragraph{Character classes} -Besides from above fields, a JFM file have several sub-tables those -indices are natural numbers. The table indexed by~$i\in\omega$ stores -information of \emph{character class}~$i$. At least, the character class~0 is -always present, so each JFM file must have a sub-table whose index is -\texttt{[0]}. Each sub-table (its numerical index is denoted by $i$) has -the following fields: +(optional, version~1 only) % + + \item[end\_adjust=\{, , ...\}] %<*ja> -\paragraph{文字クラス} -上記のフィールドに加えて,JFMファイルはそのインデックスが自然数であるいくつかの -サブテーブルを持つ.インデックスが$i\in\omega$であるテーブルは\emph{文字クラス}$i$の -情報を格納する.少なくとも,文字クラス0は常に存在するので,JFMファイルはインデックス -が\texttt{[0]}のサブテーブルを持たなければならない.それぞれのサブテーブル -(そのインデックスを$i$で表わす)は以下のフィールドを持つ: -% +(任意,バージョン2以降) -\begin{cslist}[style=standard] -\item[chars=\{, ...\}] -%(required except character class~0) -%(文字クラス0を除いて必須) +優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が + 行末に来た時に,この文字と行末の間には指定された値のいずれかの大きさのカーンが + 挿入される(\autoref{ssec:adj}参照). +バージョン1における +\begin{lstlisting}[escapechar=\$] + end_stretch = $a$, end_shrink = $b$ +\end{lstlisting} +という指定は,バージョン2以降では次の指定と同じになる. +\begin{lstlisting}[escapechar=\$] + end_adjust = {$-b$, 0.0, $a$} +\end{lstlisting} +もし真ん中の \texttt{0.0} がない場合は,$a$か$-b$かいずれかのカーンが常に行末に追加される. +% %<*en> -This field is a list of characters which are in this character - type~$i$. This field is optional if $i=0$, since all - \textbf{JAchar} which do not belong any character classes other - than 0 are in the character class 0 - (hence, the character class~0 contains most of - \textbf{JAchar}s). In the list, character(s) can be specified in the following form: -\begin{itemize} -\item a Unicode code point -\item the character itself (as a Lua string, like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+}) -\item a string like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+} (the character followed by an asterisk) -\item several ``imaginary'' characters (We will describe these later.) -\end{itemize} +(optional, version~2 or~later) % -%<*ja> -このフィールドは文字クラス$i$に属する文字のリストである.このフィールドは$i=0$の -場合には任意である(文字クラス0には,0以外の文字クラスに属するものを -除いた全ての\textbf{JAchar}が属するから).このリスト中で文字を指定するには,以下の方法がある: -\begin{itemize} -\item Unicode におけるコード番号 -\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+}」のような,文字それ自体 -\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+}」のような,文字それ自体の後にアスタリスクをつけたもの -\item いくつかの「仮想的な文字」(後に説明する) -\end{itemize} -% -\item[width=, height=, depth=, italic=] -%(required) -%(必須) +\end{cslist} +%<*ja> +\paragraph{文字クラスの決定} +文字からその文字の属する文字クラスを算出する過程について, +次の内容を含んだ \texttt{jfm-test.lua} を用いて説明する. +% %<*en> -\begin{table}[t] - \centering -\begin{tabular}{llr} -\toprule -Direction of JFM&\textbf{\texttt{'yoko'} (horizontal)}&\multicolumn{1}{l}{\textbf{\texttt{'tate'} (vertical)}}\\ -\midrule -\texttt{width} field&\multicolumn{2}{c}{the width of the ``real'' glyph}\\ -\texttt{height} field&the height of the ``real'' glyph&0.0\\ -\texttt{depth} field&the depth of the ``real'' glyph&0.0\\ -\midrule -\texttt{italic} field&\multicolumn{2}{c}{0.0}\\ -\bottomrule -\end{tabular} -\caption{Default values of \texttt{width} field and other fields} -\label{tab-wid} -\end{table} -Specify the width of characters in character class~$i$, the height, the depth and -the amount of italic correction. All characters in character class~$i$ are regarded that its width, height, and depth are -as values of these fields. The default values are shown in \autoref{tab-wid}. +\paragraph{Character to character classes} +We explain how the character class of a character is determined, +using \texttt{jfm-test.lua} which contains the following: +% +\begin{lstlisting} + [0] = { + chars = { '漢' }, + align = 'left', left = 0.0, down = 0.0, + width = 1.0, height = 0.88, depth = 0.12, italic=0.0, + }, + [2000] = { + 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;+hwid +\setbox0\hbox{\a ヒ漢} +\the\wd0 +\end{LTXexample} +%<*en> +Now we look why the above source outputs 15\,pt. +\begin{enumerate} +\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 generally determined \emph{after +applying font features by \Pkg{luaotfload}}. % %<*ja> -\begin{table}[t] - \centering -\begin{tabular}{llr} -\toprule -JFM書字方向&\emph{\texttt{'yoko'}(横組)}&\multicolumn{1}{l}{\emph{\texttt{'tate'}(縦組)}}\\ -\midrule -\texttt{width}&\multicolumn{2}{c}{「実際のグリフ」の幅}\\ -\texttt{height}&「実際のグリフ」の高さ&0.0\\ -\texttt{depth}&「実際のグリフ」の深さ&0.0\\ -\midrule -\texttt{italic}&\multicolumn{2}{c}{0.0}\\ -\bottomrule -\end{tabular} -\caption{\texttt{width} フィールド等の標準値} -\label{tab-wid} -\end{table} -文字クラス$i$に属する文字の幅,高さ,深さ,イタリック補正の量を指定する. -文字クラス$i$に属する全ての文字は,その幅,高さ,深さがこのフィールドで指定した -値であるものとして扱われる.省略時や,数でない値を指定した時には表\nobreak\ref{tab-wid}に - 示されている値を用いる.例えば,横組用JFMで \texttt{width} フィールドには数値以外の値を指 - 定した場合,文字の幅はその「実際の」グリフの幅となる.OpenTypeの \texttt{prop} featureと併用 - すれば,これによってプロポーショナル組を行うことができる. +上記の出力結果が,15\,ptとなっているのは理由によるものである: +\begin{enumerate} +\item \verb+hwid+ featureによって「ヒ」が半角幅のグリフ「ヒ」と置き換わる(\Pkg{luaotfload} による処理). +\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である. +\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される. +\end{enumerate} +この例は,\emph{文字クラスの決定はOpenType機能の適用によるグリフ置換の結果に基づく}ことを +示している. % -\item[left=, down=, align=]\ - %<*en> -These fields are for adjusting the position of the ``real'' glyph. Legal - values of \texttt{align} field are \texttt{'left'}, - \texttt{'middle'}, and \texttt{'right'}. If one of these - 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 -\autoref{fig:pos}~and~\autoref{fig:pos-tate}. +However, if the class determined by the glyph after application of features is zero, +\LuaTeX-ja adopts the class determined by the glyph \emph{before} application of features. +The following input is an example. % %<*ja> -これらのフィールドは実際のグリフの位置を調整するためにある. -\texttt{align} フィールドに指定できる値は \texttt{'left'}, \texttt{'middle'}, -\texttt{'right'} のいずれかである.もしこれら3つのフィールドのうちの1つが省かれた -場合,\texttt{left} と \texttt{down} は0,\texttt{align} フィールドは -\ \texttt{'left'} であるものとして扱われる. -これら3つのフィールドの意味については\autoref{fig:pos}(横組用和文フォント), -\autoref{fig:pos-tate}(縦組用和文フォント)で説明する. +但し,JFMによって決まる置換後のグリフの文字クラスが0である場合は,置換前の文字クラスを採用する. % - +\begin{LTXexample}[width=0.3\textwidth] +\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert +\a 漢。\inhibitglue 漢 +\end{LTXexample} %<*en> -In most cases, \texttt{left} and \texttt{down} fields are~0, while -it is not uncommon that the \texttt{align} field is \texttt{'middle'} or \texttt{'right'}. -For example, setting the \texttt{align} field to \texttt{'right'} is practically needed -when the current character class is the class for opening delimiters'. +Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined +as follows: +\begin{enumerate} +\item As the case of ``ヒ'', 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'', according to the JFM 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{left}と\texttt{down}は0である一方, -\texttt{align}フィールドが\texttt{'middle'}や\texttt{'right'}であることは -珍しいことではない. -例えば,\texttt{align}フィールドを\texttt{'right'}に指定することは, -文字クラスが開き括弧類であるときに実際必要である. -% - -\begin{figure}[!tb] -\begin{minipage}{0.4\textwidth}% -\begin{center}\unitlength=10pt\small -\begin{picture}(15,12)(-1,-4) -\color{b_gray}% jfm -\put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength} - -\color{b_pink}% step1 -\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} - -\color{red}% real glyph -\thicklines -\put(-1,-1.5){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}} -\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}} -\put(-1,5.5){\line(1,0){6}} -\put(-1,-4){\line(1,0){6}} - -\color{b_green}% real glyph -\put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength} - -\color{black}% jfm -\thicklines -\put(0,0){\vector(0,1){8}\line(0,-1){3}\vector(1,0){12}} -\put(12,0){\line(0,1){8}\vector(0,-1){3}} -\put(0,8){\line(1,0){12}} -\put(0,-3){\line(1,0){12}} -\put(0.2,4){\makebox(0,0)[l]{\texttt{height}}} -\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}} -\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}} - -\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}} -\put(3,7){\line(1,0){6}} -\put(3,-2.5){\line(1,0){6}} -\newsavebox{\eqdist} -\savebox{\eqdist}(0,0)[b]{% - \thinlines - \put(-0.08,0.2){\line(0,-1){0.4}}% - \put(0.08,0.2){\line(0,-1){0.4}}} -\put(1.5,0){\usebox{\eqdist}} -\put(10.5,0){\usebox{\eqdist}} - -\color{blue}% shifted -\thicklines -\put(3,-1.5){\vector(-1,0){4}} -\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}} -\put(3,0){\vector(0,-1){1.5}} -\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}} -\end{picture} -\end{center} -\end{minipage}% -\begin{minipage}{0.6\textwidth}% +ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる. +\begin{enumerate} +\item \Pkg{luaotfload}によって縦組用句点のグリフに置き換わる. +\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される. +\item この場合,置換前の横組用句点のグリフによって文字クラスを判定する. +\item 結果として,上の出力例中の句点の文字クラスは2000となる. +\end{enumerate} +% + + +%\paragraph{仮想的な文字} +%\paragraph{Imaginary characters} %<*en> -Consider a Japanese character node which belongs to -a character class whose the \texttt{align} -field is \texttt{'middle'}. +As described before, you can specify several \emph{imaginary characters} in +\texttt{chars} field. The most of these characters are regarded as the +characters of class 0 in \pTeX. +As a result, \LuaTeX-ja can control typesetting finer than \pTeX. +The following is the list of imaginary characters: % %<*ja> -\texttt{align}フィールドの値が \texttt{'middle'} であるような文字クラスに属する -和文文字ノードを考えよう. +上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も +指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字 +クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か +い組版調整ができるようになっている.以下でその一覧を述べる: % -\begin{itemize} -\item -%<*en> -The black rectangle is the imaginary body of the node. -Its width, height, and depth are specified by JFM. -% + +\begin{cslist} +%%\item['diffmet'] +%%Used at a boundary between two \textbf{JAchar}s whose JFM or size is different. +%%JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる. + +\item['boxbdd'] +%The beginning/ending of a hbox, and the beginning of a noindented (i.e., began by \cs{noindent}) paragraph. +%hboxの先頭と末尾,及びインデントされていない(\cs{noindent} で開始された)段落の先頭を表す. + +\item['parbdd'] +%The beginning of an (indented) paragraph. +%通常の(\cs{noindent} で開始されていない)段落の先頭. + +\item['jcharbdd'] +%A boundary between \textbf{JAchar} and anything else. %<*ja> -黒色の長方形はノードの枠であり, -その幅,高さ,深さはJFMによって指定されている. +\textbf{JAchar}と「その他のもの」との境界. + +バージョン2以前では\textbf{ALchar},箱,罫線(rule),glue,~kernなどいろいろなものと\textbf{JAchar}の境界に対して +本特殊文字が用いられていたが, +バージョン3以降では\ \texttt{'jcharbdd'}, \texttt{'alchar'}, \texttt{'nox\_alchar'}, +\texttt{'glue'} と細分化され, +\texttt{'jcharbdd'} は主に\textbf{JAchar}とボックスや罫線(rule)との境界に使われるようになった. % -\item + +\item['alchar', 'nox\_alchar'] %<*en> -Since the \texttt{align} field is \texttt{'middle'}, -the ``real'' glyph is centered horizontally (the green rectangle) first. +(version 3~or~later) A boundary between \textbf{JAchar} and \textbf{ALchar}. % %<*ja> -\texttt{align}フィールドは \texttt{'middle'} なので, -実際のグリフの位置はまず水平方向に中央揃えしたものとなる(緑色の長方形). +(バージョン3以降)\textbf{JAchar}と\textbf{ALchar}との境界. +\textbf{JAchar}と\textbf{ALchar}の間に\Param{xkanjiskip}が入ることが可能な場合は +\ \texttt{'alchar'}\ が,そうでない場合は\ \texttt{'nox\_alchar'}\ が用いられる +(この区別は\textbf{ALchar}側の\Param{alxspmode}の値によってのみ行われる). % -\item + +\item['glue'] +%(version 3~or~later) A boundary between \textbf{JAchar}, and, a glue or kern. +%(バージョン3以降)\textbf{JAchar}とglue,kernとの境界. + +\item[$-1$] +%The left/right boundary of an inline math formula. +%行中数式と地の文との境界. +\end{cslist} + +%\paragraph{Porting JFM from \pTeX} +%\paragraph{\pTeX 用和文用TFMの移植} + +% ToDo: English version. + %<*en> -Furthermore, the glyph is shifted according to values of fields - \texttt{left} and \texttt{down}. The ultimate position of the real - glyph is indicated by the red rectangle. +See Japanese version of this manual. % + %<*ja> -さらに,グリフは \texttt{left} と \texttt{down} の値に従ってシフトされる. -最終的な実際のグリフの位置は赤色の長方形で示された位置になる. -% +以下に,\pTeX 用に作られた和文用TFMを\LuaTeX-ja用に移植する場合の注意点を挙げておく. +\begin{itemize} +\item 実際に出力される和文フォントのサイズがdesign sizeとなる. +このため,例えば$1\,\textrm{zw}$がdesign sizeの0.962216倍であるJISフォン + トメトリック等を移植する場合は,次のようにするべきである: +\begin{itemize} +\item JFM中の全ての数値を$1/0.962216$倍しておく. +\item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする. + \LaTeX でのフォント宣言なら,例えば次のように: +\begin{lstlisting} +\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{} +\end{lstlisting} \end{itemize} -\end{minipage} -\medskip +\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする + (JFM中に単に書かなければよい). +\item \texttt{'boxbdd'}については,それのみで一つの文字クラスを形成し,その + 文字クラスに関してはグルー/カーンの設定はしない. -\caption{% -%The position of the real glyph (horizontal Japanese fonts) -%横組和文フォントにおける「実際の」グリフの位置 -} -\label{fig:pos} -\end{figure} -\begin{figure}[!tb] -\begin{minipage}{0.4\textwidth}% -\begin{center}\unitlength=10pt\small -\begin{picture}(15,12)(-6,0) -\color{b_gray}% jfm -\put(-6,0){\vrule width 12\unitlength height 11\unitlength} +これは,\pTeX では, + hboxの先頭・末尾とインデントされていない(\cs{noindent} で開始さ + れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである. +\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である. -\color{b_pink}% real glyph -\put(-6.5,5.5){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} +ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので, + 段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに + は,段落の最初に手動で \cs{inhibitglue} を追加するか,あるいは + \ \cs{everypar} のハックを行い,それを自動化させるしかなかった. -\color{red}% real glyph -\thicklines -\put(-6.5,5.5){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}} -\put( 1.5,5.5){\line(0,1){6}\line(0,-1){3}} -\put(-6.5,11.5){\line(1,0){8}} -\put(-6.5,2.5){\line(1,0){8}} +一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ +うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに +\texttt{'parbdd'}を入れれば全角下がりとなる. -\color{b_green}% step1 -\put(-4,3){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength} +\begin{LTXexample}[width=0.4\textwidth] +\jfont\g=KozMinPr6N-Regular:jfm=test \g +\parindent1\zw\noindent{}◆◆◆◆◆ +\par 「◆◆←二分下がり +\par 【◆◆←全角下がり +\par 〔◆◆←全角二分下がり +\end{LTXexample} +\end{itemize} -\color{black}% jfm -\thicklines -\put(0,11){\vector(1,0){6}\vector(-1,0){6}\vector(0,-1){11}} -\put(0,0){\line(1,0){6}\line(-1,0){6}} -\put(-6,0){\line(0,1){11}} -\put( 6,0){\line(0,1){11}} -\put( 3,10.8){\makebox(0,0)[t]{\texttt{height}}} -\put(-3,10.8){\makebox(0,0)[t]{\texttt{depth}}} -\put(0.2,5.5){\makebox(0,0)[l]{\texttt{width}}} +但し,\cs{everypar} を利用している場合にはこの仕組みは正しく動かない. +そのような例としては箇条書き中の \cs{item} で始まる段落があり,\Pkg{ltjsclasses}では +人工的に「\texttt{'parbdd'}の意味を持つ」whatsitノードを作ることによって対処している% +\footnote{\texttt{ltjsclasses.dtx} を参照されたい. +JFM側で一部の対処ができることにより,\Pkg{jsclasses}のようにif文の判定はしていない.}. +% -\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}} -\put(-4,9){\line(1,0){8}} -\put(-4,0){\line(1,0){8}} -\savebox{\eqdist}(0,0)[b]{% - \thinlines - \put(-0.08,0.2){\line(0,-1){0.4}}% - \put(0.08,0.2){\line(0,-1){0.4}}} -\put(2,9){\usebox{\eqdist}} -\put(-2,9){\usebox{\eqdist}} +%\subsection{Math font family} +%\subsection{数式フォントファミリ} +\label{ssec:math} -\color{blue}% shifted -\thicklines -\put(-4,3){\vector(0,1){2.5}} -\put(-3.8,4.25){\makebox(0,0)[l]{\texttt{left}}} -\put(-4,5.5){\vector(-1,0){2.5}} -\put(-5.,5.7){\makebox(0,0)[b]{\texttt{down}}} -\end{picture} -\end{center} -\end{minipage}% -\begin{minipage}{0.6\textwidth}% %<*en> -(\dots) +\TeX\ handles fonts in math formulas by 16~font families\footnote{Omega, +Aleph, \LuaTeX~and $\varepsilon$-\kern-.125em(u)\pTeX\ can handles 256~families, but +an external package is needed to support this in plain \TeX\ and +\LaTeX.}, and each family has three fonts: +\cs{textfont}, \cs{scriptfont} and \cs{scriptscriptfont}. % %<*ja> -\texttt{align}フィールドの値が \texttt{'right'} であるような文字クラスに属する -和文文字を考えよう. -\begin{itemize} -\item -実際のグリフの「垂直位置」は,まずベースラインが文字の物理的な左右方向の中央を通る -位置となる. -\item -また,この場合 \texttt{align} フィールドは \texttt{'right'} なので, -「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形). -\item -その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる -のは横組用和文フォントと変わらない. -\end{itemize} +\TeX\ は数式フォントを16のファミリ\footnote{Omega, Aleph, \LuaTeX,そして + $\varepsilon$-\kern-.125em(u)\pTeX\ では256の数式ファミリを扱うことができるが, + これをサポートするためにplain \TeX と\LaTeX では外部パッケージを読み込む必要が + ある.}で管理し,それぞれのファミリは3つのフォントを持っている: +\cs{textfont}, \cs{scriptfont} そして \cs{scriptscriptfont} である. +% + +%<*en> +\LuaTeX-ja's handling of Japanese fonts in math formulas is similar; +\autoref{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の数式中での和文フォントの扱いも同様である. +\autoref{tab-math}は数式フォントファミリに対する \TeX のプリミティブと対応する +ものを示している.\cs{fam} と \cs{jfam} の値の間には関係はなく, +適切な設定の下では \cs{fam} と \cs{jfam} の両方に同じ値を設定することができる. +\Param{jatextfont} 他の第2引数は,\cs{jfont} で定義された +\emph{横組用}和文フォントである.\cs{tfont} で定義された +\emph{縦組用}和文フォントを指定することは想定していない. +% + +\begin{table}[!tb] +%\caption{Commands for Japanese math fonts} +%\caption{和文数式フォントに対する命令} +\label{tab-math} +%\medskip +\centering +\def\{{\char`\{}\def\}{\char`\}}\small +\begin{tabular}{ll} +\toprule +%\bf Japanese fonts&\bf alphabetic fonts\\ +%\bf 和文フォント&\bf 欧文フォント\\ +\midrule +\cs{jfam}${}\in [0,256)$&\cs{fam}\\ +\tt\Param{jatextfont}\,=\{,\}&\tt\cs{textfont}=\\ +\tt\Param{jascriptfont}\,=\{,\}&\tt\cs{scriptfont}=\\ +\tt\Param{jascriptscriptfont}\,=\{,\}&\tt\cs{scriptscriptfont}=\\ +\bottomrule +\end{tabular} +\end{table} + +%\subsection{Callbacks} +%\subsection{コールバック} + +%<*en> +\LuaTeX-ja also has several callbacks. These callbacks can +be accessed via \verb+luatexbase.add_to_callback+ function and so on, as other callbacks. +% +%<*ja> +\LuaTeX 自体のものに加えて,\LuaTeX-jaもコールバックを持っている. +これらのコールバックには,他のコールバックと同様に \verb+luatexbase.add_to_callback+ +関数などを用いることでアクセスすることができる. +% +\begin{description}[font=\bfseries, style=nextline] +%\item[\texttt{luatexja.load\_jfm} callback] +%\item[\texttt{luatexja.load\_jfm}コールバック] +%<*en> +With this callback you can overwrite JFMs. +This callback is called when a new JFM is loaded. +% +%<*ja> +このコールバックを用いることでJFMを上書きすることができる. +このコールバックは新しいJFMが読み込まれるときに呼び出される. % -\end{minipage} -\medskip -\caption{% -%The position of the real glyph (vertical Japanese fonts) -%縦組和文フォントにおける「実際の」グリフの位置 -} -\label{fig:pos-tate} -\end{figure} +\begin{lstlisting}[numbers=left] +function ( jfm_info, jfm_name) + return
new_jfm_info +end +\end{lstlisting} -\item[kern={\{[$j$]=, [$j'$]=\{, [ratio=]\}, ...\}}] -\nopagebreak -\item[glue={\{[$j$]=\{, , , [ratio=, ...]\}, ...\}}]\leavevmode +%<*en> +The argument \verb+jfm_info+ contains a table similar to the table in a JFM file, except +this argument has \texttt{chars} field which contains character codes + whose character class is not~0. +% %<*ja> +引数 \verb+jfm_info+ はJFMファイルのテーブルと似たものが格納されるが, +クラス0を除いた文字のコードを含んだ\texttt{chars}フィールドを持つ点が異なる. +% -文字クラス$i$の文字と$j$の文字の間に挿入されるカーンやグルーの量を指定する. +%<*en> +An example of this callback is the \texttt{ltjarticle} class, with + forcefully assigning character class~0 to \texttt{'parbdd'} + in the JFM \texttt{jfm-min.lua}. +% +%<*ja> +このコールバックの使用例は\texttt{ltjarticle}クラスにあり, +\texttt{jfm-min.lua}中の\texttt{'parbdd'}を強制的にクラス0に割り当てている. +% -は,グルーの自然長のうちどれだけの割合が「後の文字」由来かを示す量で, -$0$から$+1$の実数値をとる.省略時の値は$0.5$である. -このフィールドの値は\Param{differentjfm}の値が -\texttt{pleft},~\texttt{pright},~\texttt{paverage}の値のときのみ実際に用いられる. +%\item[\texttt{luatexja.define\_jfont} callback] +%\item[\texttt{luatexja.define\_jfont}コールバック] +%<*en> +This callback and the next callback form a pair, and you can assign characters + which do not have fixed code points in Unicode to non-zero character classes. +This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded. +% +%<*ja> +このコールバックと次のコールバックは組をなしており,Unicode中に固定された文字コード +番号を持たない文字を非零の文字クラスに割り当てることができる. +このコールバックは新しい和文フォントが読み込まれたときに呼び出される. +% -例えば,\cite{x4051}では,句点と中点の間には, -句点由来の二分空きと中点由来の四分空きが挿入されるが,この場合には +\begin{lstlisting}[numbers=left] +function (
jfont_info, font_number) + return
new_jfont_info +end +\end{lstlisting} +%<*en> +\verb+jfont_info+ has the following fields, +\emph{which may not overwritten by a user}: +\begin{description} +\item[\texttt{size}] +The font size specified at \cs{jfont} in scaled points ($1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$). +\item[\texttt{zw}, \texttt{zh}, \texttt{kanjiskip}, \texttt{xkanjiskip}] +These are scaled value of those specified by the JFM, by the font size. +\item[\texttt{jfm}] +The internal number of the JFM. +\item[\texttt{var}] +The value of \texttt{jfmvar}~key, which is specified at \cs{jfont}. +The default value is the empty string. +\item[\texttt{chars}] +The mapping table from character codes to its character classes.\\ +The specification \texttt{[i].chars=\{, ...\}} in the JFM will be stored in this + field as \texttt{chars=\{[]=\,$i$, ...\}}. +\item[\texttt{char\_type}] +For $i\in\omega$, \texttt{char\_type[$i$]} is information of characters whose class is + $i$, and has the following fields: \begin{itemize} -\item には$0.5+0.25=0.75$を指定する. -\item には$0.25/(0.5+0.25)=1/3$を指定する. + \item \texttt{width},~\texttt{height}, \texttt{depth}, + \texttt{italic}, \texttt{down},~\texttt{left}\ are just + scaled value of those specified by the JFM, by the font size. + \item \texttt{align} is a number which is determined from \texttt{align}~field in the JFM: +\[ + \begin{cases} + 0&\text{\texttt{'left'} (default)}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'} + \end{cases} +\] \end{itemize} -% -%<*en> -\ - -Specifies the amount of kern or glue which will be inserted -between characters in character class~$i$ and those in character class~$j$. - - specifies how much the glue is originated in the ``right'' character. -It is a real number between 0 and 1, and treated as 0.5 if omitted. For example, -The width of a glue between an ideographic full stop ``。'' -and a fullwidth middle dot ``・'' is three-fourth of fullwidth, -namely halfwidth from the ideographic full stop, and -quarter-width from the fullwidth middle dot. In this case, -we specify to $0.25/(0.5+0.25)=1/3$. +For $i$,~$j\in \omega$, \texttt{char\_type[$i$][$j$]} stores a kern or a glue which will be inserted +between character class~$i$ and class~$j$. +\end{description} % - %<*ja> -グルーの指定においては,上記に加えて各 \texttt{[$j$]} の各サブテーブル内に -次のキーを指定できる, -\begin{cslist}[style=standard] -\item[priority=] - \Pkg{luatexja-adjust}による優先順位付き - 行長調整(\ref{ssec-adj}節)において,このグルーの優先度を指定する.許される値は以下の通り: +\verb+jfont_info+ は最低限以下のフィールドを持つが,これらを書き換えてはならない: +\begin{cslist} +\item[size] +実際に使われるフォントサイズ(sp単位).$1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$. +\item[zw\textrm{, }zh\textrm{, }kanjiskip\textrm{, }xkanjiskip] +JFMファイルで指定されているそれぞれの値をフォントサイズに合わせてスケーリングしたものを +sp単位で格納している. +\item[jfm] +利用されているJFMを識別するための番号. +\item[var] +\cs{jfont},~\cs{tfont} で指定された \texttt{jfmvar} キーの値(未指定のときは空文字列). +\item[chars] +文字コードから文字クラスへの対応が記述されたテーブル.\\ +JFM内の \texttt{[i].chars=\{, ...\}} という指定は\ +\texttt{chars=\{[]=\,$i$, ...\}} という形式に変換されている. +\item[char\_type] +$i\in\omega$に対して,\texttt{char\_type[$i$]} は文字クラス$i$の文字の寸法を格納しており, +以下のフィールドを持つ. +\begin{itemize} + \item \texttt{width},~\texttt{height}, \texttt{depth}, + \texttt{italic}, \texttt{down},~\texttt{left}\ は +JFMで指定されているそれぞれの値をスケーリングしたものである. + \item \texttt{align} はJFMで指定されている値によって, +\[ + \begin{cases} + 0&\text{\texttt{'left'}や省略時}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'} + \end{cases} +\] +のいずれかの値をとる. +\end{itemize} +$i$,~$j\in \omega$に対して,\texttt{char\_type[$i$][$j$]} は +文字クラス$i$の文字と$j$の文字の間に挿入されるグルーやカーンを格納している. +\begin{itemize} + \item 間に入るものがカーンであれば,この値は\ +\texttt{[$j$]=\{[1]=, ratio=\}} であり, +はカーンを表すノードである\footnote{% + バージョン20150420.0以降ではノードのアクセス手法にdirect access + modelを用いているため,ノードそのものを表すユーザーデータではなく, + 内部で参照のために使われる添字(整数)である. +}. + \item グルーであれば,この値は以下のキーを持つテーブルである. \begin{description} - \item[バージョン1のとき] $-4$から$+3$の間の整数 - \item[バージョン2のとき] $-4$から$+3$の間の整数の2つ組\texttt{\{, \}}か, - または$-4$から$+3$の間の整数., はそれぞれこのグルーが伸びるときの優先度,縮むときの - 優先度であり,単に整数$i$が指定された場合は\texttt{\{$i$, $i$\}}であると解釈される. + \item[\texttt{width}, \texttt{stretch}, \texttt{shrink}] + グルーのそれぞれ自然長,伸び量,縮み量をsp単位で表したもの. + \item[\texttt{priority}] バ(ージョン2以降の)JFMでの指定 \texttt{\{,\}} を + \[ + (\text{}+4)\cdot 8+\text{}+4 + \] + として0--63の整数にパックしたもの. + \item[\texttt{ratio}, \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch}, \texttt{kanjiskip\_shrink}] + JFM中の同名のフィールドの値がそのまま使われている. \end{description} - ここで指定する値は,大きい値ほど「先に伸ばされる」「先に縮ませる」ことを意味しており,省略時の値 - は0である.範囲外の値が指定されたときの動作は未定義である. -\item[kanjiskip\_natural=\textrm{, }% - kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode - \label{pg:ksp_nat} - -JFMによって本来挿入されるグルーの他に -\Param{kanjiskip}分の空白を自然長(\texttt{kanjiskip\_natural}),伸び量(\texttt{kanjiskip\_stretch}), -縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては - \Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに.追加できる.}% -ための指定である.いずれも省略された場合のデフォルト値は0(追加しない)である. - -例えば,\LuaTeX-jaの横組標準JFMの \texttt{jfm-ujis.lua} では, -\begin{itemize} - \item 通常の文字「あ」と開き括弧類の間に入るグルーは,自然長・縮み量半角,伸び量0のグルー -となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け - た分だけ伸びることが許される. - \item 同様に,閉じ括弧類(全角コンマ「,」も含む)と通常の文字「う」「え」の間にも -自然長・縮み量半角,伸び量0のグルー -となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け - た分だけ伸びることが許される. \end{itemize} -となっている.従って,以下のような組版結果を得る. - -\medskip -\begin{LTXexample}[width=16\zw] -\leavevmode -\ltjsetparameter{kanjiskip=0pt plus 3\zw} -\vrule\hbox to 15\zw{あ「い」う,えお}\vrule -\end{LTXexample} - +\item[ascent\textrm{, }descent] + 縦組時に個々のグリフを90度回転させる場合,そのグリフは(実際の高さ・深さにかかわらず) + 便宜的に高さ\texttt{ascent},深さ\texttt{descent}を持つものだと想定して回転させる. + この仕様は\Pkg{luaotfload}がOpenTypeフォントのVORGテーブルを読まないための暫定的なものである. +\item[chars\_cbcache] +文字クラス決定の処理で.キャッシュとして使われる. \end{cslist} % -%<*en> -In case of glue, one can specify following additional keys in each \texttt{[$j$]} - subtable: -\begin{cslist}[style=standard] -\item[priority=] -An integer in $[-4,3]$ (treated as 0 if omitted), or -a pair of these integers \texttt{\{, \}} (version~2 only). -This is -used only in line adjustment with priority by \Pkg{luatexja-adjust} -(see Subsection~\ref{ssec-adj}). Higher value means the glue is easy to stretch, -and is also easy to shrink. -\item[kanjiskip\_natural=\textrm{, }% - kanjiskip\_stretch=\textrm{, }kanjiskip\_shrink=]\leavevmode -These keys specifies the amount of the natural width of \Param{kanjiskip} -(the stretch/shrink part, respectively) which will be inserted -in addition to the original JFM glue. Default values of them are all 0. +%<*en> +The returned table \verb+new_jfont_info+ also should include these fields, but +you are free to add more fields (to use them in the \texttt{luatexja.find\_char\_class} callback). +The \verb+font_number+ is a font number. +% +%<*ja> +戻り値の \verb+new_jfont_info+ テーブルも上に述べたフィールドをそのまま含まなければならないが, +それ以外にユーザが勝手にフィールドを付け加えることは自由である. +\verb+font_number+ はフォント番号である. +% -As an example, in \texttt{jfm-ujis.lua}, the standard JFM in horizontal writing, we have -\begin{itemize} - \item Between an ordinal letter ``あ'' and an ideographic opening bracket, we have -a glue whose natural part and shrink part are both half-width, while its stretch part is - zero. However, this glue also can be stretched - as much as the stretch part of \Param{kanjiskip} times the value of - \texttt{kanjiskip\_stretch} key (1 in this case). - \item Between an ideographic closeing brackets (the ideographic comma ``,'' - is included) and an ordinal letter, we have the same glue. - Again, this glue also can be stretched - as much as the stretch part of \Param{kanjiskip} times the value of - \texttt{kanjiskip\_stretch} key (1 in this case). -\end{itemize} -Hence we have the following result: +%<*en> +A good example of this and the next callbacks is the \Pkg{luatexja-otf} + package, supporting \verb+"AJ1-xxx"+ form for Adobe-Japan1 + CID characters in a JFM. This callback doesn't replace any + code of \LuaTeX-ja. +% +%<*ja> +これと次のコールバックの良い使用例は\Pkg{luatexja-otf}パッケージであり, +JFM中でAdobe-Japan1 CIDの文字を \verb+"AJ1-xxx"+ の形で指定するために +用いられている. +% -\medskip -\begin{LTXexample}[width=16\zw] -\leavevmode -\ltjsetparameter{kanjiskip=0pt plus 3\zw} -\vrule\hbox to 15\zw{あ「い」う,えお}\vrule -\end{LTXexample} +%\item[\texttt{luatexja.find\_char\_class} callback] +%\item[\texttt{luatexja.find\_char\_class}コールバック] +%<*en> +This callback is called just when \LuaTeX-ja is trying to determine which + character class a character \verb+chr_code+ belongs. +A function used in this callback should be in the following form: +% +%<*ja> +このコールバックは\LuaTeX-jaが \verb+chr_code+ の文字がどの文字クラスに +属するかを決定しようとする際に呼び出される. +このコールバックで呼び出される関数は次の形をしていなければならない: +% +\begin{lstlisting}[numbers=left] +function ( char_class,
jfont_info, chr_code) + if char_class~=0 then return char_class + else + .... + return ( new_char_class or 0) + end +end +\end{lstlisting} -\end{cslist} +%<*en> +The argument \verb+char_class+ is the result of \LuaTeX-ja's default + routine or previous function calls in this callback, hence + this argument may not be 0. Moreover, the returned + \verb+new_char_class+ should be as same as \verb+char_class+ when \verb+char_class+ + is not~0, otherwise you will overwrite the \LuaTeX-ja's + default routine. % - -\item[end\_stretch=, end\_shrink=] %<*ja> -(任意,バージョン1のみ) - -優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行 - 末に来た時に,行長を詰める調整・伸ばす調整のた - めにこの文字と行末の間に挿入可能なカーンの大きさを指定する. +引数 \verb+char_class+ は\LuaTeX-jaのデフォルトルーチンか,このコールバックの +直前の関数呼び出しの結果を含んでおり,したがってこの値は0ではないかもしれない. +さらに,戻り値の \verb+new_char_class+ は \verb+char_class+ が非零のときには +\verb+char_class+ の値と同じであるべきで,そうでないときは\LuaTeX-jaの +デフォルトルーチンを書き換えることになる. % + +%\item[\texttt{luatexja.set\_width} callback] +%\item[\texttt{luatexja.set\_width}コールバック] %<*en> -(optional, version~1 only) +This callback is called when \LuaTeX-ja is trying to encapsule a + \textbf{JAchar} \textit{glyph\_node}, to adjust its + dimension and position. % - - \item[end\_adjust=\{, , ...\}] %<*ja> -(任意,バージョン2のみ) - -優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が - 行末に来た時に,この文字と行末の間には指定された値のいずれかの大きさのカーンが - 挿入される(\autoref{ssec-adj}参照). - -バージョン1における -\begin{lstlisting}[escapechar=\$] - end_stretch = $a$, end_shrink = $b$ -\end{lstlisting} -という指定は,バージョン2では次の指定と同じになる. -\begin{lstlisting}[escapechar=\$] - end_adjust = {$-b$, 0.0, $a$} +このコールバックは\LuaTeX-jaが\textbf{JAchar}の寸法と位置を調節するために +その\textit{glyph\_node}をカプセル化しようとする際に呼び出される. +% +\begin{lstlisting}[numbers=left] +function (
shift_info,
jfont_info,
char_type) + return
new_shift_info +end \end{lstlisting} -もし真ん中の \texttt{0.0} がない場合は,$a$か$-b$かいずれかのカーンが常に行末に追加される. + +%<*en> +The argument \verb+shift_info+ and the returned \verb+new_shift_info+ have +\texttt{down} and \texttt{left} fields, which are the amount of shifting + down/left the character in a scaled point. +% +%<*ja> +引数 \verb+shift_info+ と戻り値の \verb+new_shift_info+ は +\texttt{down}と\texttt{left}のフィールドを持ち,これらの値は +文字の下/左へのシフト量(sp単位)である. % + %<*en> -(optional, version~2 only) +A good example is \Pkg{test/valign.lua}. +After loading this file, the vertical position of glyphs is automatically +adjusted; the ratio $(\hbox{height}:\hbox{depth})$ of glyphs is adjusted +to be that of letters in the character class~0. For example, suppose that +\begin{itemize} +\item The setting of the JFM: $(\hbox{height})=88x$, $(\hbox{depth})=12x$ + (the standard values of Japanese OpenType fonts); +\item The value of the real font: $(\hbox{height})=28y$, $(\hbox{depth})=5y$ + (the standard values of Japanese TrueType fonts). +\end{itemize} +Then, the position of glyphs is shifted up by % +%<*ja> +良い例が\Pkg{test/valign.lua}である.このファイルが読み込まれた状態では, + JFM内で規定された文字クラス0の文字における$(\hbox{高 + さ}):(\hbox{深さ})$の比になるように,実際のフォントの出力上 + 下位置が自動調整される.例えば, +\begin{itemize} +\item JFM側の設定:$(\hbox{高さ})=88x$, $(\hbox{深さ})=12x$% +(和文OpenTypeフォントの標準値) +\item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値) +\end{itemize} +となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にずらされることとなる: +% +\[ + \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y. +\] +\end{description} -\end{cslist} +%\section{Parameters} +%\section{パラメータ} +\subsection{\cs{ltjsetparameter}} +\label{ssec:param} +%<*en> +As described before, \cs{ltjsetparameter} and \cs{ltjgetparameter} are +commands for accessing most parameters of \LuaTeX-ja. One of the main +reason that \LuaTeX-ja didn't adopted the syntax similar to that of \pTeX\ +(\textit{e.g.},~\verb+\prebreakpenalty`)=10000+) +is the position of \verb+hpack_filter+ callback in the source +of \LuaTeX, see Section~\ref{sec-para}. +% %<*ja> -\paragraph{文字クラスの決定} -文字からその文字の属する文字クラスを算出する過程について, -次の内容を含んだ \texttt{jfm-test.lua} を用いて説明する. +先に述べたように,\LuaTeX-jaの内部パラメータにアクセスするには +\cs{ltjsetparameter}(または \cs{ltjglobalsetparameter})と \cs{ltjgetparameter} を用いる. +\LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を +採用しない理由の一つは,\LuaTeX のソースにおける \verb+hpack_filter+ +コールバックの位置にある.\ref{sec-para}章を参照. % + %<*en> -\paragraph{Character to character classes} -We explain how the character class of a character is determined, -using \texttt{jfm-test.lua} which contains the following: +\cs{ltjsetparameter} and \cs{ltjglobalsetparameter} are commands +for assigning parameters. These take one argument which is a +\texttt{=} list. +The difference between these two commands is the +scope of assignment; +\cs{ltjsetparameter} does a local assignment and +\cs{ltjglobalsetparameter} does a global one. +They also obey the value of \cs{globaldefs}, like other assignments. % -\begin{lstlisting} - [0] = { - chars = { '漢' }, - align = 'left', left = 0.0, down = 0.0, - width = 1.0, height = 0.88, depth = 0.12, italic=0.0, - }, - [2000] = { - 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;+hwid -\setbox0\hbox{\a ヒ漢} -\the\wd0 -\end{LTXexample} +%<*ja> +\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} はパラメータを +指定するための命令で,\texttt{=}のリストを +引数としてとる.両者の違いはスコープであり, +\cs{ltjsetparameter} はローカルな設定を行うのに対し, +\cs{ltjglobalsetparameter} はグローバルな設定を行う. +また,他のパラメータ指定と同様に \cs{globaldefs} の値にも従う. +% + %<*en> -Now we look why the above source outputs 15\,pt. -\begin{enumerate} -\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 generally determined \emph{after -applying font features by \Pkg{luaotfload}}. +The following is the list of parameters which can be specified by the +\cs{ltjsetparameter} command. [\cs{cs}] indicates the counterpart +in \pTeX, and symbols beside each parameter has the following meaning: % %<*ja> -上記の出力結果が,15\,ptとなっているのは理由によるものである: -\begin{enumerate} -\item \verb+hwid+ featureによって「ヒ」が半角幅のグリフ「ヒ」と置き換わる(\Pkg{luaotfload} による処理). -\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である. -\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される. -\end{enumerate} -この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを -示している. +以下は \cs{ltjsetparameter} に指定することができるパラメータの一覧である. +[\cs{cs}]は\pTeX における対応物を示す. +また,それぞれのパラメータの右上の記号には次の意味がある: % - +\begin{itemize} %<*en> -However, if the class determined by the glyph after application of features is zero, -\LuaTeX-ja adopts the class determined by the glyph \emph{before} application of features. -The following input is an example. +\item ``$\ast$'' : values at the end of a paragraph or a hbox are +adopted in the whole paragraph or the whole hbox. % %<*ja> -但し,JFMによって決まる置換後のグリフの文字クラスが0である場合は,置換前の文字クラスを採用する. +\item ``$\ast$'':段落やhboxの終端での値がその段落/hbox全体で用いられる. % -\begin{LTXexample}[width=0.3\textwidth] -\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert -\a 漢。\inhibitglue 漢 -\end{LTXexample} %<*en> -Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined -as follows: -\begin{enumerate} -\item As the case of ``ヒ'', 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'', according to the JFM 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} +\item ``\dagger'': assignments are always global. % %<*ja> -ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる. -\begin{enumerate} -\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる. -\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される. -\item この場合,置換前の横組用句点のグリフによって文字クラスを判定する. -\item 結果として,上の出力例中の句点の文字クラスは2000となる. -\end{enumerate} +\item ``\dagger'':指定は常にグローバルになる. % +\end{itemize} +\begin{cslist}[style=standard] +\item[\DParam{jcharwidowpenalty}\,=$^\ast$] [\cs{jcharwidowpenalty}]\ -%\paragraph{仮想的な文字} -%\paragraph{Imaginary characters} %<*en> -As described before, you can specify several \emph{imaginary characters} in -\texttt{chars} field. The most of these characters are regarded as the -characters of class 0 in \pTeX. -As a result, \LuaTeX-ja can control typesetting finer than \pTeX. -The following is the list of imaginary characters: +Penalty value for suppressing orphans. This penalty is inserted just + after the last \textbf{JAchar} which is not regarded as a + (Japanese) punctuation mark. % %<*ja> -上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も -指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字 -クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か -い組版調整ができるようになっている.以下でその一覧を述べる: +パラグラフの最後の字が孤立して改行されるのを防ぐためのペナルティの値. +このペナルティは(日本語の)句読点として扱われない最後の\textbf{JAchar}の直後に +挿入される. % -\begin{cslist} -%%\item['diffmet'] -%%Used at a boundary between two \textbf{JAchar}s whose JFM or size is different. -%%JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる. - -\item['boxbdd'] -%The beginning/ending of a hbox, and the beginning of a noindented (i.e., began by \cs{noindent}) paragraph. -%hboxの先頭と末尾,及びインデントされていない(\cs{noindent} で開始された)段落の先頭を表す. - -\item['parbdd'] -%The beginning of an (indented) paragraph. -%通常の(\cs{noindent} で開始されていない)段落の先頭. - -\item['jcharbdd'] -%A boundary between \textbf{JAchar} and anything else (such as \textbf{ALchar}, kern, glue,\,\ldots). -%\textbf{JAchar}と「その他のもの」(欧文文字,glue,kern等)との境界. +\item[\DParam{kcatcode}\,=\{,\}$^\ast$]\ -\item[$-1$] -%The left/right boundary of an inline math formula. -%行中数式と地の文との境界. -\end{cslist} +%<*en> +An additional attributes which each character whose character code is has. +At version~20120506.0 or later, the lowermost bit of indicates + whether the character is considered as a punctuation mark + (see the description of \Param{jcharwidowpenalty} above). +% +%<*ja> +文字コードがの文字が持つ付加的な属性値. +バージョン20120506.0以降では,の最下位ビットが,その文字が句読点と +みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照). +% -%\paragraph{Porting JFM from \pTeX} -%\paragraph{\pTeX 用和文用TFMの移植} +\item[\DParam{prebreakpenalty}\,=\{,\}$^\ast$] [\cs{prebreakpenalty}]\ -% ToDo: English version. +%<*ja> +文字コードの\textbf{JAchar}が行頭にくることを抑止するために, + この文字の前に挿入/追加されるペナルティの量を指定する. -%<*en> -See Japanese version of this manual. -% +例えば閉じ括弧「〗」は絶対に行頭にきてはならないので, +\begin{lstlisting} +\ltjsetparameter{prebreakpenalty={`〙,10000}} +\end{lstlisting} +と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい + うわけではないができれば行頭にはきて欲しくない場合に,0と + 10000の間の値を指定するのも有用であろう. -%<*ja> -以下に,\pTeX 用に作られた和文用TFMを\LuaTeX-ja用に移植する場合の注意点を挙げておく. -\begin{itemize} -\item 実際に出力される和文フォントのサイズがdesign sizeとなる. -このため,例えば$1\,\textrm{zw}$がdesign sizeの0.962216倍であるJISフォン - トメトリック等を移植する場合は,次のようにするべきである: +\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において, \begin{itemize} -\item JFM中の全ての数値を$1/0.962216$倍しておく. -\item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする. - \LaTeX でのフォント宣言なら,例えば次のように: +\item 一つの文字に対して,pre, postどちらか一つしか指定することができない% + \footnote{後から指定した方で上書きされる.} +\item pre, post合わせて256文字分の情報を格納することしかできない +\end{itemize} +という制限があったが,\LuaTeX-jaではこれらの制限は解消されている. +% +%<*en> +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{lstlisting} -\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{} +\ltjsetparameter{prebreakpenalty={`〙,10000}} \end{lstlisting} -\end{itemize} -\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする - (JFM中に単に書かなければよい). -\item \texttt{'boxbdd'}については,それのみで一つの文字クラスを形成し,その - 文字クラスに関してはグルー/カーンの設定はしない. - -これは,\pTeX では, - hboxの先頭・末尾とインデントされていない(\cs{noindent} で開始さ - れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである. -\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である. - -ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので, - 段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに - は,段落の最初に手動で \cs{inhibitglue} を追加するか,あるいは - \ \cs{everypar} のハックを行い,それを自動化させるしかなかった. - -一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ -うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに -\texttt{'parbdd'}を入れれば全角下がりとなる. +by default. -\begin{LTXexample}[width=0.4\textwidth] -\jfont\g=KozMinPr6N-Regular:jfm=test \g -\parindent1\zw\noindent{}◆◆◆◆◆ -\par 「◆◆←二分下がり -\par 【◆◆←全角下がり -\par 〔◆◆←全角二分下がり -\end{LTXexample} +\pTeX\ has following restrictions on \cs{prebreakpenalty} and \cs{postbreakpenalty}, +but they don't exist in \LuaTeX-ja: +\begin{itemize} + \item Both \cs{prebreakpenalty} and \cs{postbreakpenalty} cannot be set +for the same character. + \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters. \end{itemize} +% -但し,\cs{everypar} を利用している場合にはこの仕組みは正しく動かない. -そのような例としては箇条書き中の \cs{item} で始まる段落があり,\Pkg{ltjsclasses}では -人工的に「\texttt{'parbdd'}の意味を持つ」whatsitノードを作ることによって対処している% -\footnote{\texttt{ltjsclasses.dtx} を参照されたい. -JFM側で一部の対処ができることにより,\Pkg{jsclasses}のようにif文の判定はしていない.}. +\item[\DParam{postbreakpenalty}\,=\{,\}$^\ast$] + [\cs{postbreakpenalty}]\ + +%<*ja> +文字コードの\textbf{JAchar}が行末にくることを抑止するために, + この文字の後に挿入/追加されるペナルティの量を指定する. % +%<*en> +Set a penalty which is inserted automatically after the character , +to prevent a line ends with this character. +% +\item[\DParam{jatextfont}\,=\{,\}$^\ast$] +%[\cs{textfont} in \TeX] +%[\TeX の \cs{textfont}] +\item[\DParam{jascriptfont}\,=\{,\}$^\ast$] +%[\cs{scriptfont} in \TeX] +%[\TeX の \cs{scriptfont}] +\item[\DParam{jascriptscriptfont}\,=\{,\}$^\ast$] +%[\cs{scriptscriptfont} in \TeX] +%[\TeX の \cs{scriptscriptfont}] +\item[\DParam{yjabaselineshift}\,=]\ +\item[\DParam{yalbaselineshift}\,=] [\cs{ybaselineshift}] +\item[\DParam{tjabaselineshift}\,=]\ +\item[\DParam{talbaselineshift}\,=] [\cs{tbaselineshift}] -%\subsection{Math font family} -%\subsection{数式フォントファミリ} -\label{ssec-math} +\item[\DParam{jaxspmode}\,=\{,\}$^\ast$]\ %<*en> -\TeX\ handles fonts in math formulas by 16~font families\footnote{Omega, -Aleph, \LuaTeX~and $\varepsilon$-\kern-.125em(u)\pTeX\ can handles 256~families, but -an external package is needed to support this in plain \TeX\ and -\LaTeX.}, and each family has three fonts: -\cs{textfont}, \cs{scriptfont} and \cs{scriptscriptfont}. +Set whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is . +The followings are allowed for : % %<*ja> -\TeX\ は数式フォントを16のファミリ\footnote{Omega, Aleph, \LuaTeX,そして - $\varepsilon$-\kern-.125em(u)\pTeX\ では256の数式ファミリを扱うことができるが, - これをサポートするためにplain \TeX と\LaTeX では外部パッケージを読み込む必要が - ある.}で管理し,それぞれのファミリは3つのフォントを持っている: -\cs{textfont}, \cs{scriptfont} そして \cs{scriptscriptfont} である. +文字コードがの\textbf{JAchar}の前/後ろに\Param{xkanjiskip}の +挿入を許すかどうかの設定. +以下のが許される: % - +\begin{description} +%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. +%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. +%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. +%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. +%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. +%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. +%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both before the character and after the character. This is the default value. +%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. +\end{description} %<*en> -\LuaTeX-ja's handling of Japanese fonts in math formulas is similar; -\autoref{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. +This parameter is similar to the \cs{inhibitxspcode} primitive of \pTeX, but not compatible with \cs{inhibitxspcode}. % %<*ja> -\LuaTeX-jaの数式中での和文フォントの扱いも同様である. -\autoref{tab-math}は数式フォントファミリに対する \TeX のプリミティブと対応する -ものを示している.\cs{fam} と \cs{jfam} の値の間には関係はなく, -適切な設定の下では \cs{fam} と \cs{jfam} の両方に同じ値を設定することができる. -\Param{jatextfont} 他の第2引数は,\cs{jfont} で定義された -\emph{横組用}和文フォントである.\cs{tfont} で定義された -\emph{縦組用}和文フォントを指定することは想定していない. +このパラメータは\pTeX の \cs{inhibitxspcode} プリミティブと似ているが, +互換性はない. % - -\begin{table}[!tb] -%\caption{Commands for Japanese math fonts} -%\caption{和文数式フォントに対する命令} -\label{tab-math} -%\medskip -\centering -\def\{{\char`\{}\def\}{\char`\}}\small -\begin{tabular}{ll} -\toprule -%\bf Japanese fonts&\bf alphabetic fonts\\ -%\bf 和文フォント&\bf 欧文フォント\\ -\midrule -\cs{jfam}${}\in [0,256)$&\cs{fam}\\ -\tt\Param{jatextfont}\,=\{,\}&\tt\cs{textfont}=\\ -\tt\Param{jascriptfont}\,=\{,\}&\tt\cs{scriptfont}=\\ -\tt\Param{jascriptscriptfont}\,=\{,\}&\tt\cs{scriptscriptfont}=\\ -\bottomrule -\end{tabular} -\end{table} - -%\subsection{Callbacks} -%\subsection{コールバック} +\item[\DParam{alxspmode}\,=\{,\}$^\ast$] [\cs{xspcode}]\ %<*en> -\LuaTeX-ja also has several callbacks. These callbacks can -be accessed via \verb+luatexbase.add_to_callback+ function and so on, as other callbacks. +Set whether inserting \Param{xkanjiskip} is allowed before/after a + \textbf{ALchar} whose character code is . + The followings are allowed for : % %<*ja> -\LuaTeX 自体のものに加えて,\LuaTeX-jaもコールバックを持っている. -これらのコールバックには,他のコールバックと同様に \verb+luatexbase.add_to_callback+ -関数などを用いることでアクセスすることができる. +文字コードがの\textbf{ALchar}の前/後ろに\Param{xkanjiskip}の +挿入を許すかどうかの設定. +以下のが許される: % -\begin{description}[font=\bfseries, style=nextline] -%\item[\texttt{luatexja.load\_jfm} callback] -%\item[\texttt{luatexja.load\_jfm}コールバック] +\begin{description} +%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. +%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. +%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. +%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. +%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. +%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. +%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the character and after the character. This is the default value. +%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. +\end{description} %<*en> -With this callback you can overwrite JFMs. -This callback is called when a new JFM is loaded. +Note that parameters \Param{jaxspmode} and \Param{alxspmode} share a common table, hence these two parameters are synonyms of each other. % %<*ja> -このコールバックを用いることでJFMを上書きすることができる. -このコールバックは新しいJFMが読み込まれるときに呼び出される. +\Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため, +これら2つのパラメータは互いの別名となっていることに注意する. % -\begin{lstlisting}[numbers=left] -function (
jfm_info, jfm_name) - return
new_jfm_info -end -\end{lstlisting} +\item[\DParam{autospacing}\,=] [\cs{autospacing}] +\item[\DParam{autoxspacing}\,=] [\cs{autoxspacing}] +\item[\DParam{kanjiskip}\,=$^\ast$] [\cs{kanjiskip}]\ +%<*ja> +デフォルトで2つの\textbf{JAchar}の間に挿入されるグルーである. +通常では,\pTeX と同じようにフォントサイズに比例して変わることはない. +しかし,自然長が \cs{maxdimen} の場合は,例外的に和文フォントのJFM側で指定されている +値を採用(こちらはフォントサイズに比例)することになっている. +% %<*en> -The argument \verb+jfm_info+ contains a table similar to the table in a JFM file, except -this argument has \texttt{chars} field which contains character codes - whose character class is not~0. +The default glue which inserted between two \textbf{JAchar}s. +Changing current Japanese font does not alter this parameter, as \pTeX. + +If the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses +the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec:jfm-str}). % + +\item[\DParam{xkanjiskip}\,=$^\ast$] [\cs{xkanjiskip}]\ + %<*ja> -引数 \verb+jfm_info+ はJFMファイルのテーブルと似たものが格納されるが, -クラス0を除いた文字のコードを含んだ\texttt{chars}フィールドを持つ点が異なる. +デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルーである. +\Param{kanjiskip}と同じように,通常ではフォントサイズに比例して変わることはないが, +自然長が \cs{maxdimen} の場合が例外である. % +%<*en> +The default glue which inserted between a \textbf{JAchar} and an + \textbf{ALchar}. +Changing current font does not alter this parameter, as \pTeX. + +As \Param{kanjiskip}, if the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses +the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec:jfm-str}). +% + + +\item[\DParam{differentjfm}\,=$^\dagger$]\ %<*en> -An example of this callback is the \texttt{ltjarticle} class, with - forcefully assigning character class~0 to \texttt{'parbdd'} - in the JFM \texttt{jfm-min.lua}. +Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different. +The allowed arguments are the followings: % %<*ja> -このコールバックの使用例は\texttt{ltjarticle}クラスにあり, -\texttt{jfm-min.lua}中の\texttt{'parbdd'}を強制的にクラス0に割り当てている. +JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグルー/カーンをどのように +入れるかを指定する. +許される値は以下の通り: +% +\begin{quote} +\texttt{average}, +\texttt{both}, +\texttt{large}, +\texttt{small}, +\texttt{pleft}, +\texttt{pright}, +\texttt{paverage} +\end{quote} +%<*en> +The default value is \texttt{paverage}. \dots +% +%<*ja> +デフォルト値は \texttt{paverage} である. +各々の値による差異の詳細は\ref{ssec:cluster-wa}節の「『右空白』の算出」を参照してほしい. % -%\item[\texttt{luatexja.define\_jfont} callback] -%\item[\texttt{luatexja.define\_jfont}コールバック] +\item[\DParam{jacharrange}\,=] +\item[\DParam{kansujichar}\,=\{, \}$^\ast$] [\cs{kansujichar}] + +\item[\DParam{direction}\,=\ \hbox{\rm (always local)}]\ + %<*en> -This callback and the next callback form a pair, and you can assign characters - which do not have fixed code points in Unicode to non-zero character classes. -This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded. +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, +the behavior of this assignment is undefined. % %<*ja> -このコールバックと次のコールバックは組をなしており,Unicode中に固定された文字コード -番号を持たない文字を非零の文字クラスに割り当てることができる. -このコールバックは新しい和文フォントが読み込まれたときに呼び出される. +組方向を変更する \cs{yoko}~(if $\hbox{}=4$), \cs{tate}~(if $\hbox{}=3$), +\cs{dtou}~(if $\hbox{}=1$), \cs{utod}~(if $\hbox{}=11$) と同じ役割を持つ. +利用可能な状況もこれら4命令と同一である.引数が4,~3, 1,~11のいずれでも無いときの +動作は未定義である. % -\begin{lstlisting}[numbers=left] -function (
jfont_info, font_number) - return
new_jfont_info -end -\end{lstlisting} -%<*en> -\verb+jfont_info+ has the following fields, -\emph{which may not overwritten by a user}: -\begin{description} -\item[\texttt{size}] -The font size specified at \cs{jfont} in scaled points ($1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$). -\item[\texttt{zw}, \texttt{zh}, \texttt{kanjiskip}, \texttt{xkanjiskip}] -These are scaled value of those specified by the JFM, by the font size. -\item[\texttt{jfm}] -The internal number of the JFM. -\item[\texttt{var}] -The value of \texttt{jfmvar}~key, which is specified at \cs{jfont}. -The default value is the empty string. -\item[\texttt{chars}] -The mapping table from character codes to its character classes.\\ -The specification \texttt{[i].chars=\{, ...\}} in the JFM will be stored in this - field as \texttt{chars=\{[]=\,$i$, ...\}}. -\item[\texttt{char\_type}] -For $i\in\omega$, \texttt{char\_type[$i$]} is information of characters whose class is - $i$, and has the following fields: -\begin{itemize} - \item \texttt{width},~\texttt{height}, \texttt{depth}, - \texttt{italic}, \texttt{down},~\texttt{left}\ are just - scaled value of those specified by the JFM, by the font size. - \item \texttt{align} is a number which is determined from \texttt{align}~field in the JFM: -\[ - \begin{cases} - 0&\text{\texttt{'left'} (default)}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'} - \end{cases} -\] -\item For $j\in \omega$, \texttt{[$j$]} stores a kern or a glue which will be inserted -between character class~$i$ and class~$j$. +\end{cslist} -If a kern will be inserted, the value of this field is \texttt{[$j$]=\{false, , \}}, -where is a node\footnote{% - This version of \LuaTeX-ja uses ``direct access - model'' for accessing nodes, if possible. }. -If a glue will be inserted, we have \texttt{[$j$]=\{false, , , \}}, -where is also a node, and $\text{}=\textit{from\_jfm}+\text{}$. -\end{itemize} -\end{description} + +\subsection{\cs{ltjgetparameter}} +\label{ssec:getpar} +%<*en> +\cs{ltjgetparameter} is a control sequence for acquiring parameters. It +always takes a parameter name as first argument. % %<*ja> -\verb+jfont_info+ は最低限以下のフィールドを持つが,これらを書き換えてはならない: -\begin{cslist} -\item[size] -実際に使われるフォントサイズ(sp単位).$1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$. -\item[zw\textrm{, }zh\textrm{, }kanjiskip\textrm{, }xkanjiskip] -JFMファイルで指定されているそれぞれの値をフォントサイズに合わせてスケーリングしたものを -sp単位で格納している. -\item[jfm] -利用されているJFMを識別するための番号. -\item[var] -\cs{jfont},~\cs{tfont} で指定された \texttt{jfmvar} キーの値(未指定のときは空文字列). -\item[chars] -文字コードから文字クラスへの対応が記述されたテーブル.\\ -JFM内の \texttt{[i].chars=\{, ...\}} という指定は\ -\texttt{chars=\{[]=\,$i$, ...\}} という形式に変換されている. -\item[char\_type] -$i\in\omega$に対して,\texttt{char\_type[$i$]} は文字クラス$i$の文字の寸法を格納しており, -以下のフィールドを持つ. -\begin{itemize} - \item \texttt{width},~\texttt{height}, \texttt{depth}, - \texttt{italic}, \texttt{down},~\texttt{left}\ は -JFMで指定されているそれぞれの値をスケーリングしたものである. - \item \texttt{align} はJFMで指定されている値によって, -\[ - \begin{cases} - 0&\text{\texttt{'left'}や省略時}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'} - \end{cases} -\] -のいずれかの値をとる. -\item $j\in \omega$に対して,\texttt{[$j$]} は文字クラス$i$の文字と$j$の文字の間に挿入されるkern - やglueを格納している. -間に入るものがkernであれば,このフィールドの値は\ -\texttt{[$j$]=\{false, , \}} である. -はkernを表すノードそのものである\footnote{% -本バージョンではノードのアクセス手法にdirect access - modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし - か見えないことに注意. -}. -glueであれば,\texttt{[$j$]=\{false, , , \}} である. -はglueの長さを表すノードそのものであり, - $\text{}=\textit{from\_jfm}+\text{}$である. -\end{itemize} -\item[ascent\textrm{, }descent] -…… -\item[chars\_cbcache] -…… -\end{cslist} +\cs{ltjgetparameter} はパラメータの値を取得するための命令であり, +常にパラメータの名前を第一引数にとる. % +\begin{LTXexample} +\ltjgetparameter{differentjfm}, +\ltjgetparameter{autospacing}, +\ltjgetparameter{kanjiskip}, +\ltjgetparameter{prebreakpenalty}{`)}. +\end{LTXexample} %<*en> -The returned table \verb+new_jfont_info+ also should include these fields, but -you are free to add more fields (to use them in the \texttt{luatexja.find\_char\_class} callback). -The \verb+font_number+ is a font number. +\emph{The return value of\/ \cs{ltjgetparameter} is +always a string}, which is outputted by \texttt{tex.write()}. +Hence any character other than space~``\texttt{\char32}''~(\texttt{U+0020}) has the category code +12~(other), while the space has 10~(space). % %<*ja> -戻り値の \verb+new_jfont_info+ テーブルも上に述べたフィールドをそのまま含まなければならないが, -それ以外にユーザが勝手にフィールドを付け加えることは自由である. -\verb+font_number+ はフォント番号である. +\emph{\cs{ltjgetparameter} の戻り値は常に文字列である.} +これは\texttt{tex.write()}によって出力しているためで,空白「\texttt{\char32}」 +(\texttt{U+0020})を除いた文字のカテゴリーコードは全て12~(other)となる. +一方,空白のカテゴリーコードは10~(space)である. % +\begin{itemize} +\item %<*en> -A good example of this and the next callbacks is the \Pkg{luatexja-otf} - package, supporting \verb+"AJ1-xxx"+ form for Adobe-Japan1 - CID characters in a JFM. This callback doesn't replace any - code of \LuaTeX-ja. +If first argument is one of the +following, no additional argument is needed. % %<*ja> -これと次のコールバックの良い使用例は\Pkg{luatexja-otf}パッケージであり, -JFM中でAdobe-Japan1 CIDの文字を \verb+"AJ1-xxx"+ の形で指定するために -用いられている. +第1引数が次のいずれかの場合には,追加の引数は必要ない. % - -%\item[\texttt{luatexja.find\_char\_class} callback] -%\item[\texttt{luatexja.find\_char\_class}コールバック] +\begin{quote} +\sffamily +jcharwidowpenalty, yjabaselineshift, yalbaselineshift, autospacing, autoxspacing,\\ +kanjiskip, xkanjiskip, differentjfm, direction +\end{quote} %<*en> -This callback is called just when \LuaTeX-ja is trying to determine which - character class a character \verb+chr_code+ belongs. -A function used in this callback should be in the following form: +Note that \verb+\ltjgetparameter{autospacing}+~and~\verb+\ltjgetparameter{autoxspacing}+ +returns 1 or 0, not +\texttt{true}~nor~\texttt{false}. % %<*ja> -このコールバックは\LuaTeX-jaが \verb+chr_code+ の文字がどの文字クラスに -属するかを決定しようとする際に呼び出される. -このコールバックで呼び出される関数は次の形をしていなければならない: +\verb+\ltjgetparameter{autospacing}+ と \verb+\ltjgetparameter{autoxspacing}+ は, +\texttt{true}や\texttt{false}を返すの\emph{ではなく}, +1か0のいずれかを返すことに注意, % -\begin{lstlisting}[numbers=left] -function ( char_class,
jfont_info, chr_code) - if char_class~=0 then return char_class - else - .... - return ( new_char_class or 0) - end -end -\end{lstlisting} +\item %<*en> -The argument \verb+char_class+ is the result of \LuaTeX-ja's default - routine or previous function calls in this callback, hence - this argument may not be 0. Moreover, the returned - \verb+new_char_class+ should be as same as \verb+char_class+ when \verb+char_class+ - is not~0, otherwise you will overwrite the \LuaTeX-ja's - default routine. +If first argument is one of the +following, an additional argument---a character code, for example---is needed. % %<*ja> -引数 \verb+char_class+ は\LuaTeX-jaのデフォルトルーチンか,このコールバックの -直前の関数呼び出しの結果を含んでおり,したがってこの値は0ではないかもしれない. -さらに,戻り値の \verb+new_char_class+ は \verb+char_class+ が非零のときには -\verb+char_class+ の値と同じであるべきで,そうでないときは\LuaTeX-jaの -デフォルトルーチンを書き換えることになる. +第1引数が次のいずれかの場合には,さらに文字コードを第2引数としてとる. % - -%\item[\texttt{luatexja.set\_width} callback] -%\item[\texttt{luatexja.set\_width}コールバック] +\begin{quote} +\sffamily +kcatcode, prebreakpenalty, postbreakpenalty, jaxspmode, alxspmode +\end{quote} %<*en> -This callback is called when \LuaTeX-ja is trying to encapsule a - \textbf{JAchar} \textit{glyph\_node}, to adjust its - dimension and position. +\verb+\ltjgetparameter{jaxspmode}{...}+~and~\verb+\ltjgetparameter{alxspmode}{...}+ +returns 0,~1, 2,~or~3, instead of \texttt{preonly} etc. % %<*ja> -このコールバックは\LuaTeX-jaが\textbf{JAchar}の寸法と位置を調節するために -その\textit{glyph\_node}をカプセル化しようとする際に呼び出される. +\verb+\ltjgetparameter{jaxspmode}{...}+ や \verb+\ltjgetparameter{alxspmode}{...}+\ +は,\texttt{preonly} などといった文字列ではなく,0から3までの値を返す. % -\begin{lstlisting}[numbers=left] -function (
shift_info,
jfont_info,
char_type) - return
new_shift_info -end -\end{lstlisting} +\item %<*en> -The argument \verb+shift_info+ and the returned \verb+new_shift_info+ have -\texttt{down} and \texttt{left} fields, which are the amount of shifting - down/left the character in a scaled point. +\verb+\ltjgetparameter{jacharrange}{+\verb+}+ returns \texttt{0} +if ``characters which belong to the character range~ are \textbf{JAchar}'', +\texttt{1} if ``\dots~are \textbf{ALchar}''. +Although there is no character range~$-1$, specifying $-1$ to does not cause an + error (returns 1). % %<*ja> -引数 \verb+shift_info+ と戻り値の \verb+new_shift_info+ は -\texttt{down}と\texttt{left}のフィールドを持ち,これらの値は -文字の下/左へのシフト量(sp単位)である. +\verb+\ltjgetparameter{jacharrange}{+\verb+}+ は,が\textbf{JAchar}達の +範囲ならば0を,そうでなければ1を返す.「$-1$番の文字範囲」は存在しないが,に$-1$を +指定してもエラーは発生しない(1を返す). % +\item %<*en> -A good example is \Pkg{test/valign.lua}. -After loading this file, the vertical position of glyphs is automatically -adjusted; the ratio $(\hbox{height}:\hbox{depth})$ of glyphs is adjusted -to be that of letters in the character class~0. For example, suppose that -\begin{itemize} -\item The setting of the JFM: $(\hbox{height})=88x$, $(\hbox{depth})=12x$ - (the standard values of Japanese OpenType fonts); -\item The value of the real font: $(\hbox{height})=28y$, $(\hbox{depth})=5y$ - (the standard values of Japanese TrueType fonts). -\end{itemize} -Then, the position of glyphs is shifted up by +For an integer~ between 0~and~9, + \verb+\ltjgetparameter{kansujichar}{+\verb+}+ returns the character code +of the result of \cs{kansuji}. % %<*ja> -良い例が\Pkg{test/valign.lua}である.このファイルが読み込まれた状態では, - JFM内で規定された文字クラス0の文字における$(\hbox{高 - さ}):(\hbox{深さ})$の比になるように,実際のフォントの出力上 - 下位置が自動調整される.例えば, -\begin{itemize} -\item JFM側の設定:$(\hbox{高さ})=88x$, $(\hbox{深さ})=12x$% -(和文OpenTypeフォントの標準値) -\item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値) -\end{itemize} -となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にずらされることとなる: +0--9の数に対して, +\verb+\ltjgetparameter{kansujichar}{+\verb+}+ は,\cs{kansuji}で出力され + る文字の文字コードを返す. % -\[ - \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y. -\] -\end{description} - +\item +%<*en> +\verb+\ltjgetparameter{adjustdir}+ returns a integer which represents +the direction of the surrounding vertical list. +As \Param{direction}, the return value 1 means \emph{down-to-up} direction, +3 means \emph{tate} direction (vertical typesetting), +and 4 means \emph{yoko} direction (horizontal typesetting). +% +%<*ja> +\verb+\ltjgetparameter{adjustdir}+ は,周囲のvboxの組方向(言い換えれば, +\cs{vadjust} で用いられる組方向)を表す数値を返す. +\Param{direction}と同様に,1は \cs{dtou} 方向を, +3は縦組みを,4は横組みを表す. +% -%\section{Parameters} -%\section{パラメータ} -\subsection{\cs{ltjsetparameter}} -\label{ssec-param} - +\item %<*en> -As described before, \cs{ltjsetparameter} and \cs{ltjgetparameter} are -commands for accessing most parameters of \LuaTeX-ja. One of the main -reason that \LuaTeX-ja didn't adopted the syntax similar to that of \pTeX\ -(\textit{e.g.},~\verb+\prebreakpenalty`)=10000+) -is the position of \verb+hpack_filter+ callback in the source -of \LuaTeX, see Section~\ref{sec-para}. +For an integer~ between 0~and~65535, +\verb+\ltjgetparameter{boxdim}{+\verb+}+ returns the direction of +\cs{box}. If this box register is void, the returned value is zero. % %<*ja> -先に述べたように,\LuaTeX-jaの内部パラメータにアクセスするには -\cs{ltjsetparameter}(または \cs{ltjglobalsetparameter})と \cs{ltjgetparameter} を用いる. -\LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を -採用しない理由の一つは,\LuaTeX のソースにおける \verb+hpack_filter+ -コールバックの位置にある.\ref{sec-para}章を参照. +0--65535の数に対して, +\verb+\ltjgetparameter{boxdim}{+\verb+}+ は,\cs{box}に +格納されているボックスの組方向を表す.もしこのレジスタが空の場合は,0が返される. % +\item %<*en> -\cs{ltjsetparameter} and \cs{ltjglobalsetparameter} are commands -for assigning parameters. These take one argument which is a -\texttt{=} list. -The difference between these two commands is the -scope of assignment; -\cs{ltjsetparameter} does a local assignment and -\cs{ltjglobalsetparameter} does a global one. -They also obey the value of \cs{globaldefs}, like other assignments. +The following parameter names \emph{cannot be specified} in \cs{ltjgetparameter}. % %<*ja> -\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} はパラメータを -指定するための命令で,\texttt{=}のリストを -引数としてとる.両者の違いはスコープであり, -\cs{ltjsetparameter} はローカルな設定を行うのに対し, -\cs{ltjglobalsetparameter} はグローバルな設定を行う. -また,他のパラメータ指定と同様に \cs{globaldefs} の値にも従う. +次のパラメータ名を \cs{ltjgetparameter} に指定することはできない. % +\begin{quote} +\sffamily +jatextfont, jascriptfont, jascriptscriptfont, jacharrange +\end{quote} +\item %<*en> -The following is the list of parameters which can be specified by the -\cs{ltjsetparameter} command. [\cs{cs}] indicates the counterpart -in \pTeX, and symbols beside each parameter has the following meaning: +\verb+\ltjgetparameter{chartorange}{+\verb+}+ returns +the range number which belongs to +(although there is no parameter named ``chartorange''). + +If is between 0 and 127, this does not belong to +any character range. In this case, + \verb+\ltjgetparameter{chartorange}{+\verb+}+ +returns $-1$. + +Hence, one can know whether is \textbf{JAchar} or not +by the following: % %<*ja> -以下は \cs{ltjsetparameter} に指定することができるパラメータの一覧である. -[\cs{cs}]は\pTeX における対応物を示す. -また,それぞれのパラメータの右上の記号には次の意味がある: +\verb+\ltjgetparameter{chartorange}{+\verb+}+ によって +の属する文字範囲の番号を知ることができる. + +に0--127の値を指定した場合(このとき,が属する +文字範囲は存在しない)は$-1$が返る. + +そのため,が\textbf{JAchar}か\textbf{ALchar}かは +次で知ることができる: % -\begin{itemize} +\begin{quote} +\ttfamily \verb+\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{+% + \verb+}}+\\\null\hfill\verb+% 0 if JAchar, 1 if ALchar+ +\end{quote} + %<*en> -\item ``$\ast$'' : values at the end of a paragraph or a hbox are -adopted in the whole paragraph or the whole hbox. +\item Because the returned value is string, the following conditionals do not work +if \Param{kanjiskip} (or~\Param{xkanjiskip}) has the stretch part or the shrink part. +\begin{lstlisting} +\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi +\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi +\end{lstlisting} +The correct way is using a temporary register. +\begin{lstlisting} +\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi +\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi +\end{lstlisting} % %<*ja> -\item ``$\ast$'':段落やhboxの終端での値がその段落/hbox全体で用いられる. +\item 返り値が文字列であることから,\Param{kanjiskip}や\Param{xkanjiskip}を直接 +\ \cs{ifdim} を使って比較することは望ましくない.伸び量や縮み量を持っている時には, +次はエラーを発生させる: +\begin{lstlisting} +\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi +\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi +\end{lstlisting} +レジスタに一旦代入するのが良い: +\begin{lstlisting} +\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi +\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi +\end{lstlisting} % + +\end{itemize} + + %<*en> -\item ``\dagger'': assignments are always global. +\subsection{Alternative Commands to \cs{ltjsetparameter}} +The basic method to set parameters of \LuaTeX-ja is to use +\cs{ltjsetparameter}~or~\cs{ltjglobalsetparameter}. +However, these commands are slow, because they parse a key-value list, +so several alternative commands are used in \LuaTeX-ja. +\emph{This subsection is not for general \LuaTeX-ja users.} + +\paragraph{Setting \Param{kanjiskip}~or~\Param{xkanjiskip}} +In \Pkg{ltjsclasses}, every size-changing command such as \cs{Large} +changes \cs{kanjiskip}~and~\cs{xkanjiskip}. +But a simple implementation, as the code below, is slow since +two key-value lists are parsed by \cs{ltjsetparameter}: +\begin{lstlisting} + \ltjsetparameter{kanjiskip=0\zw plus .1\zw minus .01\zw} + \@tempskipa=\ltjgetparameter{xkanjiskip} + \ifdim\@tempskipa>\z@ + \if@slide + \ltjsetparameter{xkanjiskip=0.1em} + \else + \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em} + \fi + \fi +\end{lstlisting} + +Hence, \LuaTeX-ja defines more primitive commands, namely \cs{ltj@setpar@global}, +\cs{ltjsetkanjiskip}, and~\cs{ltjsetxkanjiskip}. Here +\begin{quote} + \lstinline+\ltj@setpar@global\ltjsetkanjiskip 10pt+ +\end{quote} +and \lstinline+\ltjsetparameter{kanjiskip=10pt}+ has the same effect. +The actual code of \Pkg{ltjsclasses} is shown below: +\begin{lstlisting} + \ltj@setpar@global + \ltjsetkanjiskip{\z@ plus .1\zw minus .01\zw} + \@tempskipa=\ltjgetparameter{xkanjiskip} + \ifdim\@tempskipa>\z@ + \if@slide + \ltjsetxkanjiskip.1em + \else + \ltjsetxkanjiskip.25em plus .15em minus .06em + \fi + \fi +\end{lstlisting} + +Note that using \cs{ltjsetkanjiskip}~or~\cs{ltjsetxkanjiskip} alone, +that is, without executing \cs{ltj@setpar@global} in advance, is \emph{not} supported. % + %<*ja> -\item ``\dagger'':指定は常にグローバルになる. -% +\subsection{\cs{ltjsetparameter} の代替} +原則として各種内部パラメータの設定には \cs{ltjsetparameter} もしくは +\ \cs{ltjglobalsetparameter}\ を用いることになるが, +\cs{ltjsetparameter} の実行には時間がかかるという難点があり, +\LuaTeX-ja の内部ではより高速に実行できる別の形式を用いている. +\emph{本節は一般利用者むけの内容ではない.} + +\paragraph{\Param{kanjiskip}, \Param{xkanjiskip}の設定} +\pLaTeXe 新ドキュメントクラスでは, +\begin{lstlisting} +\def\@setfontsize#1#2#3{% + ... + \kanjiskip=0zw plus .1zw minus .01zw + \ifdim\xkanjiskip>\z@ + \if@slide \xkanjiskip=0.1em \else + \xkanjiskip=0.25em plus 0.15em minus 0.06em + \fi + \fi} +\end{lstlisting} +と,フォントサイズを変更するごとに \cs{kanjiskip}, \cs{xkanjiskip} を変更している. +この \cs{@setfontsize} は文書の中で多数回実行されるので. +\LuaTeX-ja 用に素直に書き換えた +\begin{lstlisting} + \ltjsetparameter{kanjiskip=0\zw plus .1\zw minus .01\zw} + \@tempskipa=\ltjgetparameter{xkanjiskip} + \ifdim\@tempskipa>\z@ + \if@slide + \ltjsetparameter{xkanjiskip=0.1em} + \else + \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em} + \fi + \fi +\end{lstlisting} +としたのではタイプセットが遅くなってしまう. +そこで,\cs{ltjsetparameter} の中で +\begin{itemize} +\item \cs{globaldefs} の値を読み取る \cs{ltj@setpar@global} +\item \Param{kanjiskip} の設定を行う \cs{ltjsetkanjiskip} +\item \Param{xkanjiskip} の設定を行う \cs{ltjsetxkanjiskip} \end{itemize} +を独立させ,\Pkg{ltjsclasses}では, +\begin{lstlisting} + \ltj@setpar@global + \ltjsetkanjiskip{\z@ plus .1\zw minus .01\zw} + \@tempskipa=\ltjgetparameter{xkanjiskip} + \ifdim\@tempskipa>\z@ + \if@slide + \ltjsetxkanjiskip.1em + \else + \ltjsetxkanjiskip.25em plus .15em minus .06em + \fi + \fi +\end{lstlisting} +としている. +\cs{ltj@setpar@global}を直前に実行せず,単独で +\cs{ltjsetkanjiskip}, \cs{ltjsetxkanjiskip}を実行することは想定されていないので注意. -\begin{cslist}[style=standard] -\item[\DParam{jcharwidowpenalty}\,=$^\ast$] [\cs{jcharwidowpenalty}]\ + + +\paragraph{ベースライン補正量の設定} +\pLaTeX の\Pkg{ascmac}パッケージでは,縦組の欧文ベースライン補正量の一時待避・復帰処理に +\ \cs{@saveybaselineshift}\ という寸法レジスタを用い +\begin{lstlisting} +\@savetbaselineshift\tbaselineshift\tbaselineshift\z@ +... +\tbaselineshift\@savetbaselineshift +\end{lstlisting} +という処理を行っている. + +これを\LuaTeX-ja 用に \cs{ltjsetparameter} を使って書き直すと, +\begin{lstlisting} +\@savetbaselineshift\ltjgetparameter{talbaselineshift} +\ltjsetparameter{talbaselineshift=\z@} +... +\ltjsetparameter{talbaselineshift=\@savetbaselineshift} +\end{lstlisting} +となる. + +さて,縦組の欧文ベースライン補正量\Param{talbaselineshift}は, +実際には \cs{ltj@tablshift} という属性レジスタに格納されている +(\ref{sec-para}\nobreak 節参照).属性レジスタは長さではなく整数値を格納する\footnote{% + 従って,\texttt{\textbackslash @savetbaselineshift=\textbackslash ltj@tablshift}\ + のように記述することはできない.属性レジスタを \cs{tbaselineshift} という名称にしなかっ + たのはそのためである. +}ものであり,\cs{ltj@tablshift} は補正量を sp 単位で保持することから, +上記のコードと同じ内容をより速い以下のコードで実現することができる. +\begin{lstlisting} +\@savetbaselineshift\ltj@tablshift sp% +\ltj@tablshift\z@ +... +\ltj@tablshift\@savetbaselineshift +\end{lstlisting} +この手法は \Pkg{ascmac} パッケージの\LuaTeX-ja対応パッチ \Pkg{lltjp-tascmac.sty} で +実際に用いられている.\Pkg{lltjp-tascmac.sty} は自動的に読み込まれるので, +ユーザは何も気にせず普通に \Pkg{ascmac} パッケージを \cs{usepackage} で読みこめば良い. +% + + +%\section{Other Commands for plain \TeX\ and \LaTeXe} +%\section{plainでも\LaTeX でも利用可能なその他の命令} +%\subsection{Commands for compatibility with \pTeX} +%\subsection{\pTeX 互換用命令} %<*en> -Penalty value for suppressing orphans. This penalty is inserted just - after the last \textbf{JAchar} which is not regarded as a - (Japanese) punctuation mark. +The following commands are implemented for compatibility with \pTeX. +Note that the former five commands don't support JIS~X~0213, but only JIS~X~0208. +The last \cs{kansuji} converts an integer into its Chinese numerals. +% +%<*ja> +以下の命令は\pTeX との互換性のために実装されている.そのため,JIS~X~0213には対応せず, +\pTeX と同じようにJIS~X~0208の範囲しかサポートしていない. +% +\begin{center} +\cs{kuten}, \cs{jis}, \cs{euc}, \cs{sjis}, \cs{ucs}, \cs{kansuji} +\end{center} +%<*en> +These six commands takes an internal integer, and returns a \emph{string}. % %<*ja> -パラグラフの最後の字が孤立して改行されるのを防ぐためのペナルティの値. -このペナルティは(日本語の)句読点として扱われない最後の\textbf{JAchar}の直後に -挿入される. +これら6命令は内部整数を引数とするが,実行結果は\textbf{文字列}であることに注意. % - -\item[\DParam{kcatcode}\,=\{,\}$^\ast$]\ +\begin{LTXexample} +\newcount\hoge +\hoge="2423 %" +\the\hoge, \kansuji\hoge\\ +\jis\hoge, \char\jis\hoge\\ +\kansuji1701 +\end{LTXexample} %<*en> -An additional attributes which each character whose character code is has. -At the present version, the lowermost bit of indicates - whether the character is considered as a punctuation mark - (see the description of \Param{jcharwidowpenalty} above). +To change characters of Chinese numerals for each digit, set \Param{kansujichar} parameter: +\begin{LTXexample} +\ltjsetparameter{kansujichar={1,`壹}} +\ltjsetparameter{kansujichar={7,`漆}} +\ltjsetparameter{kansujichar={0,`零}} +\kansuji1701 +\end{LTXexample} % -%<*ja> -文字コードがの文字が持つ付加的な属性値. -現在のバージョンでは,の最下位ビットが,その文字が句読点と -みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照). -% - -\item[\DParam{prebreakpenalty}\,=\{,\}$^\ast$] [\cs{prebreakpenalty}]\ - -%<*ja> -文字コードの\textbf{JAchar}が行頭にくることを抑止するために, - この文字の前に挿入/追加されるペナルティの量を指定する. -例えば閉じ括弧「〗」は絶対に行頭にきてはならないので, -\begin{lstlisting} -\ltjsetparameter{prebreakpenalty={`〙,10000}} -\end{lstlisting} -と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい - うわけではないができれば行頭にはきて欲しくない場合に,0と - 10000の間の値を指定するのも有用であろう. -\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において, -\begin{itemize} -\item 一つの文字に対して,pre, postどちらか一つしか指定することができない% - \footnote{後から指定した方で上書きされる.} -\item pre, post合わせて256文字分の情報を格納することしかできない -\end{itemize} -という制限があったが,\LuaTeX-jaではこれらの制限は解消されている. -% +\subsection{\cs{inhibitglue}} %<*en> -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{lstlisting} -\ltjsetparameter{prebreakpenalty={`〙,10000}} -\end{lstlisting} -by default. - -\pTeX\ has following restrictions on \cs{prebreakpenalty} and \cs{postbreakpenalty}, -but they don't exist in \LuaTeX-ja: -\begin{itemize} - \item Both \cs{prebreakpenalty} and \cs{postbreakpenalty} cannot be set -for the same character. - \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters. -\end{itemize} +\cs{inhibitglue} suppresses the insertion of \textbf{JAglue}. +The following is an example, using a special JFM that there will be a glue between +the beginning of a box and ``あ'', and also between ``あ''~and~``ウ''. % - -\item[\DParam{postbreakpenalty}\,=\{,\}$^\ast$] - [\cs{postbreakpenalty}]\ - %<*ja> -文字コードの\textbf{JAchar}が行末にくることを抑止するために, - この文字の後に挿入/追加されるペナルティの量を指定する. +\cs{inhibitglue} は\textbf{JAglue}の挿入を抑制する. +以下は,ボックスの始めと「あ」の間,「あ」「ウ」の間にグルーが入る特別なJFMを用いた例で +ある. % -%<*en> -Set a penalty which is inserted automatically after the character , -to prevent a line ends with this character. -% -\item[\DParam{jatextfont}\,=\{,\}$^\ast$] -%[\cs{textfont} in \TeX] -%[\TeX の \cs{textfont}] -\item[\DParam{jascriptfont}\,=\{,\}$^\ast$] -%[\cs{scriptfont} in \TeX] -%[\TeX の \cs{scriptfont}] -\item[\DParam{jascriptscriptfont}\,=\{,\}$^\ast$] -%[\cs{scriptscriptfont} in \TeX] -%[\TeX の \cs{scriptscriptfont}] -\item[\DParam{yjabaselineshift}\,=]\ -\item[\DParam{yalbaselineshift}\,=] [\cs{ybaselineshift}] -\item[\DParam{tjabaselineshift}\,=]\ -\item[\DParam{talbaselineshift}\,=] [\cs{tbaselineshift}] - -\item[\DParam{jaxspmode}\,=\{,\}$^\ast$]\ +\begin{LTXexample}[width=0.4\textwidth] +\jfont\g=file:KozMinPr6N-Regular.otf:jfm=test \g +\fbox{\hbox{あウあ\inhibitglue ウ}} +\inhibitglue\par\noindent あ1 +\par\inhibitglue\noindent あ2 +\par\noindent\inhibitglue あ3 +\par\hrule\noindent あoff\inhibitglue ice +\end{LTXexample} %<*en> -Set whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is . -The followings are allowed for : +With the help of this example, we remark the specification of \cs{inhibitglue}: % %<*ja> -文字コードがの\textbf{JAchar}の前/後ろに\Param{xkanjiskip}の -挿入を許すかどうかの設定. -以下のが許される: +この例を援用して,\cs{inhibitglue} の仕様について述べる. % -\begin{description} -%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. -%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. -%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. -%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. -%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. -%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. -%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both before the character and after the character. This is the default value. -%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. -\end{description} +\begin{itemize} %<*en> -This parameter is similar to the \cs{inhibitxspcode} primitive of \pTeX, but not compatible with \cs{inhibitxspcode}. +\item The call of \cs{inhibitglue} in the (internal) vertical mode is + simply ignored. % %<*ja> -このパラメータは\pTeX の \cs{inhibitxspcode} プリミティブと似ているが, -互換性はない. +\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{% + この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである. +}. +4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり, +\cs{noindent} の時点で水平モードになるからである. % -\item[\DParam{alxspmode}\,=\{,\}$^\ast$] [\cs{xspcode}]\ %<*en> -Set whether inserting \Param{xkanjiskip} is allowed before/after a - \textbf{ALchar} whose character code is . - The followings are allowed for : +\item The call of \cs{inhibitglue} in the (restricted) horizontal + mode is only effective on the spot; does not get over boundary of + paragraphs. Moreover, \cs{inhibitglue} cancels ligatures and + kernings, as shown in the last line of above example. % %<*ja> -文字コードがの\textbf{ALchar}の前/後ろに\Param{xkanjiskip}の -挿入を許すかどうかの設定. -以下のが許される: +\item \cs{inhibitglue} の(制限された)水平モード中での呼び出しはその場でのみ + 有効であり,段落の境界を乗り越えない. + さらに,\cs{inhibitglue} は上の例の最終行のように(欧文における)リガチャとカーニングを + 打ち消す.これは,\cs{inhibitglue} が内部的には「現在のリスト中にwhatsitノードを + 追加する」ことを行なっているからである. % -\begin{description} -%\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character. -%\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される. -%\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after. -%\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない. -%\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before. -%\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない. -%\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the character and after the character. This is the default value. -%\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である. -\end{description} + %<*en> -Note that parameters \Param{jaxspmode} and \Param{alxspmode} share a common table, hence these two parameters are synonyms of each other. +\item The call of \cs{inhibitglue} in math mode is just ignored. % %<*ja> -\Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため, -これら2つのパラメータは互いの別名となっていることに注意する. +\item \cs{inhibitglue} を数式モード中で呼び出した場合はただ無視される. % -\item[\DParam{autospacing}\,=] [\cs{autospacing}] -\item[\DParam{autoxspacing}\,=] [\cs{autoxspacing}] -\item[\DParam{kanjiskip}\,=$^\ast$] [\cs{kanjiskip}]\ - %<*ja> -デフォルトで2つの\textbf{JAchar}の間に挿入されるグルーである. -通常では,\pTeX と同じようにフォントサイズに比例して変わることはない. -しかし,自然長が \cs{maxdimen} の場合は,例外的に和文フォントのJFM側で指定されている -値を採用(こちらはフォントサイズに比例)することになっている. +\item \LaTeX で\LuaTeX-ja を使用する場合は, +\cs{inhibitglue} の代わりとして \verb+\<+ を使うことができる. +既に \verb+\<+ が定義されていた場合は,\LuaTeX-ja の読み込みで強制的に上書きされるので +注意すること. % -%<*en> -The default glue which inserted between two \textbf{JAchar}s. -Changing current Japanese font does not alter this parameter, as \pTeX. +\end{itemize} -If the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses -the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}). + +\subsection{\cs{ltjfakeboxbdd}, \cs{ltjfakeparbegin}} +%<*en> +Sometimes \texttt{'parbdd'}~and~\texttt{'boxbdd'} specifications~look like ``fail'', +especially in paragraphs inside list environments. +This is because \cs{everypar} inserts some nodes such as boxes and kerns, so +the ``first letter'' in a paragraph is in fact not the first letter. % +%<*ja> +リスト環境内での\cs{item}で始まる各項目などでは, +「段落最初の鍵括弧が余計に半角字下げされる」など, +JFMにある\texttt{'parbdd'}, \texttt{'boxbdd'}の指定が見かけ上破綻していることがある. -\item[\DParam{xkanjiskip}\,=$^\ast$] [\cs{xkanjiskip}]\ +これは\TeX が\cs{everypar}を用いて段落開始時に記号類や空白などを挿入してしまっているため, +段落最初の鍵括弧が実際には段落最初のノードではないことに起因する.以下に例を示した. +% +\begin{LTXexample}[width=0.3\textwidth] +\parindent1\zw +\noindent ああああああああ\par % for comparison +「ああああああ \par % normal paragraph +\everypar{\null} +「ああああああ \par % ??? +\end{LTXexample} +%<*en> +\cs{ltjfakeboxbdd}~and~\cs{ltjfakeparbegin} primitives resolve this situation. +\begin{itemize} + \item \cs{ltjfakeparbegin} creates a node which indicates + ``beginning of an indented paragraph'' to the insertion process of \textbf{JAglue}. + \item \cs{ltjfakeboxbdd} creates a node which indicates + ``beginning/ending of a box'' to the insertion process of \textbf{JAglue}. +\end{itemize} +As an example, the example above can be improved as follows: +% %<*ja> -デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルーである. -\Param{kanjiskip}と同じように,通常ではフォントサイズに比例して変わることはないが, -自然長が \cs{maxdimen} の場合が例外である. +\cs{ltjfakeboxbdd}, \cs{ltjfakeparbegin}はこの状況を改善する命令である. +実際には\cs{everypar}の末尾にこれらを追加するという使い方がほとんどになるだろう. +\begin{itemize} + \item \cs{ltjfakeparbegin}は,実行された箇所が「インデントあり段落の開始」であると\LuaTeX-jaの + 和文処理グルー挿入処理に認識させる.この命令の直前に\textbf{JAchar}があった場合, + この文字の後ろに入るグルー等の処理については未定義である + \footnote{% + この命令と同等の内容は,\cs{dirrctlua}の形で\Pkg{ltjsclasses}内で以前から使われていた. + 一般ユーザでも利用しやすくするため,バージョン20170505.0で新たに命令として定義した. + }. + \item \cs{ltjfakeboxbdd}は,実行された箇所が「ボックスの先頭と末尾」であると\LuaTeX-jaの + 和文処理グルー挿入処理に認識させる. +\end{itemize} +例えば,先ほどの例に対して適用すると,次のようになる. % -%<*en> -The default glue which inserted between a \textbf{JAchar} and an - \textbf{ALchar}. -Changing current font does not alter this parameter, as \pTeX. +\begin{LTXexample}[width=0.3\textwidth] +\parindent1\zw +\noindent ああああああああ\par % for comparison +「ああああああ \par % normal paragraph -As \Param{kanjiskip}, if the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses -the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}). -% +\everypar{\null\ltjfakeparbegin} +「ああああああ \par +\end{LTXexample} -\item[\DParam{differentjfm}\,=$^\dagger$]\ +\subsection{\cs{ltjdeclarealtfont}} +\label{ssec:altfont} +%<*en> +Using \cs{ltjdeclarealtfont}, one can ``compose'' more than one Japanese fonts. +This \cs{ltjdeclarealtfont} uses in the following form: +\begin{quote} +\ttfamily \textbackslash ltjdeclarealtfont\{\} +\end{quote} +where ~and~ are defined by \cs{jfont}. +Its meaning is +\begin{quote} +If the current Japanese font is , characters which belong to +is typeset by another Japanese font , instead of . +\end{quote} +Here is a comma-separated list of character codes, but also accepts negative integers: +$-n$~($n≥1$) means that all characters of character classes~$n$, with respect to JFM used +by . Note that characters which do not exist in are +ignored. -%<*en> -Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different. -The allowed arguments are the followings: -% -%<*ja> -JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグルー/カーンをどのように -入れるかを指定する. -許される値は以下の通り: -% +For example, if \cs{hoge} uses \texttt{jfm-ujis.lua}, the standard JFM of \LuaTeX-ja, +then +\begin{lstlisting} +\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} +\end{lstlisting} +does \begin{quote} -\texttt{average}, -\texttt{both}, -\texttt{large}, -\texttt{small}, -\texttt{pleft}, -\texttt{pright}, -\texttt{paverage} +If the current Japanese font is \cs{hoge}, \texttt{U+3000}--\texttt{U+30FF} +and characters in class~1 (ideographic opening brackets) +are typeset by \cs{piyo}. \end{quote} -%<*en> -The default value is \texttt{paverage}. \dots % %<*ja> -デフォルト値は \texttt{paverage} である. -各々の値による差異の詳細は\ref{ssec-cluster-wa}節の「『右空白』の算出」を参照してほしい. -% +\cs{jfont} の書式を見ればわかるように,基本的には\LuaTeX-jaにおける1つの和文フォントに +使用出来る「実際のフォント」は1つである. +しかし,\cs{ltjdeclarealtfont} を用いると,この原則から外れることができる. -\item[\DParam{jacharrange}\,=] -\item[\DParam{kansujichar}\,=\{, \}$^\ast$] [\cs{kansujichar}] +\cs{ltjdeclarealtfont} は以下の書式で使用する: +\begin{quote} +\ttfamily \textbackslash ltjdeclarealtfont\{\} +\end{quote} +これは「現在の和文フォント」がであるとき, +に属する文字はを用いて組版される,という意味である. +\begin{itemize} + \item , は +\cs{jfont} によって定義された和文フォントである. + \item は文字コードの範囲を表すコンマ区切りのリストであるが, + 例外として負数$-n$は「のJFMの文字クラス$n$に属する全ての文字」 + を意味する. -\item[\DParam{direction}\,=\ \hbox{\rm (always local)}]\ +中に中に実際には存在しない文字が指定された場合は, +その文字に対する設定は無視される. +\end{itemize} -%<*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, -the behavior of this assignment is undefined. -% -%<*ja> -組方向を変更する \cs{yoko}~(if $\hbox{}=4$), \cs{tate}~(if $\hbox{}=3$), -\cs{dtou}~(if $\hbox{}=1$), \cs{utod}~(if $\hbox{}=11$) と同じ役割を持つ. -利用可能な状況もこれら4命令と同一である.引数が4,~3, 1,~11のいずれでも無いときの -動作は未定義である. +例えば,\cs{hoge} のJFMが\LuaTeX-ja標準の +\ \texttt{jfm-ujis.lua} であった場合, +\begin{lstlisting} +\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} +\end{lstlisting} +は「\cs{hoge} を利用しているとき, +\texttt{U+3000}--\texttt{U+30FF}と +文字クラス1(開き括弧類)中の文字だけは \cs{piyo} を用いる」 +ことを設定する.\verb+{-1}-{-1}+ という変わった指定の仕方をしているのは, +普通に \texttt{-1} と指定したのでは正しく$-1$と読み取られないという +マクロの都合による. % -\end{cslist} +%<*ja> +\subsection{\cs{ltjalchar} と \cs{ltjjachar}} +文字コードが$\text{}~(\geq 128=\mathtt{0x80})$の文字を +\ \cs{char} プリミティブを使い \cs{char} として出力させると, +その文字の属する文字範囲(\ref{ssec:setrange}節参照)によって +\textbf{ALchar}か\textbf{JAchar}か,つまり欧文フォントで出力されるか和文フォントで出力され +るかが決まる. +文字範囲の設定を無視し,文字コードが$\text{}~(\geq 128=\mathtt{0x80})$の文字を強制的に +\textbf{ALchar}, \textbf{JAchar}で出力する命令がそれぞれ +\ \cs{ltjalchar},~\cs{ltjjachar} である.使用方法は \cs{char} と同じく +\ \cs{ltjalchar}, \cs{ltjjachar}とすればよい. +が127以下の場合は,\cs{ltjjachar} であっても\textbf{ALchar}として出力されること +に注意. + +以下は\ref{ssec:setrange}節に載せた例に,\cs{char} の動作を追加したものである. +\begin{LTXexample}[width=0.25\textwidth] +\gtfamily\large % default, ALchar, JAchar +¶, \char`¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar +α, \char`α, \ltjalchar`α, \ltjjachar`α % default: JAchar +\end{LTXexample} +% + +%\section{Commands for \LaTeXe} +%\section{\LaTeXe 用の命令} -\subsection{\cs{ltjgetparameter}} -\label{ssec-getpar} %<*en> -\cs{ltjgetparameter} is a control sequence for acquiring parameters. It -always takes a parameter name as first argument. +\subsection{Loading Japanese fonts in \LaTeXe} +\label{ssec:ltx-jfm} +From versoin~20190107, +\emph{\LuaTeX-ja does not load Japanese fonts for horizontal direction and + that for vertical direction at same time}, +to reduce the number of loaded fonts. +This will save time for typesetting and memory consumption of Lua side (\cite{tc18ltja}). + +\begin{itemize} + \item \cs{selectfont} loads (and chooses) only the Japanese font for current direction, + and does not load the Japanese font for other direction + (\LuaTeX-ja only detects its size and JFM, to calculate the amount of shifting the baseline). + + \item Direction changing commands (\cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod}) are patched to + include the following process: + \begin{quote} + If the Japanese font for new direction is not loaded, + \LuaTeX-ja loads it automatically. + \end{quote} + Original commands are saved as \cs{ltj@@orig@yoko} etc. + + \item Specifying Japanese font command which is + defined by \cs{jfont},~\cs{tfont}, or~\cs{DeclareFixedFont} directly + actually loads (and selects) the Japanese font. + For example, \textbf{JAchar}s in \cs{box0} will be typeset in \cs{HOGE}, + in the following code: +\begin{lstlisting} + % in horizontal direction (\yoko) + \DeclareFixedFont\HOGE{JT3}{gt}{m}{n}{12} % JT3: for vertical direction + \HOGE + \setbox0=\hbox{\tate あいう} +\end{lstlisting} + \end{itemize} % + %<*ja> -\cs{ltjgetparameter} はパラメータの値を取得するための命令であり, -常にパラメータの名前を第一引数にとる. +\subsection{\LaTeXe 下での和文フォントの読み込み} +\label{ssec:ltx-jfm} +バージョン20190107以降では,\LaTeXe の下で\LuaTeX-jaを使用した際に, +\emph{横組用和文フォントと縦組み用和文フォントを両方一度に読み込み・選択せずに, + 実際にそれぞれを使う組方向になったときに行う}という方針にした. +これは実際に読み込むフォント数を削減することで, +タイプセットにかかる時間と(主にLuaの)メモリ消費を削減するためである(\cite{tc18ltja}). + +\begin{itemize} + \item \cs{selectfont}は横組用・縦組用和文フォントのうち,現在の組方向で使う方を + 実際に読み込み(・選択し),そうでない方は「フォントサイズとJFMのみ\LuaTeX-jaが把握している状態」 + (以下,\emph{JFM把握状態})とする. + + \item 組方向変更命令\cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod}には + \begin{quote} + 新たな組方向での和文フォントが読み込まれていない(JFM把握状態)ならば, + 現在のエンコーディング・ファミリ・シリーズ・シェイプから改めて読み込む(または選択する) + \end{quote} + 処理が付け加えられている. + もとの「組方向を変更するだけ」の命令は\cs{ltj@@orig@yoko}のように\texttt{ltj@@orig@}が前についた + 命令に保存されている. + + \item \cs{jfont},~\cs{tfont},~\cs{DeclareFixedFont}で定義された和文フォントは + その時点で実際にフォントが読み込まれる.すなわち,以下のコードにおいて, + \cs{box0}中の\textbf{JAchar}は\cs{HOGE}でタイプセットされる. +\begin{lstlisting} + % in horizontal direction (\yoko) + \DeclareFixedFont\HOGE{JT3}{gt}{m}{n}{12} % JT3: for vertical direction + \HOGE + \setbox0=\hbox{\tate あいう} +\end{lstlisting} + \end{itemize} % -\begin{LTXexample} -\ltjgetparameter{differentjfm}, -\ltjgetparameter{autospacing}, -\ltjgetparameter{kanjiskip}, -\ltjgetparameter{prebreakpenalty}{`)}. -\end{LTXexample} + +%\subsection{Patch for NFSS2} +%\subsection{NFSS2へのパッチ} +\label{ssec:nfsspat} %<*en> -\emph{The return value of\/ \cs{ltjgetparameter} is -always a string}, which is outputted by \texttt{tex.write()}. -Hence any character other than space~``\texttt{\char32}''~(\texttt{U+0020}) has the category code -12~(other), while the space has 10~(space). +Japanese patch for NFSS2 in \LuaTeX-ja +is based on \texttt{plfonts.dtx} which plays the same role in \pLaTeXe. +We will describe +commands which are not described in Subsection~\ref{ssec:chgfnt}. % %<*ja> -\emph{\cs{ltjgetparameter} の戻り値は常に文字列である.} -これは\texttt{tex.write()}によって出力しているためで,空白「\texttt{\char32}」 -(\texttt{U+0020})を除いた文字のカテゴリーコードは全て12~(other)となる. -一方,空白のカテゴリーコードは10~(space)である. +\LuaTeX-jaのNFSS2への日本語パッチは +\pLaTeXe で同様の役割を果たす \texttt{plfonts.dtx} をベースに, +和文エンコーディングの管理等をLuaで書きなおしたものである. +ここでは\ref{ssec:chgfnt}節で述べていなかった命令について +記述しておく. % -\begin{itemize} -\item +\begin{cslist}% +\item[\normalfont\bfseries % +%追加の長さ変数達 +%additonal dimensions +] %<*en> -If first argument is one of the -following, no additional argument is needed. +Like \pLaTeXe, \LuaTeX-ja defines the following dimensions +for information of current Japanese font: % %<*ja> -第1引数が次のいずれかの場合には,追加の引数は必要ない. +\pLaTeXe と同様に,\LuaTeX-jaは「現在の和文フォントの情報」を格納する長さ変数 % \begin{quote} -\sffamily -jcharwidowpenalty, yjabaselineshift, yalbaselineshift, autospacing, autoxspacing,\\ -kanjiskip, xkanjiskip, differentjfm, direction + \cs{cht}~(height), \cs{cdp}~(depth), \cs{cHT}~(sum of former two),\\ + \cs{cwd}~(width), \cs{cvs}~(lineskip), \cs{chs}~(equals to \cs{cwd}) +\end{quote} +%and its \cs{normalsize} version: +%と,その \cs{normalsize} 版である +\begin{quote} + \cs{Cht}~(height), \cs{Cdp}~(depth), + \cs{Cwd}~(width), \\\cs{Cvs}~(equals to \cs{baselineskip}), + \cs{Chs}~(equals to \cs{cwd})% +%. \end{quote} -%<*en> -Note that \verb+\ltjgetparameter{autospacing}+~and~\verb+\ltjgetparameter{autoxspacing}+ -returns 1 or 0, not -\texttt{true}~nor~\texttt{false}. -% %<*ja> -\verb+\ltjgetparameter{autospacing}+ と \verb+\ltjgetparameter{autoxspacing}+ は, -\texttt{true}や\texttt{false}を返すの\emph{ではなく}, -1か0のいずれかを返すことに注意, +を定義している.なお,\cs{cwd} と \cs{zw},また +\cs{cHT} と \cs{zh} は一致しない可能性がある.なぜなら, +\cs{cwd},~\cs{cHT} は「あ」の寸法から決定されるのに対し, +\cs{zw} と \cs{zh} はJFMに指定された値に過ぎないからである. % +%<*en> +Note that \cs{cwd}~and~\cs{cHT} may differ from \cs{zw}~and~\cs{zh} +respectively. +On the one hand the former dimensions are determined from the character ``あ'', +but on the other hand \cs{zw}~and~\cs{zh} are specified by JFM. +% + + +\item[\cs{DeclareYokoKanjiEncoding}\{\}\{\}\{\}] +%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] +%\ \\[\dimexpr-2\baselineskip\relax] +\item[\cs{DeclareTateKanjiEncoding}\{\}\{\}\{\}] -\item %<*en> -If first argument is one of the -following, an additional argument---a character code, for example---is needed. +In NFSS2 under \LuaTeX-ja, distinction between alphabetic fonts + and Japanese fonts are only made by their + encodings. For example, encodings OT1 and T1 are encodings for + alphabetic fonts, and Japanese fonts cannot + have these encodings. These command define a new encoding + scheme for Japanese font families. % %<*ja> -第1引数が次のいずれかの場合には,さらに文字コードを第2引数としてとる. +\LuaTeX-jaのNFSS2においては,欧文フォントと和文フォントは +そのエンコーディングによってのみ区別される. +例えば,OT1とT1のエンコーディングは欧文フォントのエンコーディングであり, +和文フォントはこれらのエンコーディングを持つことはできない. +これらコマンドは横組用・縦組用和文フォントのための新しいエンコーディングを +それぞれ定義する. % -\begin{quote} -\sffamily -kcatcode, prebreakpenalty, postbreakpenalty, jaxspmode, alxspmode -\end{quote} + +\item[\cs{DeclareKanjiEncodingDefaults}\{\}\{\}] +%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] +%\ \\[\dimexpr-2\baselineskip\relax] +\item[\cs{DeclareKanjiSubstitution}\{\}\{\}\{\}\{\}] +%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] +%\ \\[\dimexpr-2\baselineskip\relax] +\item[\cs{DeclareErrorKanjiFont}\{\}\{\}\{\}\{\}\{\}] + %<*en> -\verb+\ltjgetparameter{jaxspmode}{...}+~and~\verb+\ltjgetparameter{alxspmode}{...}+ -returns 0,~1, 2,~or~3, instead of \texttt{preonly} etc. +The above 3~commands are just the counterparts for \cs{DeclareFontEncodingDefaults} and~others. % %<*ja> -\verb+\ltjgetparameter{jaxspmode}{...}+ や \verb+\ltjgetparameter{alxspmode}{...}+\ -は,\texttt{preonly} などといった文字列ではなく,0から3までの値を返す. +上記3つのコマンドはちょうどNFSS2 の \cs{DeclareFontEncodingDefaults} などに対応するものである. % -\item -%<*en> -\verb+\ltjgetparameter{jacharrange}{+\verb+}+ returns \texttt{0} -if ``characters which belong to the character range~ are \textbf{JAchar}'', -\texttt{1} if ``\dots~are \textbf{ALchar}''. -Although there is no character range~$-1$, specifying $-1$ to does not cause an - error (returns 1). -% +\item[\cs{reDeclareMathAlphabet}\{\}\{\}\{\}] + +% ToDo: en %<*ja> -\verb+\ltjgetparameter{jacharrange}{+\verb+}+ は,が\textbf{JAchar}達の -範囲ならば0を,そうでなければ1を返す.「$-1$番の文字範囲」は存在しないが,に$-1$を -指定してもエラーは発生しない(1を返す). +和文・欧文の数式用フォントファミリを一度に変更する命令を作成する. +具体的には,欧文数式用フォントファミリ変更の命令(\cs{mathrm} 等)と,和文数式用フォ + ントファミリ変更の命令(\cs{mathmc} 等)の2つを同時に行う命令として + を(再)定義する.実際の使用ではと + に同じものを指定する,すなわち,で和文側も変 + 更させるようにするのが一般的と思われる. + +本命令は +\begin{center}\tt +\{\}\quad$\longrightarrow$\quad +(の1段展開結果)\{の1段展開結果)\{\}\} +\end{center} +と定義を行うので,使用には注意が必要である: +%\vspace{-\medskipamount} +\begin{itemize} +\item ,~は既に定義されていなければならない. + \cs{reDeclareMathAlphabet}\\の後に +両命令の内容を再定義しても,の内容にそれは反映されない. +\item ,~に\verb+\@mathrm+などと \texttt{@} をつけた命令を指定した時の動作は保証できない. +\end{itemize} % -\item +\item[\cs{DeclareRelationFont}\{\}\{\}\{\}\{\}\\* + \null\hfill\{\}\{\}\{\}\{\}] %<*en> -For an integer~ between 0~and~9, - \verb+\ltjgetparameter{kansujichar}{+\verb+}+ returns the character code -of the result of \cs{kansuji}. +This command sets the ``accompanied'' alphabetic font (given by the latter 4~arguments) +with respect to a Japanese font given by the former 4~arguments. % %<*ja> -0--9の数に対して, -\verb+\ltjgetparameter{kansujichar}{+\verb+}+ は,\cs{kansuji}で出力され - る文字の文字コードを返す. +いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントに対して, +そのフォントに対応する「従属欧文」のフォントを後半の4引数により与える. % - -\item +\item[\cs{SetRelationFont}] %<*en> -\verb+\ltjgetparameter{adjustdir}+ returns a integer which represents -the direction of the surrounding vertical list. -As \Param{direction}, the return value 1 means \emph{down-to-up} direction, -3 means \emph{tate} direction (vertical typesetting), -and 4 means \emph{yoko} direction (horizontal typesetting). +This command is almost same as \cs{DeclareRelationFont}, except that this command does a local +assignment, where \cs{DeclareRelationFont} does a global assignment. % %<*ja> -\verb+\ltjgetparameter{adjustdir}+ は,周囲のvboxの組方向(言い換えれば, -\cs{vadjust} で用いられる組方向)を表す数値を返す. -\Param{direction}と同様に,1は \cs{dtou} 方向を, -3は縦組みを,4は横組みを表す. +このコマンドは \cs{DeclareRelationFont} とローカルな指定であることを除いて +ほとんど同じである(\cs{DeclareRelationFont} はグローバル). % -\item +\item[\cs{userelfont}] %<*en> -For an integer~ between 0~and~65535, -\verb+\ltjgetparameter{boxdim}{+\verb+}+ returns the direction of -\cs{box}. If this box register is void, the returned value is zero. -% -%<*ja> -0--65535の数に対して, -\verb+\ltjgetparameter{boxdim}{+\verb+}+ は,\cs{box}に -格納されているボックスの組方向を表す.もしこのレジスタが空の場合は,0が返される. -% +(Only)~at the next call of \cs{selectfont}, + change current alphabetic font encoding/family/\dots\ to the `accompanied' alphabetic + font family with respect to current Japanese font family, + which was set by + \cs{DeclareRelationFont} or \cs{SetRelationFont}. -\item -%<*en> -The following parameter names \emph{cannot be specified} in \cs{ltjgetparameter}. + The following is an example of \cs{SetRelationFont} and \cs{userelfont}: % %<*ja> -次のパラメータ名を \cs{ltjgetparameter} に指定することはできない. +次回(のみ)の\cs{selectfont}の実行時に,現在の欧文フォントのエンコーディング/ファミリ/…… を, +\cs{DeclareRelationFont} か \cs{SetRelationFont} で指定された +現在の和文フォントに対応する「従属欧文」フォントに変更する. + + 以下に \cs{SetRelationFont} と \cs{userelfont} の例を +紹介しておこう.\cs{userelfont} の使用によって,「abc」の部分のフォントが +Latin Modern Sans Serif (TU/lmss/m/n) に変わっていることがわかる. % -\begin{quote} -\sffamily -jatextfont, jascriptfont, jascriptscriptfont, jacharrange -\end{quote} +\begin{LTXexample}[width=0.3\textwidth] +\makeatletter +\SetRelationFont{JY3}{\k@family}{m}{n}{TU}{lmss}{m}{n} + % \k@family: current Japanese font family +\userelfont\selectfont あいうabc +\end{LTXexample} -\item +\item[\cs{adjustbaseline}] %<*en> -\verb+\ltjgetparameter{chartorange}{+\verb+}+ returns -the range number which belongs to -(although there is no parameter named ``chartorange''). - -If is between 0 and 127, this does not belong to -any character range. In this case, - \verb+\ltjgetparameter{chartorange}{+\verb+}+ -returns $-1$. - -Hence, one can know whether is \textbf{JAchar} or not -by the following: +In \pLaTeXe, \cs{adjustbaseline} sets \cs{tbaselineshift} +to match the vertical center of ``M'' and that of ``あ'' in vertical typesetting: +\[ +\text{\cs{tbaselineshift}} \leftarrow +\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2 + + d_{\text{あ}} - d_{\text{M}}, +\] +where $h_{a}$~and~$d_{a}$ denote the height of ``$a$'' and the depth, respectively. +In \LuaTeX-ja, this \cs{adjustbaseline} does similar task, namely setting the + \Param{talbaselineshift} parameter. +If the \LaTeX\ is 2015/10/01 release or later, \LuaTeX-ja use a Japanese +character whose character class is zero, instead of `あ'. % %<*ja> -\verb+\ltjgetparameter{chartorange}{+\verb+}+ によって -の属する文字範囲の番号を知ることができる. +\pLaTeXe では,\cs{adjustbaseline} は縦組時に「M」と「あ」の中心線を一致させるために, +\cs{tbaselineshift} を設定する役割を持っていた: +\[ +\text{\cs{tbaselineshift}} \leftarrow +\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2 + + d_{\text{あ}} - d_{\text{M}}, +\] +ここで,$h_{a}$,~$d_{a}$はそれぞれ「$a$」の高さ・深さを表す. +\LuaTeX-jaにおいても\cs{adjustbaseline} は同様に\Param{talbaselineshift}パラメータの調整処 + 理を行っている. -に0--127の値を指定した場合(このとき,が属する -文字範囲は存在しない)は$-1$が返る. +同時に,これも\pLaTeXe の \cs{adjustbaseline} で同様の処理が行われていたが, +「漢」の寸法を元に(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} +といった長さ変数を設定する. -そのため,が\textbf{JAchar}か\textbf{ALchar}かは -次で知ることができる: +なお,\LaTeX が2015/10/01版以降の場合は,「あ」「漢」の代わりに +「文字クラス0の和文文字」を用いる. % -\begin{quote} -\ttfamily \verb+\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{+% - \verb+}}+\\\null\hfill\verb+% 0 if JAchar, 1 if ALchar+ -\end{quote} +\item[\cs{fontfamily}\{\}] %<*en> -\item Because the returned value is string, the following conditionals do not work -if \Param{kanjiskip} (or~\Param{xkanjiskip}) has the stretch part or the shrink part. -\begin{lstlisting} -\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi -\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi -\end{lstlisting} -The correct way is using a temporary register. -\begin{lstlisting} -\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi -\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi -\end{lstlisting} +As in \LaTeXe, this command changes current font family (alphabetic, Japanese,~\emph{or both}) +to . See Subsection~\ref{ssec:fontfamilycmd} for detail. % %<*ja> -\item 返り値が文字列であることから,\Param{kanjiskip}や\Param{xkanjiskip}を直接 -\ \cs{ifdim} を使って比較することは望ましくない.伸び量や縮み量を持っている時には, -次はエラーを発生させる: -\begin{lstlisting} -\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi -\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi -\end{lstlisting} -レジスタに一旦代入するのが良い: -\begin{lstlisting} -\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi -\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi -\end{lstlisting} +元々の\LaTeXe におけるものと同様に,このコマンドは現在のフォントファミリ(欧文, +和文,\emph{もしくは両方})をに変更する.詳細は\ref{ssec:fontfamilycmd}節を参照すること. % -\end{itemize} +\begin{figure}[!tb] +\begin{LTXexample}[pos=b] +\DeclareKanjiFamily{JY3}{edm}{} +\DeclareFontShape{JY3}{edm}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;}{} +\DeclareFontShape{JY3}{edm}{m}{green}{<-> s*KozMinPr6N-Regular:jfm=ujis;color=007F00}{} +\DeclareFontShape{JY3}{edm}{m}{blue} {<-> s*KozMinPr6N-Regular:jfm=ujis;color=0000FF}{} +\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{green}{"4E00-"67FF,{-2}-{-2}} +\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{blue}{ "6800-"9FFF} +{\kanjifamily{edm}\selectfont +日本国民は、正当に選挙された国会における代表者を通じて行動し、……} +\end{LTXexample} +%\caption{\cs{DeclareAlternateKanjiFont} の使用例} +%\caption{An example of \cs{DeclareAlternateKanjiFont}} +\label{fig:altkanji} +\end{figure} + +\item[\cs{DeclareAlternateKanjiFont}\{\}\{\}\{\}\{\}\\ + \null\hfill\{\}\{\}\{\}\{\}\{\}] %<*ja> -\subsection{\cs{ltjsetparameter} の代替} -原則として各種内部パラメータの設定には \cs{ltjsetparameter} もしくは -\ \cs{ltjglobalsetparameter}\ を用いることになるが, -\cs{ltjsetparameter} の実行には時間がかかるという難点があり, -\LuaTeX-ja の内部ではより高速に実行できる別の形式を用いている. -\emph{本節は一般利用者むけの内容ではない.} +\ref{ssec:altfont}節の\ +\cs{ltjdeclarealtfont} と同様に,前半の4引数の +和文フォント(基底フォント)のうち中の文字を +第5から第8引数の和文フォントを使って組むように指示する. +使用例を図\nobreak\ref{fig:altkanji}に載せた. -\paragraph{\Param{kanjiskip}, \Param{xkanjiskip} の設定} -\pLaTeXe 新ドキュメントクラスでは, -\begin{lstlisting} -\def\@setfontsize#1#2#3{% - ... - \kanjiskip=0zw plus .1zw minus .01zw - \ifdim\xkanjiskip>\z@ - \if@slide \xkanjiskip=0.1em \else - \xkanjiskip=0.25em plus 0.15em minus 0.06em - \fi - \fi} -\end{lstlisting} -と,フォントサイズを変更するごとに \cs{kanjiskip}, \cs{xkanjiskip} を変更している. -この \cs{@setfontsize} は文書の中で多数回実行されるので. -\LuaTeX-ja 用に素直に書き換えた -\begin{lstlisting} - \ltjsetparameter{kanjiskip=0\zw plus .1\zw minus .01\zw} - \@tempskipa=\ltjgetparameter{xkanjiskip} - \ifdim\@tempskipa>\z@ - \if@slide - \ltjsetparameter{xkanjiskip=0.1em} - \else - \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em} - \fi - \fi -\end{lstlisting} -としたのではタイプセットが遅くなってしまう. -そこで,\cs{ltjsetparameter} の中で \begin{itemize} -\item \cs{globaldefs} の値を読み取る \cs{ltj@setpar@global} -\item \Param{kanjiskip} の設定を行う \cs{ltjsetkanjiskip} -\item \Param{xkanjiskip} の設定を行う \cs{ltjsetxkanjiskip} -\end{itemize} -を独立させ,\Pkg{ltjsclasses}では, -\begin{lstlisting} - \ltj@setpar@global - \ltjsetkanjiskip{\z@ plus .1\zw minus .01\zw} - \@tempskipa=\ltjgetparameter{xkanjiskip} - \ifdim\@tempskipa>\z@ - \if@slide - \ltjsetxkanjiskip.1em - \else - \ltjsetxkanjiskip.25em plus .15em minus .06em - \fi - \fi -\end{lstlisting} -としている. -\cs{ltj@setpar@global}を直前に実行せず,単独で -\cs{ltjsetkanjiskip}, \cs{ltjsetxkanjiskip}を実行することは想定されていないので注意. + \item +\cs{ltjdeclarealtfont} では基底フォント・置き換え先和文フォントはあらかじめ定義されてい + ないといけない(その代わり即時発効)であったが, +\cs{DeclareAlternateKanjiFont} の設定が +実際に効力が発揮するのは,書体変更やサイズ変更を行った時, +あるいは(これらを含むが)\cs{selectfont} が実行された時である. + \item +段落やhboxの最後での設定値が段落/hbox全体にわたって通用する点や, +に負数$-n$を指定した場合,それが「基底フォントの文字クラス$n$に属する文字全体」 +と解釈されるのは \cs{ltjdeclarealtfont} と同じである. +\end{itemize}% +% +%<*en> +As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec:altfont}), +characters in of the Japanese font (we say the \emph{base font}) +which specified by first 4 arguments are typeset +by the Japanese font which specified by fifth to eighth arguments +(we say the \emph{alternate font}). +An example is shown in \autoref{fig:altkanji}. +\begin{itemize} + \item +In \cs{ltjdeclarealtfont}, the base font and the alternate font must be already defined. +But this \cs{DeclareAlternateKanjiFont} is not so. +In other words, \cs{DeclareAlternateKanjiFont} is effective only after +current Japanese font is changed, or only after \cs{selectfont} is executed. + \item \dots +\end{itemize}% +\vspace{-\medskipamount} +% +\end{cslist} -\paragraph{ベースライン補正量の設定} -\pLaTeX の\Pkg{ascmac}パッケージでは,縦組の欧文ベースライン補正量の一時待避・復帰処理に -\ \cs{@saveybaselineshift}\ という寸法レジスタを用い -\begin{lstlisting} -\@savetbaselineshift\tbaselineshift\tbaselineshift\z@ -... -\tbaselineshift\@savetbaselineshift -\end{lstlisting} -という処理を行っている. +%<*en> +Furthermore, \LuaTeX-ja applies patches which enables NFSS2 commands, +such~as \cs{DeclareSymbolFont}~and~\cs{SetSymbolFont}, to specify +Japanee fonts as math fonts. -これを\LuaTeX-ja 用に \cs{ltjsetparameter} を使って書き直すと, +Specifying \texttt{disablejfam} option in \cs{usepackage} prevents +applying these patches. +Hence one cannot write Japanese Characters in math mode directly +if \texttt{disablejfam} option is specified. +The code below does not work either: \begin{lstlisting} -\@savetbaselineshift\ltjgetparameter{talbaselineshift} -\ltjsetparameter{talbaselineshift=\z@} -... -\ltjsetparameter{talbaselineshift=\@savetbaselineshift} +\DeclareSymbolFont{mincho}{JY3}{mc}{m}{n} +\DeclareSymbolFontAlphabet{\mathmc}{mincho} \end{lstlisting} -となる. +% +%<*ja> +この他にも,標準では +\cs{DeclareSymbolFont}, \cs{SetSymbolFont} などの命令で +(NFSS2の枠組みで)数式フォントとして日本語フォントを使えるようにするためのパッチを当てている. -さて,縦組の欧文ベースライン補正量\Param{talbaselineshift}は, -実際には \cs{ltj@tablshift} という属性レジスタに格納されている -(\ref{sec-para}\nobreak 節参照).属性レジスタは長さではなく整数値を格納する\footnote{% - 従って,\texttt{\textbackslash @savetbaselineshift=\textbackslash ltj@tablshift}\ - のように記述することはできない.属性レジスタを \cs{tbaselineshift} という名称にしなかっ - たのはそのためである. -}ものであり,\cs{ltj@tablshift} は補正量を sp 単位で保持することから, -上記のコードと同じ内容をより速い以下のコードで実現することができる. +一方,\texttt{disablejfam}オプション指定時には,これらのパッチを当てないので \begin{lstlisting} -\@savetbaselineshift\ltj@tablshift sp% -\ltj@tablshift\z@ -... -\ltj@tablshift\@savetbaselineshift +\DeclareSymbolFont{mincho}{JY3}{mc}{m}{n} +\DeclareSymbolFontAlphabet{\mathmc}{mincho} \end{lstlisting} -この手法は \Pkg{ascmac} パッケージの\LuaTeX-ja対応パッチ \Pkg{lltjp-tascmac.sty} で -実際に用いられている.\Pkg{lltjp-tascmac.sty} は自動的に読み込まれるので, -ユーザは何も気にせず普通に \Pkg{ascmac} パッケージを \cs{usepackage} で読みこめば良い. +のように設定しても,数式モード中に直に日本語を記述することはできない. +\verb|$\mathmc{あ}$| のように \cs{mathmc} で囲んでもできない. % +%\subsection{Detail of \cs{fontfamily} command} +%\subsection{\cs{fontfamily}コマンドの詳細} +\label{ssec:fontfamilycmd} +%<*en> +In this subsection, we describe when \cs{fontfamily} changes current +Japanese/alphabetic font family. Basically, current Japanese fotn family is changed to + if it is recognized as a Japanese font family, and similar with alphabetic font +family. There is a case that current Japanese/alphabetic font family are both changed to +, and another case that isn't recognized as a Japanese/alphabetic font +family either. -%\section{Other Commands for plain \TeX\ and \LaTeXe} -%\section{plainでも\LaTeX でも利用可能なその他の命令} -%\subsection{Commands for compatibility with \pTeX} -%\subsection{\pTeX 互換用命令} +\paragraph{Recognition as Japanese font family} +First, Whether Japanese font family will be changed is determined in following order. +This order is very similar to \cs{fontfamily} in \pLaTeXe, but we re-implemented in Lua. +We use an auxiliary list~$N_{\mathrm{J}}$. +% +%<*ja> +本節では,\cs{fontfamily} がいつ和文/欧文フォントファミリを変更するかについて解説 +する.基本的には,が和文フォントファミリだと認識されれば和文側が,欧文フォントファ +ミリだと認識されれば欧文側が変更される.どちらとも認識されれば和文・欧文の両方が変わるこ +とになるし,当然どちらとも認識されないこともある. +\paragraph{和文フォントファミリとしての認識} +まず,が和文フォントファミリとして認識されるかは以下の順序で決定される. +これは\pLaTeXe の \cs{fontfamily} にとても似ているが,ここではLuaによって実装している. +補助的に「和文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{J}}$を用いる. +% +\begin{enumerate} %<*en> -The following commands are implemented for compatibility with \pTeX. -Note that the former five commands don't support JIS~X~0213, but only JIS~X~0208. -The last \cs{kansuji} converts an integer into its Chinese numerals. +\item If the family~ has been defined already by \cs{DeclareKanjiFamily}, + is recognized as a Japanese font family. + Note that need not be defined under \emph{current} Japanese font encoding. % %<*ja> -以下の命令は\pTeX との互換性のために実装されている.そのため,JIS~X~0213には対応せず, -\pTeX と同じようにJIS~X~0208の範囲しかサポートしていない. +\item ファミリが既に \cs{DeclareKanjiFamily} によって定義されている場合, + は和文フォントファミリであると認識される. + ここで,は現在の和文フォントエンコーディングで定義されていなくてもよい. % -\begin{center} -\cs{kuten}, \cs{jis}, \cs{euc}, \cs{sjis}, \cs{ucs}, \cs{kansuji} -\end{center} %<*en> -These six commands takes an internal integer, and returns a \emph{string}. +\item If the family~ has been listed in a list~$N_{\mathrm{J}}$, this means + that is not a Japanese font family. % %<*ja> -これら6命令は内部整数を引数とするが,実行結果は\textbf{文字列}であることに注意. +\item ファミリがリスト$N_{\mathrm{J}}$に既に含まれていれば,それは + が和文フォントファミリではないことを意味する. % -\begin{LTXexample} -\newcount\hoge -\hoge="2423 %" -\the\hoge, \kansuji\hoge\\ -\jis\hoge, \char\jis\hoge\\ -\kansuji1701 -\end{LTXexample} - %<*en> -To change characters of Chinese numerals for each digit, set \Param{kansujichar} parameter: -\begin{LTXexample} -\ltjsetparameter{kansujichar={1,`壹}} -\ltjsetparameter{kansujichar={7,`漆}} -\ltjsetparameter{kansujichar={0,`零}} -\kansuji1701 -\end{LTXexample} +\item If the \Pkg{luatexja-fontspec} package is loaded, we stop here, and is not + recognized as a Japanese font family. + + If the \Pkg{luatexja-fontspec} package is \emph{not} loaded, +now \LuaTeX-ja looks whether there exists a Japanese font encoding~ such that + a font definition named \texttt{.fd} (the file name is + all lowercase) exists. If so, is recognized as a Japanese font family (the font definition file won't be loaded here). + If not, is not a Japanese font family, and + is appended to the list~$N_{\mathrm{J}}$. % +%<*ja> +\item もし\Pkg{luatexja-fontspec}パッケージが読み込まれていれば,ここで終了であり, +は和文フォントファミリとして認識されないことになる. + +もし\Pkg{luatexja-fontspec}パッケージが読み込まれていなければ,和文エンコーディングで +フォント定義ファイル\texttt{.fd}(ファイル名は全て小文字)が存在するようなも + のがあるかどうかを調べる. +存在すれば,は和文フォントファミリと認識される(フォント定義ファイルは読み込まれな + い). +存在しなければ,は和文フォントファミリでないと認識され,リスト$N_{\mathrm{J}}$にを追加することでそれを記憶する. +% +\end{enumerate} -\subsection{\cs{inhibitglue}} %<*en> -\cs{inhibitglue} suppresses the insertion of \textbf{JAglue}. -The following is an example, using a special JFM that there will be a glue between -the beginning of a box and ``あ'', and also between ``あ''~and~``ウ''. +\paragraph{Recognition as alphabetic font family} +Next, whether alphabetic font family will be changed is determined in following order. +We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, % %<*ja> -\cs{inhibitglue} は\textbf{JAglue}の挿入を抑制する. -以下は,ボックスの始めと「あ」の間,「あ」「ウ」の間にグルーが入る特別なJFMを用いた例で -ある. +\paragraph{欧文フォントファミリとしての認識} +同様に,が和文フォントファミリとして認識されるかは以下の順序で決定される. +補助的に「欧文フォントファミリと既に認識された」ファミリのリスト$F_{\textrm{A}}$と, +「欧文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{A}}$を用いる. % -\begin{LTXexample}[width=0.4\textwidth] -\jfont\g=file:KozMinPr6N-Regular.otf:jfm=test \g -\fbox{\hbox{あウあ\inhibitglue ウ}} -\inhibitglue\par\noindent あ1 -\par\inhibitglue\noindent あ2 -\par\noindent\inhibitglue あ3 -\par\hrule\noindent あoff\inhibitglue ice -\end{LTXexample} - +\begin{enumerate} %<*en> -With the help of this example, we remark the specification of \cs{inhibitglue}: +\item If the family~ has been listed in a list~$F_{\mathrm{A}}$, + is recognized as an alphabetic font family. % %<*ja> -この例を援用して,\cs{inhibitglue} の仕様について述べる. +\item ファミリがリスト$F_{\mathrm{A}}$に既に含まれていれば, + は欧文フォントファミリと認識される. % -\begin{itemize} %<*en> -\item The call of \cs{inhibitglue} in the (internal) vertical mode is - simply ignored. +\item If the family~ has been listed in a list~$N_{\mathrm{A}}$, this means + that is not an alphabetic font family. % %<*ja> -\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{% - この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである. -}. -4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり, -\cs{noindent} の時点で水平モードになるからである. +\item ファミリがリスト$N_{\mathrm{A}}$に既に含まれていれば,それは + が欧文フォントファミリではないことを意味する. % - %<*en> -\item The call of \cs{inhibitglue} in the (restricted) horizontal - mode is only effective on the spot; does not get over boundary of - paragraphs. Moreover, \cs{inhibitglue} cancels ligatures and - kernings, as shown in the last line of above example. +\item If there exists an alphabetic font encoding such that the family~ has been + defined under it, is recognized as an alphabetic font family, and + to memorize this, is appended to the list~$F_{\mathrm{A}}$. % %<*ja> -\item \cs{inhibitglue} の(制限された)水平モード中での呼び出しはその場でのみ - 有効であり,段落の境界を乗り越えない. - さらに,\cs{inhibitglue} は上の例の最終行のように(欧文における)リガチャとカーニングを - 打ち消す.これは,\cs{inhibitglue} が内部的には「現在のリスト中にwhatsitノードを - 追加する」ことを行なっているからである. +\item ある欧文フォントエンコーディング下でファミリが定義されていれば, + は欧文フォントファミリと認識され,リスト$F_{\mathrm{A}}$にを追加することでこのことを記憶する. % - %<*en> -\item The call of \cs{inhibitglue} in math mode is just ignored. +\item Now \LuaTeX-ja looks whether there exists an alphabetic font encoding~ such that + a font definition named \texttt{.fd} (the file name is + all lowercase) exists. If so, current alphabetic font family will be changed to + ~(the font definition file won't be loaded here). + If not, current alphabetic font family won't be changed, and + is appended to the list~$N_{\mathrm{A}}$. % %<*ja> -\item \cs{inhibitglue} を数式モード中で呼び出した場合はただ無視される. +\item 最終段階では,欧文エンコーディングで +フォント定義ファイル\texttt{.fd}(ファイル名は全て小文字)が存在するようなも + のがあるかどうかを調べる. +存在すれば,は欧文フォントファミリと認識される(フォント定義ファイルは読み込まれない). +存在しなければ,は欧文フォントファミリと認識されないので,リスト$N_{\mathrm{A}}$に + を追加してそのことを記憶する. % +\end{enumerate} +%<*en> +Also, each call of \cs{DeclareFontFamily} \emph{after} loading of \LuaTeX-ja makes +the second argument (family) is appended to the list~$F_{\mathrm{A}}$. +% %<*ja> -\item \LaTeX で\LuaTeX-ja を使用する場合は, -\cs{inhibitglue} の代わりとして \verb+\<+ を使うことができる. -既に \verb+\<+ が定義されていた場合は,\LuaTeX-ja の読み込みで強制的に上書きされるので -注意すること. +また,\cs{DeclareFontFamily}が\LuaTeX-jaの読み込み後に実行された場合は, +第2引数(ファミリ名)が自動的に$F_{\mathrm{A}}$に追加される. % -\end{itemize} - -\subsection{\cs{ltjfakeboxbdd}, \cs{ltjfakeparbegin}} %<*en> -Sometimes \texttt{'parbdd'}~and~\texttt{'boxbdd'} specifications~look like ``fail'', -especially in paragraphs inside list environments. -This is because \cs{everypar} inserts some nodes such as boxes and kerns, so -the ``first letter'' in a paragraph is in fact not the first letter. +The above order is very similar to \cs{fontfamily} in \pLaTeXe, but more complicated (clause~3.). +This is because \pLaTeXe\ is a \emph{format} however \LuaTeX-ja is not, +hence \LuaTeX-ja does not know calls of \cs{DeclareFontFamily} \emph{before} itself is +loaded. % %<*ja> -リスト環境内での\cs{item}で始まる各項目などでは, -「段落最初の鍵括弧が余計に半角字下げされる」など, -JFMにある\texttt{'parbdd'}, \texttt{'boxbdd'}の指定が見かけ上破綻していることがある. - -これは\TeX が\cs{everypar}を用いて段落開始時に記号類や空白などを挿入してしまっているため, -段落最初の鍵括弧が実際には段落最初のノードではないことに起因する.以下に例を示した. +以上の方針は\pLaTeXe における \cs{fontfamily} にやはり類似しているが,3.が加わり若干複雑になっている. +それは\pLaTeXe がフォーマットであるのに対し\LuaTeX-jaはそうでないため, +\LuaTeX-jaは自身が読み込まれる前にどういう\cs{DeclareFontFamily}の呼び出しがあったか +把握できないからである. % -\begin{LTXexample}[width=0.3\textwidth] -\parindent1\zw -\noindent ああああああああ\par % for comparison -「ああああああ \par % normal paragraph -\everypar{\null} -「ああああああ \par % ??? -\end{LTXexample} +%\paragraph{Remarks} +%\paragraph{注意} %<*en> -\cs{ltjfakeboxbdd}~and~\cs{ltjfakeparbegin} primitives resolve this situation. -\begin{itemize} - \item \cs{ltjfakeparbegin} creates a node which indicates - ``beginning of an indented paragraph'' to the insertion process of \textbf{JAglue}. - \item \cs{ltjfakeboxbdd} creates a node which indicates - ``beginning/ending of a box'' to the insertion process of \textbf{JAglue}. -\end{itemize} -As an example, the example above can be improved as follows: +Of course, there is a case that is not recognized as a Japanese font family, nor +an alphabetic font family. +In this case, \LuaTeX-ja treats ``the argument is wrong'', so +set both current alphabetic and Japanese font family to , +to use the default family for font substitution. % %<*ja> -\cs{ltjfakeboxbdd}, \cs{ltjfakeparbegin}はこの状況を改善する命令である. -実際には\cs{everypar}の末尾にこれらを追加するという使い方がほとんどになるだろう. -\begin{itemize} - \item \cs{ltjfakeparbegin}は,実行された箇所が「インデントあり段落の開始」であると\LuaTeX-jaの - 和文処理グルー挿入処理に認識させる.この命令の直前に\textbf{JAchar}があった場合, - この文字の後ろに入るグルー等の処理については未定義である - \footnote{% - この命令と同等の内容は,\cs{dirrctlua}の形で\Pkg{ltjsclasses}内で以前から使われていた. - 一般ユーザでも利用しやすくするため,20170505.0版では新たに命令として定義した. - }. - \item \cs{ltjfakeboxbdd}は,実行された箇所が「ボックスの先頭と末尾」であると\LuaTeX-jaの - 和文処理グルー挿入処理に認識させる. -\end{itemize} -例えば,先ほどの例に対して適用すると,次のようになる. -% -\begin{LTXexample}[width=0.3\textwidth] -\parindent1\zw -\noindent ああああああああ\par % for comparison -「ああああああ \par % normal paragraph - -\everypar{\null\ltjfakeparbegin} -「ああああああ \par -\end{LTXexample} - +さて,引数によっては,「和文フォントファミリとも欧文フォントファミリも認識されなかった」 +という事態もあり得る. + この場合,引数は不正だった,ということになるので, +和文・欧文の両方のフォントファミリをに設定し,代用フォントが使われるに任せることにする. +% -\subsection{\cs{ltjdeclarealtfont}} -\label{ssec-altfont} %<*en> -Using \cs{ltjdeclarealtfont}, one can ``compose'' more than one Japanese fonts. -This \cs{ltjdeclarealtfont} uses in the following form: -\begin{quote} -\ttfamily \textbackslash ltjdeclarealtfont\{\} -\end{quote} -where ~and~ are defined by \cs{jfont}. -Its meaning is -\begin{quote} -If the current Japanese font is , characters which belong to -is typeset by another Japanese font , instead of . -\end{quote} -Here is a comma-separated list of character codes, but also accepts negative integers: -$-n$~($n≥1$) means that all characters of character classes~$n$, with respect to JFM used -by . Note that characters which do not exist in are -ignored. +\subsection{Notes on \cs{DeclareTextSymbol}} +From \LaTeX~2017/01/01, the standard encoding of \LuaLaTeX\ is changed to the \texttt{TU} +encoding. This menas that symbols defined by \texttt{T1}~and~\texttt{TS1} encodings can be used +without loading any package. To produces these symbols in alphabetic fonts in \LuaTeX-ja, +\LuaTeX-ja patches \cs{DeclareTextSymbol}, and reloads \texttt{tuenc.def}. -For example, if \cs{hoge} uses \texttt{jfm-ujis.lua}, the standard JFM of \LuaTeX-ja, -then -\begin{lstlisting} -\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} -\end{lstlisting} -does -\begin{quote} -If the current Japanese font is \cs{hoge}, \texttt{U+3000}--\texttt{U+30FF} -and characters in class~1 (ideographic opening brackets) -are typeset by \cs{piyo}. -\end{quote} +Under original definition of \cs{DeclareTextSymbol}, +internal commands which is defined by \cs{DeclareTextSymbol} (such as \cs{T1\cs{textquotedblleft}}) +are \textit{chardef} tokens. However, this no longer holds in \LuaTeX-ja; +for example, the meaning of \cs{TU\cs{textquotedblleft}} is \cs{ltjalchar8220\ltjalchar"2423 }. % %<*ja> -\cs{jfont} の書式を見ればわかるように,基本的には\LuaTeX-jaにおける1つの和文フォントに -使用出来る「実際のフォント」は1つである. -しかし,\cs{ltjdeclarealtfont} を用いると,この原則から外れることができる. +\subsection{\cs{DeclareTextSymbol}使用時の注意} +\LaTeX~(2017/01/01)以降では,\texttt{TU}エンコーディングが標準となり,特に何もしなくても +\texttt{T1},~\texttt{TS1}エンコーディングで定義されていた記号類が +使えるようになった.\LuaTeX-jaではこれらの命令によって記号が欧文フォントで出力されるようにするため, +\cs{DeclareTextSymbol}命令を改変し,そして\texttt{TU}エンコーディングの定義である +\texttt{tuenc.def}を再読込している. -\cs{ltjdeclarealtfont} は以下の書式で使用する: -\begin{quote} -\ttfamily \textbackslash ltjdeclarealtfont\{\} -\end{quote} -これは「現在の和文フォント」がであるとき, -に属する文字はを用いて組版される,という意味である. -\begin{itemize} - \item , は -\cs{jfont} によって定義された和文フォントである. - \item は文字コードの範囲を表すコンマ区切りのリストであるが, - 例外として負数$-n$は「のJFMの文字クラス$n$に属する全ての文字」 - を意味する. +従来は \cs{DeclareTextSymbol} で内部的に定義された\cs{T1\cs{textquotedblleft}}といった命令は +\textit{chardef}トークンであった.しかし前段落で述べた改変によりもはやそうではなくなっており,例えば +\cs{TU\cs{textquotedblleft}}は \cs{ltjalchar8220\ltjalchar"2423 } という定義になっている.%" +% -中に中に実際には存在しない文字が指定された場合は, -その文字に対する設定は無視される. -\end{itemize} +\begin{table}[t] + \centering\small + \caption{strut}\label{tab:strutbox}\medskip + \begin{tabular}{llcccl} + \toprule + \textbf{box}&\textbf{direction}&\textbf{width}&\textbf{height}&\textbf{depth} + &\textbf{user command}\\ + \midrule + \cs{ystrutbox}&yoko&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{ystrut}\\\midrule + \cs{tstrutbox}&tate, utod&0&0.5\cs{baselineskip}&0.5\cs{baselineskip}&\cs{tstrut}\\\midrule + \cs{dstrutbox}&dtou&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{dstrut}\\\midrule + \cs{zstrutbox}&---&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{zstrut}\\\bottomrule + \end{tabular} +\end{table} +%<*en> +\subsection{\cs{strutbox}} +As \pLaTeX~(2017/04/08 or later), \cs{strutbox} is \emph{a macro} which is expanded to one of +\cs{ystrutbox},~\cs{tstrutbox},~and~\cs{dstrutbox} +(all of them are shown in \autoref{tab:strutbox}), according to the current direction. +Similarly, \cs{strut} now uses one of these boxes. +% +%<*ja> +\subsection{\cs{strutbox}} +\pLaTeX~2017/04/08以降と同じように, +\cs{strutbox}は現在の組方向によって\cs{ystrutbox}, \cs{tstrutbox}, \cs{dstrutbox}の +いずれかに展開される\emph{マクロ}となっている(これらについては\autoref{tab:strutbox}参照). +同様に\cs{strut}もこの3\nobreak ボックスのいずれかを組方向によって使い分けるようになっている. -例えば,\cs{hoge} のJFMが\LuaTeX-ja標準の -\ \texttt{jfm-ujis.lua} であった場合, -\begin{lstlisting} -\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}} -\end{lstlisting} -は「\cs{hoge} を利用しているとき, -\texttt{U+3000}--\texttt{U+30FF}と -文字クラス1(開き括弧類)中の文字だけは \cs{piyo} を用いる」 -ことを設定する.\verb+{-1}-{-1}+ という変わった指定の仕方をしているのは, -普通に \texttt{-1} と指定したのでは正しく$-1$と読み取られないという -マクロの都合による. +\cs{zstrutbox}はutod方向(\pTeX でいう縦数式ディレクション)で使われる支柱ボックスであるが, +実際に使われるのは\cs{zstrut}が明示的に発行された時,そして +\Pkg{lltjext}パッケージで追加される組方向指定で \texttt{} を指定した時,および +周囲が縦組の状況で \texttt{} を指定した時に限られている. % +%<*en> +\section{Addon packages} +\LuaTeX-ja has several addon packages. +These addons are written as \LaTeX\ packages, but +\Pkg{luatexja-otf} and~\Pkg{luatexja-adjust} can be loaded in plain \LuaTeX\ +by \cs{input}. +% %<*ja> -\subsection{\cs{ltjalchar} と \cs{ltjjachar}} -文字コードが$\text{}~(\geq 128=\mathtt{0x80})$の文字を -\ \cs{char} プリミティブを使い \cs{char} として出力させると, -その文字の属する文字範囲(\ref{ssec-setrange}節参照)によって -\textbf{ALchar}か\textbf{JAchar}か,つまり欧文フォントで出力されるか和文フォントで出力され -るかが決まる. - -文字範囲の設定を無視し,文字コードが$\text{}~(\geq 128=\mathtt{0x80})$の文字を強制的に -\textbf{ALchar}, \textbf{JAchar}で出力する命令がそれぞれ -\ \cs{ltjalchar},~\cs{ltjjachar} である.使用方法は \cs{char} と同じく -\ \cs{ltjalchar}, \cs{ltjjachar}とすればよい. -が127以下の場合は,\cs{ltjjachar} であっても\textbf{ALchar}として出力されること -に注意. +\section{拡張パッケージ} +\LuaTeX-jaには(動作には必須ではないが)自由に読み込める拡張が付属している. +これらは\LaTeX のパッケージとして制作しているが, +\Pkg{luatexja-otf}と\Pkg{luatexja-adjust}についてはplain \LuaTeX でも\ +\cs{input} で読み込み可能である. +% +\subsection{\Pkg{luatexja-fontspec}} +\label{ssec:fontspec2} +%<*en> +As described in Subsection~\ref{ssec:fontspec}, this optional package +provides the counterparts for several commands defined in the +\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: +% +%<*ja> +\ref{ssec:fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}% +パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する. -以下は\ref{ssec-setrange}節に載せた例に,\cs{char} の動作を追加したものである. -\begin{LTXexample}[width=0.25\textwidth] -\gtfamily\large % default, ALchar, JAchar -¶, \char`¶, \ltjalchar`¶, \ltjjachar`¶\\ % default: ALchar -α, \char`α, \ltjalchar`α, \ltjjachar`α % default: JAchar -\end{LTXexample} +\Pkg{fontspec}パッケージで指定可能な各種OpenType機能に加えて,和文版のコマンドには +以下の「フォント機能」を指定することができる: % -%\section{Commands for \LaTeXe} -%\section{\LaTeXe 用の命令} -%\subsection{Patch for NFSS2} -%\subsection{NFSS2へのパッチ} -\label{ssec-nfsspat} +\begin{cslist} +\item[CID=\textrm{, }JFM=\textrm{, }JFM-var=] %<*en> -Japanese patch for NFSS2 in \LuaTeX-ja -is based on \texttt{plfonts.dtx} which plays the same role in \pLaTeXe. -We will describe -commands which are not described in Subsection~\ref{ssec-chgfnt}. +These 3 keys correspond to \texttt{cid}, \texttt{jfm} and +\texttt{jfmvar} keys for \cs{jfont}~and~\cs{tfont} respectively. +See Subsections~\ref{ssec:jfont} and \ref{ssec:psft} for details + of \texttt{cid}, \texttt{jfm} and +\texttt{jfmvar} keys. + +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 +will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. % %<*ja> -\LuaTeX-jaのNFSS2への日本語パッチは -\pLaTeXe で同様の役割を果たす \texttt{plfonts.dtx} をベースに, -和文エンコーディングの管理等をLuaで書きなおしたものである. -ここでは\ref{ssec-chgfnt}節で述べていなかった命令について -記述しておく. +これら3つのキーはそれぞれ \cs{jfont},~\cs{tfont}に対する +\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する. +\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーの詳細は\ref{ssec:jfont}節 + と\ref{ssec:psft}節を参照. + +\texttt{CID} キーは下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である. +また,横組用JFMと縦組用JFMは共用できないため,実際に \texttt{JFM} キーを用いる際は +後に述べる\ \texttt{YokoFeatures} キーや \texttt{TateFeatures}\ の中で用いる +ことになる. % -\begin{cslist}% -\item[\normalfont\bfseries % -%追加の長さ変数達 -%additonal dimensions -] +\item[NoEmbed] %<*en> -Like \pLaTeXe, \LuaTeX-ja defines the following dimensions -for information of current Japanese font: +By specifying this key, one can use ``name-only'' Japanese font which +will not be embedded in the output PDF file. See Subsection~\ref{ssec:psft}. % %<*ja> -\pLaTeXe と同様に,\LuaTeX-jaは「現在の和文フォントの情報」を格納する長さ変数 -% -\begin{quote} - \cs{cht}~(height), \cs{cdp}~(depth), \cs{cHT}~(sum of former two),\\ - \cs{cwd}~(width), \cs{cvs}~(lineskip), \cs{chs}~(equals to \cs{cwd}) -\end{quote} -%and its \cs{normalsize} version: -%と,その \cs{normalsize} 版である -\begin{quote} - \cs{Cht}~(height), \cs{Cdp}~(depth), - \cs{Cwd}~(width), \\\cs{Cvs}~(equals to \cs{baselineskip}), - \cs{Chs}~(equals to \cs{cwd})% -%. -\end{quote} -%<*ja> -を定義している.なお,\cs{cwd} と \cs{zw},また -\cs{cHT} と \cs{zh} は一致しない可能性がある.なぜなら, -\cs{cwd},~\cs{cHT} は「あ」の寸法から決定されるのに対し, -\cs{zw} と \cs{zh} はJFMに指定された値に過ぎないからである. +これを指定することで,PDFに埋め込まれない「名前だけ」のフォントを指定することが +できる.\ref{ssec:psft}節を参照. % -%<*en> -Note that \cs{cwd}~and~\cs{cHT} may differ from \cs{zw}~and~\cs{zh} -respectively. -On the one hand the former dimensions are determined from the character ``あ'', -but on the other hand \cs{zw}~and~\cs{zh} are specified by JFM. -% +\begin{figure}[!tb] +\begin{LTXexample}[width=0.25\textwidth] +\jfontspec[ + YokoFeatures={Color=007F00}, TateFeatures={Color=00007F}, + TateFont=KozGoPr6N-Regular +]{KozMinPr6N-Regular} +\hbox{\yoko 横組のテスト}\hbox{\tate 縦組のテスト} +\addjfontfeatures{Color=FF0000} +\hbox{\yoko 横組}\hbox{\tate 縦組} +\end{LTXexample} +%\caption{\texttt{TateFeatures} 等の使用例} +%\caption{An example of \texttt{TateFeatures} etc.} +\label{fig:yokotate-fontspec} +\end{figure} -\item[\cs{DeclareYokoKanjiEncoding}\{\}\{\}\{\}] -%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] -%\ \\[\dimexpr-2\baselineskip\relax] -\item[\cs{DeclareTateKanjiEncoding}\{\}\{\}\{\}] +\item[Kanjiskip=] +%<*ja> +\pageref{pg:ltjksp}ページで説明した \verb+\jfont+ 中での \texttt{ltjksp} 指定と +同一の効力を持ち, +JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ +\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の有効/無効を切り替える. +標準値は \texttt{true} である. +% +\item[TateFeatures=\{\}\textrm{, }TateFont=] %<*en> -In NFSS2 under \LuaTeX-ja, distinction between alphabetic fonts - and Japanese fonts are only made by their - encodings. For example, encodings OT1 and T1 are encodings for - alphabetic fonts, and Japanese fonts cannot - have these encodings. These command define a new encoding - scheme for Japanese font families. +The \texttt{TateFeatures} key specifies font features which are only turned~on in +vertical writing, such as \texttt{Style=VerticalKana}~(\texttt{vkna} feature). +Similarly, the \texttt{TateFont} key specifies the Japanese font which will be used only + in vertical writing. +A demonstrarion is shown in \autoref{fig:yokotate-fontspec}. % %<*ja> -\LuaTeX-jaのNFSS2においては,欧文フォントと和文フォントは -そのエンコーディングによってのみ区別される. -例えば,OT1とT1のエンコーディングは欧文フォントのエンコーディングであり, -和文フォントはこれらのエンコーディングを持つことはできない. -これらコマンドは横組用・縦組用和文フォントのための新しいエンコーディングを -それぞれ定義する. +縦組において使用されるフォントや,縦組においてのみ適用されるフォント機能達を +指定する.使用例は\autoref{fig:yokotate-fontspec}参照. % -\item[\cs{DeclareKanjiEncodingDefaults}\{\}\{\}] -%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] -%\ \\[\dimexpr-2\baselineskip\relax] -\item[\cs{DeclareKanjiSubstitution}\{\}\{\}\{\}\{\}] -%\ \\[\dimexpr-\medskipamount-2\baselineskip\relax] -%\ \\[\dimexpr-2\baselineskip\relax] -\item[\cs{DeclareErrorKanjiFont}\{\}\{\}\{\}\{\}\{\}] - +\item[YokoFeatures=\{\}] %<*en> -The above 3~commands are just the counterparts for \cs{DeclareFontEncodingDefaults} and~others. +The \texttt{YokoFeatures} key specifies font features which are only turned~on in +horizontal writing,. +A demonstrarion is shown in \autoref{fig:yokotate-fontspec}. % %<*ja> -上記3つのコマンドはちょうどNFSS2 の \cs{DeclareFontEncodingDefaults} などに対応するものである. +同様に,横組においてのみ適用されるフォント機能達を +指定する.使用例は\autoref{fig:yokotate-fontspec}参照. % -\item[\cs{reDeclareMathAlphabet}\{\}\{\}\{\}] -% ToDo: en -%<*ja> -和文・欧文の数式用フォントファミリを一度に変更する命令を作成する. -具体的には,欧文数式用フォントファミリ変更の命令(\cs{mathrm} 等)と,和文数式用フォ - ントファミリ変更の命令(\cs{mathmc} 等)の2つを同時に行う命令として - を(再)定義する.実際の使用ではと - に同じものを指定する,すなわち,で和文側も変 - 更させるようにするのが一般的と思われる. +\begin{figure}[!tb] +\begin{LTXexample}[pos=b] +\jfontspec[ + AltFont={ + {Range="4E00-"67FF, Color=007F00}, + {Range="6800-"9EFF, Color=0000FF}, + {Range="3040-"306F, Font=KozGoPr6N-Regular}, + } +]{KozMinPr6N-Regular} +日本国民は、正当に選挙された国会における代表者を通じて行動し、われらとわれらの子孫のために、 +諸国民との協和による成果と、わが国全土にわたつて自由のもたらす恵沢を確保し、…… +\end{LTXexample} +%\caption{\texttt{AltFont} の使用例} +%\caption{An example of \texttt{AltFont}} +\label{fig:altkanji-fontspec} +\end{figure} -本命令は -\begin{center}\tt -\{\}\quad$\longrightarrow$\quad -(の1段展開結果)\{の1段展開結果)\{\}\} -\end{center} -と定義を行うので,使用には注意が必要である: -%\vspace{-\medskipamount} -\begin{itemize} -\item ,~は既に定義されていなければならない. - \cs{reDeclareMathAlphabet}\\の後に -両命令の内容を再定義しても,の内容にそれは反映されない. -\item ,~に\verb+\@mathrm+などと \texttt{@} をつけた命令を指定した時の動作は保証できない. -\end{itemize} -% +\item[AltFont] -\item[\cs{DeclareRelationFont}\{\}\{\}\{\}\{\}\\* - \null\hfill\{\}\{\}\{\}\{\}] %<*en> -This command sets the ``accompanied'' alphabetic font (given by the latter 4~arguments) -with respect to a Japanese font given by the former 4~arguments. +As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec:altfont}) and +\cs{DeclareAlternateKanjiFont}~(Subsection~\ref{ssec:nfsspat}), +with this key, one can typeset some Japanese characters +by a different font and/or using different features. +The \texttt{AltFont} feature takes a comma-separated list of comma-separated lists, +as the following: % %<*ja> -いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントに対して, -そのフォントに対応する「従属欧文」のフォントを後半の4引数により与える. +\ref{ssec:altfont}節の \cs{ltjdeclarealtfont} や, +\ref{ssec:nfsspat}節の \cs{DeclareAlternateKanjiFont} と同様に, +このキーを用いると一部の文字を異なったフォントや機能たちを使って組むことができる. +\texttt{AltFont} キーに指定する値は,次のように二重のコンマ区切りリストである: % -\item[\cs{SetRelationFont}] +\begin{lstlisting}[escapechar=\#] +AltFont = { + ... + { Range=#\LARG range>#, #\LARG features>#}, + { Range=#\LARG range>#, Font=#\LARG font~name>#, #\LARG features># }, + { Range=#\LARG range>#, Font=#\LARG font~name># }, + ... +} +\end{lstlisting} %<*en> -This command is almost same as \cs{DeclareRelationFont}, except that this command does a local -assignment, where \cs{DeclareRelationFont} does a global assignment. +Each sublist should have the \texttt{Range} key +(sublist which does not contain \texttt{Range} key is simply ignored). +A demonstrarion is shown in \autoref{fig:altkanji-fontspec}. % %<*ja> -このコマンドは \cs{DeclareRelationFont} とローカルな指定であることを除いて -ほとんど同じである(\cs{DeclareRelationFont} はグローバル). +各部分リストには \texttt{Range} キーが必須である(含まれない部分リストは +単純に無視される).指定例は\autoref{fig:altkanji-fontspec}に示した. % +\end{cslist} -\item[\cs{userelfont}] -%<*en> -Change current alphabetic font encoding/family/\dots\ to the `accompanied' alphabetic - font family with respect to current Japanese font family, - which was set by - \cs{DeclareRelationFont} or \cs{SetRelationFont}. -Like \cs{fontfamily}, \cs{selectfont} is required to take an effect. -% %<*ja> -現在の欧文フォントのエンコーディング/ファミリ/…… を, -\cs{DeclareRelationFont} か \cs{SetRelationFont} で指定された -現在の和文フォントに対応する「従属欧文」フォントに変更する. -\cs{fontfamily} のように,有効にするためには \cs{selectfont} が必要である. +なお,\Pkg{luatexja-fontspec} 読み込み時には和文フォント定義ファイル% +\texttt{.fd}は全く参照されなくなる. % -\item[\cs{adjustbaseline}] -%<*en> -In \pLaTeXe, \cs{adjustbaseline} sets \cs{tbaselineshift} -to match the vertical center of ``M'' and that of ``あ'' in vertical typesetting: -\[ -\text{\cs{tbaselineshift}} \leftarrow -\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2 - + d_{\text{あ}} - d_{\text{M}}, -\] -where $h_{a}$~and~$d_{a}$ denote the height of ``$a$'' and the depth, respectively. -In \LuaTeX-ja, this \cs{adjustbaseline} does similar task, namely setting the - \Param{talbaselineshift} parameter. -If the \LaTeX\ is 2015/10/01 release or later, \LuaTeX-ja use a Japanese -character whose character class is zero, instead of `あ'. -% -%<*ja> -\pLaTeXe では,\cs{adjustbaseline} は縦組時に「M」と「あ」の中心線を一致させるために, -\cs{tbaselineshift} を設定する役割を持っていた: -\[ -\text{\cs{tbaselineshift}} \leftarrow -\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2 - + d_{\text{あ}} - d_{\text{M}}, -\] -ここで,$h_{a}$,~$d_{a}$はそれぞれ「$a$」の高さ・深さを表す. -\LuaTeX-jaにおいても\cs{adjustbaseline} は同様に\Param{talbaselineshift}パラメータの調整処 - 理を行っている. -同時に,これも\pLaTeXe の \cs{adjustbaseline} で同様の処理が行われていたが, -「漢」の寸法を元に(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} -といった長さ変数を設定する. +%<*en> +\paragraph{Remark on \texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} keys} +\leavevmode\par +In \texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures} keys, +one cannot specify per-shape settings such as \texttt{BoldFeatures}. +For example, +\begin{lstlisting} +AltFont = { + { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, + Range="3000-"30FF, BoldFeatures={Color=007F00} } +} +\end{lstlisting} +does \emph{not} work. Instead, one have to write +\begin{lstlisting} +UprightFeatures = { + AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } }, +}, +BoldFeatures = { + AltFont = { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } }, +} +\end{lstlisting} -なお,\LaTeX が2015/10/01 版以降の場合は,「あ」「漢」の代わりに -「文字クラス0の和文文字」を用いる. -% +On the other hand, \texttt{YokoFeatures}, \texttt{TateFeatures} and \texttt{TateFont} +keys can be specified in each list in the \texttt{AltFont} key. Also, +one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatures}. -\item[\cs{fontfamily}\{\}] -%<*en> -As in \LaTeXe, this command changes current font family (alphabetic, Japanese,~\emph{or both}) -to . See Subsection~\ref{ssec-fontfamilycmd} for detail. +Note that features which are specified in \texttt{YokoFeatures}~and~\texttt{TateFeatures} +are always interpreted \emph{after} other ``direction-independent'' features. +This explains why \cs{addjfontfeatures} at~line~6 in~\autoref{fig:yokotate-fontspec} +has no effect, because a color specification is already done in +\texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. % %<*ja> -元々の\LaTeXe におけるものと同様に,このコマンドは現在のフォントファミリ(欧文, -和文,\emph{もしくは両方})をに変更する.詳細は\ref{ssec-fontfamilycmd}節を参照すること. -% - +\paragraph{\texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} 等の制限} +\texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures}の各キーは +シェイプ別に指定されるべきものであり, +内部では \texttt{BoldFeatures} などのシェイプ別の指定は行うことが出来ない. +例えば. +\begin{lstlisting} +AltFont = { + { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, + Range="3000-"30FF, BoldFeatures={Color=007F00} } +} +\end{lstlisting} +のように指定することは出来ず, +\begin{lstlisting} +UprightFeatures = { + AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } }, +}, +BoldFeatures = { + AltFont = { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } }, +} +\end{lstlisting} +のように指定しなければならない. -\begin{figure}[!tb] -\begin{LTXexample}[pos=b] -\DeclareKanjiFamily{JY3}{edm}{} -\DeclareFontShape{JY3}{edm}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;}{} -\DeclareFontShape{JY3}{edm}{m}{green}{<-> s*KozMinPr6N-Regular:jfm=ujis;color=007F00}{} -\DeclareFontShape{JY3}{edm}{m}{blue} {<-> s*KozMinPr6N-Regular:jfm=ujis;color=0000FF}{} -\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{green}{"4E00-"67FF,{-2}-{-2}} -\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{blue}{ "6800-"9FFF} -{\kanjifamily{edm}\selectfont -日本国民は、正当に選挙された国会における代表者を通じて行動し、……} -\end{LTXexample} -%\caption{\cs{DeclareAlternateKanjiFont} の使用例} -%\caption{An example of \cs{DeclareAlternateKanjiFont}} -\label{fig:altkanji} -\end{figure} +一方,\texttt{AltFont} キー内の各リストでは +\ \texttt{YokoFeatures},~\texttt{TateFeatures} 及び \texttt{TateFont} キーを +指定することは可能であり.また\ \texttt{YokoFeatures},~\texttt{TateFeatures} キーの +中身に \texttt{AltFont} を指定することができる. -\item[\cs{DeclareAlternateKanjiFont}\{\}\{\}\{\}\{\}\\ - \null\hfill\{\}\{\}\{\}\{\}\{\}] -%<*ja> -\ref{ssec-altfont}節の\ -\cs{ltjdeclarealtfont} と同様に,前半の4引数の -和文フォント(基底フォント)のうち中の文字を -第5から第8引数の和文フォントを使って組むように指示する. -使用例を図\nobreak\ref{fig:altkanji}に載せた. +また,\autoref{fig:yokotate-fontspec}後半部では6行目の色の指定が効かず, +2行目で指定した\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による色の指定が有効になっ +たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による +OpenType機能指定は +組方向に依存しないOpenType機能の指定より後に解釈される}からである. -\begin{itemize} - \item -\cs{ltjdeclarealtfont} では基底フォント・置き換え先和文フォントはあらかじめ定義されてい - ないといけない(その代わり即時発効)であったが, -\cs{DeclareAlternateKanjiFont} の設定が -実際に効力が発揮するのは,書体変更やサイズ変更を行った時, -あるいは(これらを含むが)\cs{selectfont} が実行された時である. - \item -段落やhboxの最後での設定値が段落/hbox全体にわたって通用する点や, -に負数$-n$を指定した場合,それが「基底フォントの文字クラス$n$に属する文字全体」 -と解釈されるのは \cs{ltjdeclarealtfont} と同じである. -\end{itemize}% % -%<*en> -As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec-altfont}), -characters in of the Japanese font (we say the \emph{base font}) -which specified by first 4 arguments are typeset -by the Japanese font which specified by fifth to eighth arguments -(we say the \emph{alternate font}). -An example is shown in \autoref{fig:altkanji}. -\begin{itemize} - \item -In \cs{ltjdeclarealtfont}, the base font and the alternate font must be already defined. -But this \cs{DeclareAlternateKanjiFont} is not so. -In other words, \cs{DeclareAlternateKanjiFont} is effective only after -current Japanese font is changed, or only after \cs{selectfont} is executed. - \item \dots -\end{itemize}% -\vspace{-\medskipamount} -% -\end{cslist} +\subsection{\Pkg{luatexja-otf}} +\label{ssec:ltjotf} +%<*en> +This optional package supports typesetting glyphs +by specifying a CID number. +The package \Pkg{luatexja-otf} offers the following 2~low-level +commands: +% +%<*ja> +この追加パッケージはCID番号による文字の出力をサポートする. +\Pkg{luatexja-otf}は以下の2つの低レベルコマンドを提供する: +% +\begin{cslist} +\item[\cs{CID}\{\}] %<*en> -As closing this subsection, we shall introduce an example of -\cs{SetRelationFont} and \cs{userelfont}: +Typeset a glyph whose CID number is . +If the Japanese font is neither Adobe-Japan1,~Adobe-GB1, Adobe-CNS1, +Adobe-Korea1,~nor~Adobe-KR CID-keyed font, +\LuaTeX-ja treats that is a CID number of Adobe-Japan1 character collection, +and tries to typeset a ``most suitable glyph''. % %<*ja> -この節の終わりに,\cs{SetRelationFont} と \cs{userelfont} の例を -紹介しておこう.\cs{userelfont} の使用によって,「abc」の部分のフォントが -Avant Garde (OT1/pag/m/n) に変わっていることがわかる. +CID番号がの文字を出力する. +もし現在の和文フォントがAdobe-Japan1,~Adobe-GB1, Adobe-CNS1, Adobe-Korea1,~Adobe-KRの + いずれのCID-keyed fontでもない場合,はAdobe-Japan1のCID番号であると解釈し + 「適切なグリフ」\footnote{% + 特に縦組用グリフのCID番号を指定した場合は(LuaTeX-ja 20190504.0以降では若干改良されているが) + 意図しない結果になる可能性が高い. + なお,バージョン20190708.0以降では,CIDからグリフへの選択にグリフ名の情報を使用していない. + また,フォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて + グリフを選択する. +}を出力する. % -\begin{LTXexample}[width=0.3\textwidth] -\makeatletter -\SetRelationFont{JY3}{\k@family}{m}{n}{OT1}{pag}{m}{n} - % \k@family: current Japanese font family -\userelfont\selectfont あいうabc -\end{LTXexample} -%\subsection{Detail of \cs{fontfamily} command} -%\subsection{\cs{fontfamily}コマンドの詳細} -\label{ssec-fontfamilycmd} +\item[\cs{UTF}\{\}] %<*en> -In this subsection, we describe when \cs{fontfamily} changes current -Japanese/alphabetic font family. Basically, current Japanese fotn family is changed to - if it is recognized as a Japanese font family, and similar with alphabetic font -family. There is a case that current Japanese/alphabetic font family are both changed to -, and another case that isn't recognized as a Japanese/alphabetic font -family either. - -\paragraph{Recognition as Japanese font family} -First, Whether Japanese font family will be changed is determined in following order. -This order is very similar to \cs{fontfamily} in \pLaTeXe, but we re-implemented in Lua. -We use an auxiliary list~$N_{\mathrm{J}}$. +Typeset a character whose character code is (in hexadecimal). +This command is similar to \verb+\char"+,\ %" +but please remind remarks below. % %<*ja> -本節では,\cs{fontfamily} がいつ和文/欧文フォントファミリを変更するかについて解説 -する.基本的には,が和文フォントファミリだと認識されれば和文側が,欧文フォントファ -ミリだと認識されれば欧文側が変更される.どちらとも認識されれば和文・欧文の両方が変わるこ -とになるし,当然どちらとも認識されないこともある. +文字コードが(16進で)の文字を出力する. +このコマンドは \verb+\char"+と似ているが,下の注意を参照すること.%" +% +\end{cslist} -\paragraph{和文フォントファミリとしての認識} -まず,が和文フォントファミリとして認識されるかは以下の順序で決定される. -これは\pLaTeXe の \cs{fontfamily} にとても似ているが,ここではLuaによって実装している. -補助的に「和文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{J}}$を用いる. +%<*ja> +このパッケージは,マクロ集 \texttt{luatexja-ajmacros.sty}\footnote{\Pkg{otf}パッケージ付属の井上浩一氏によるマクロ集 +\texttt{ajmacros.sty} に対して +漢字コードをUTF-8にしたり,plain \LuaTeX でも利用可能にするという +修正を加えたものである.}\ も自動的に読み込む. +\texttt{luatexja-ajmacros.sty} は, +そのため,\Pkg{luatexja-otf} を読みこめば \texttt{ajmacros.sty} マクロ集にある \cs{aj半角} などのマクロもそのまま使うことができる. % -\begin{enumerate} %<*en> -\item If the family~ has been defined already by \cs{DeclareKanjiFamily}, - is recognized as a Japanese font family. - Note that need not be defined under \emph{current} Japanese font encoding. +This package automatically loads \texttt{luatexja-ajmacros.sty}, which is slightly +modified version of \texttt{ajmacros.sty}\footnote{Useful macros by iNOUE Koich!, for the +\Pkg{japanese-otf} package.}. +Hence one can use macros which sre defined in \texttt{ajmacros.sty}, such as~\cs{aj半角}. % -%<*ja> -\item ファミリが既に \cs{DeclareKanjiFamily} によって定義されている場合, - は和文フォントファミリであると認識される. - ここで,は現在の和文フォントエンコーディングで定義されていなくてもよい. -% + +%\paragraph{Remarks} +%\paragraph{注意} %<*en> -\item If the family~ has been listed in a list~$N_{\mathrm{J}}$, this means - that is not a Japanese font family. +Characters by \cs{CID} and \cs{UTF} commands are different from +ordinary characters in the following points: % %<*ja> -\item ファミリがリスト$N_{\mathrm{J}}$に既に含まれていれば,それは - が和文フォントファミリではないことを意味する. +\cs{CID} と \cs{UTF} コマンドによって出力される文字は +以下の点で通常の文字と異なる: % +\begin{itemize} %<*en> -\item If the \Pkg{luatexja-fontspec} package is loaded, we stop here, and is not - recognized as a Japanese font family. - - If the \Pkg{luatexja-fontspec} package is \emph{not} loaded, -now \LuaTeX-ja looks whether there exists a Japanese font encoding~ such that - a font definition named \texttt{.fd} (the file name is - all lowercase) exists. If so, is recognized as a Japanese font family (the font definition file won't be loaded here). - If not, is not a Japanese font family, and - is appended to the list~$N_{\mathrm{J}}$. +\item Always treated as \textbf{JAchar}s. % %<*ja> -\item もし\Pkg{luatexja-fontspec}パッケージが読み込まれていれば,ここで終了であり, -は和文フォントファミリとして認識されないことになる. - -もし\Pkg{luatexja-fontspec}パッケージが読み込まれていなければ,和文エンコーディングで -フォント定義ファイル\texttt{.fd}(ファイル名は全て小文字)が存在するようなも - のがあるかどうかを調べる. -存在すれば,は和文フォントファミリと認識される(フォント定義ファイルは読み込まれな - い). -存在しなければ,は和文フォントファミリでないと認識され,リスト$N_{\mathrm{J}}$にを追加することでそれを記憶する. - +\item 常に\textbf{JAchar}として扱われる. % -\end{enumerate} - %<*en> -\paragraph{Recognition as alphabetic font family} -Next, whether alphabetic font family will be changed is determined in following order. -We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, +\item In vertical direction, \texttt{vert}/\texttt{vrt2} feature are automatically applied to + characters by \cs{UTF}, regardless these feature are not activated in current Japanese font. % %<*ja> -\paragraph{欧文フォントファミリとしての認識} -同様に,が和文フォントファミリとして認識されるかは以下の順序で決定される. -補助的に「欧文フォントファミリと既に認識された」ファミリのリスト$F_{\textrm{A}}$と, -「欧文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{A}}$を用いる. +\item 縦組時には,現在の縦組用和文フォントで \texttt{vert}/\texttt{vrt2} 機能が + 有効か無効かを問わず,\cs{UTF} で出力される文字にはこれらのOpenType機能が働いた字形になる. % - -\begin{enumerate} %<*en> -\item If the family~ has been listed in a list~$F_{\mathrm{A}}$, - is recognized as an alphabetic font family. +\item Processing codes for supporting other OpenType features (for example, + glyph replacement and kerning) by the \Pkg{luaotfload} package + is not performed to these characters. % %<*ja> -\item ファミリがリスト$F_{\mathrm{A}}$に既に含まれていれば, - は欧文フォントファミリと認識される. +\item その他のOpenType機能(例えばグリフ置換やカーニング)をサポートするための + \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない. % +\end{itemize} + +%\paragraph{Additional syntax of JFM} +%\paragraph{JFMへの記法の追加} + %<*en> -\item If the family~ has been listed in a list~$N_{\mathrm{A}}$, this means - that is not an alphabetic font family. +The package \Pkg{luatexja-otf} extends the syntax of JFM; the entries of \texttt{ +chars} table in JFM now allows a string in the form +\verb+'AJ1-xxx'+, which stands for the character +whose CID number in Adobe-Japan1 is \verb+xxx+. + +This extended notation is used in the standard JFM \texttt{jfm-ujis.lua} +to typeset halfwidth Hiragana glyphs (CID~516--598) in halfwidth. % %<*ja> -\item ファミリがリスト$N_{\mathrm{A}}$に既に含まれていれば,それは - が欧文フォントファミリではないことを意味する. +\Pkg{luatexja-otf}パッケージを読み込むと, +JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形の文字列が +使えるようになる.これはAdobe-Japan1におけるCID番号が \verb+xxx+ の文字を表す. + +この拡張記法は,標準JFM~\texttt{jfm-ujis.lua}で,半角ひらがなのグリフ(CID~516--598)を +正しく半角幅で組むために利用されている. % + +\subsection{\Pkg{luatexja-adjust}} +\label{ssec:adj} +\begin{figure}[t] +\def\sq{% + \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% +  \hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% + \hskip\dimexpr.5\zw-.2pt\relax}\hss}} +\def\sb{\hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% + ■\hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% + \hskip\dimexpr.5\zw-.2pt\relax}\hss}} +\newbox\gridbox +\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}{\copy\gridbox}\hskip-20\zw% + \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}% +}} + +{\centering +\begin{tabular}{lc} +\toprule +no adjustment&\outbox{以上の原理は,「包除原理」とよく呼ばれるが\hskip-.5\zw\null}\\ +without priority&% +\ltjdisableadjust +\outbox{以上の原理は,「包除原理」とよく呼ばれるが}% +\ltjenableadjust\\ +with priority&% +\outbox{以上の原理は,「包除原理」とよく呼ばれるが} +%\ltjdisableadjust +\\ +\bottomrule +\end{tabular}\par} +\medskip + +\fakefn{}{The value of +\Param{kanjiskip} is 0\,pt${}^{+1/5\,\mathrm{em}}_{-1/5\,\mathrm{em}}$ in this figure, +for making the difference obvious.} +%\caption{行長調整}\label{fig:adj} +%\caption{Line adjustment}\label{fig:adj} +\end{figure} + + %<*en> -\item If there exists an alphabetic font encoding such that the family~ has been - defined under it, is recognized as an alphabetic font family, and - to memorize this, is appended to the list~$F_{\mathrm{A}}$. +(see Japanese version of this manual) % %<*ja> -\item ある欧文フォントエンコーディング下でファミリが定義されていれば, - は欧文フォントファミリと認識され,リスト$F_{\mathrm{A}}$にを追加することでこのことを記憶する. +この追加パッケージは以下の機能を提供する.詳細な仕様については\ref{sec-adjspec}章を参照してほしい. +\begin{description} + \item[行末文字の位置調整] + \pTeX では,(是非はともかく)「行末の読点はぶら下げか二分取りか全角取りのいずれかに」のように + 行末文字と実際の行末の位置関係を2通り以上にすることは面倒であった. + 和文フォントメトリックだけでは「常に行末の読点はぶら下げ」といったことしかできず, + 前の文に書いたことを実現するには + \begin{lstlisting} +\def\。{% + \penalty10000 % 禁則ペナルティ + \hbox to0pt{。\hss}\penalty0 % ぶら下げの場合 + \kern.5\zw\penalty0 % 二分取りの場合 + \kern.5\zw\penalty0 % 全角取りの場合 +} +\end{lstlisting} + のような命令を定義し,文中の全ての句点を \lstinline+\。+ で書くことが必要だった. + + \Pkg{luatexja-adjust}パッケージは,上で述べた行末文字と実際の行末との位置関係を + 2通り以上から自動的に選択する機能を提供する. + \pdfTeX と同じように,「\TeX による行分割の後で行末文字の位置を補正する」方法と + 「行分割の過程で行末文字の位置を考慮に入れる」方法を選べるようにした + (\Pkg{luatexja-adjust}パッケージの既定では前者). + + \item[優先順位付きの行長調整] + \pTeX では,行長調整において優先度の概念が存在しなかったため,図 + \ref{fig:adj}上段における半角分の半端は,\autoref{fig:adj}中段のように,鍵 + 括弧周辺の空白と和文間空白(\Param{kanjiskip})の両方によって負担される.し + かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい + ては,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文 + 文字はベタ組で組まれる(\autoref{fig:adj}下段)ことになっている. + \Pkg{luatexja-adjust}パッケージの提供する第2の機能は, + \cite{jlreq}や\cite{x4051}における規定のような,優先順位付き + の行長調整である. + \begin{itemize} + \item 優先度付き行長調整は,段落を行分割した後に個々の行について行われるものである. + そのため,行分割の位置は変化することはない. + + \verb+\hbox{...}+ といった「途中で改行できない水平ボックス」では(たとえ幅が指定されていても)無効である. + \item 優先度付き行長調整を行うと,和文処理グルーの自然長は変化しないが,伸び量や縮み量は + 一般に変化する.そのため,既に組まれた段落を \cs{unhbox} などを利用して組み直す処理を + 行う場合には注意が必要である. + \end{itemize} + + \item[「中身までみた」行送り計算] + 複数行に渡る文章を組版するときには行間に空きが入ることが普通である. + \TeX では各行が一つずつの水平ボックスをなしていることを思い出すと,隣り合った + 2つの行(つまり水平ボックス)の間の空きは次のようにして決まるのだった: + \begin{itemize} + \item 「通常に組んだときの行間」$d$を,\cs{baselineskip}から + 「前の行」の深さと「次の行」の高さを加えたものを引いた値とする. + \item $d\ge\cs{lineskiplimit}$の場合, + 標準の行送り\cs{baselineskip}で組んでも十分な間隔があると判断され, + 2行の間には長さ$d$の空白が挿入される.つまり行送りは\cs{baselineskip}. + \item {\catcode`\<=12$d<\cs{lineskiplimit}$}の場合, + 2行の間には長さ\cs{lineskip}の空白が挿入される. + そのため(設定値によるが,多くの場合)行送りは\cs{baselineskip}より広がる. + \end{itemize} + + \begin{figure}[t] + \noindent\centering + \begin{minipage}[b]{18\zw} + \ltjenableadjust[profile=false, linestep=false] + ……だから,①より$\dfrac{a^2}{b} = \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (a)} + \end{minipage}% + \kern2\zw + \begin{minipage}[b]{18\zw} + \ltjenableadjust[profile] + ……だから,①より$\dfrac{a^2}{b} = \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (b)} + \end{minipage}\par + \caption{高い行が連続したときの状況}\label{fig:linegap1} + \end{figure} + + ここで,\TeX は行送りの決定で「高さ・深さを取っているものが + 行のどの水平位置にあるか」は一切考慮しないことに注意してほしい.そのため, + \autoref{fig:linegap1}~(a)のように「必要以上に行間が空いて見える」状況が起こることがある. + + \Pkg{luatexja-adjust}パッケージでは,「通常に組んだときの行間」$d$を + 各行の中身の文字・グルー・ボックスの寸法を勘案して計算するという方法を + 利用できるようにした.この機能を使うと,\autoref{fig:linegap1}~(b)のように + 行間の空きが必要以上に大きくなることを避けることができる. + \begin{itemize} + \item 段落中の隣り合った二行だけでなく,行間の空きは + 新たに水平ボックス$h$を(内部・外部問わず)垂直モードで追加した時にも自動で挿入される. + その場合には,前段落で述べた「中身までみる」処理は + \begin{itemize} + \item 現在のリストにおける最後のノード + \footnote{最後のノードが\cs{parskip}によるグルーであった場合のみ + さらに一つ前のノードを参照する}が水平ボックス$h'$であり,かつ + \item \cs{prevdepth}の値とその$h'$の深さの値が一致している + \end{itemize} + 場合にのみ発動するようにしている. + \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身の高さ・深さまでは + 参照せず,あくまでも$h''$自身の高さ・深さのみを参照する. + 参照するようにしてしまうと,\cs{smash}など手動で行った高さ・深さ調整の意味がなくなってしまうからである. + \end{itemize} + + \begin{figure}[t] + \noindent\centering + \begin{minipage}[b]{16\zw} + \ltjenableadjust[profile] + ……だから,①より$\dfrac{a^2}{b}= \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (a): 無効} + \end{minipage}% + \kern2\zw + \begin{minipage}[b]{16\zw} + \ltjsetparameter{linestep_factor=0.25} + \ltjenableadjust[profile, linestep] + ……だから,①より$\dfrac{a^2}{b} = \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (b): $0.25$\cs{baselineskip}刻み} + \end{minipage}\par\medskip + \begin{minipage}[b]{16\zw} + \ltjsetparameter{linestep_factor=0.5} + \ltjenableadjust[profile, linestep] + ……だから,①より$\dfrac{a^2}{b} = \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (c): 0.5\cs{baselineskip}刻み} + \end{minipage}% + \kern2\zw + \begin{minipage}[b]{16\zw} + \ltjsetparameter{linestep_factor=1} + \ltjenableadjust[profile, linestep] + ……だから,①より$\dfrac{a^2}{b} = \dfrac{1+\sqrt{5}}2$.\\ + よって$b=\dfrac{1-\sqrt{5}}2$である.\\ + これを②式に代入すると…… + \par\vskip\abovecaptionskip + \ltjenableadjust[profile=false, linestep=false] + \par\centering\leavevmode{\small (d): \cs{baselineskip}刻み} + \end{minipage}\par + \caption{段階的な行送り増加}\label{fig:linegap2} + \end{figure} + + \item[段階的な行送り調整] + 既に述べたように, + 「通常に組んだときの行間」$d$が\cs{lineskiplimit}より小さい場合,\TeX 標準では + 行間は\cs{lineskip}となるのだった. + このとき行送りは「前の行の深さ」,「次の行の高さ」,\cs{lineskip}の3つの和になるわけだが, + 場合によっては行送りを「\cs{baselineskip}の整数倍」などと切りのいい値に揃えたいという状況が + 考えられなくもない. + + \Pkg{luatexja-adjust}パッケージでは,{\catcode`\<=12$d<\cs{lineskiplimit}$}のときに + 行送りを\cs{baselineskip}の\Param{linestep\_factor}倍ずつ増減させて + \begin{quote} + 行間が\cs{lineskip}以上となるような, + 最小の$(1+k\cdot \Param{linestep\_factor})\cs{baselineskip}$($k$は整数)の値 + \end{quote} + とする機能を利用できるようにした. + \autoref{fig:linegap2}の(a)がこの機能を無効にした状況で,(b),~(c),~(d)が + それぞれ\Param{linestep\_factor}を0.25,~0.5,~1とした状況である. + + なお,この機能は表組時(\cs{halign},~\cs{valign})には無効である. + \LaTeX における表組環境(tabular, arrayなど)では,\cs{baselineskip},~\cs{lineskip}はどちらも0に設定されているので + (代わりに各行に\cs{@arstrut}という支柱が入る)ために意味がないことと, + 数式を内部で表組を使って組むalign環境などではかえって行間が不揃いになってしまうからである. +\end{description} + +\Pkg{luatexja-adjust}パッケージは,上記で述べた4機能を有効化/無効化するための +以下の命令を提供する.これらはすべてグローバルに効力を発揮する. + +\begin{cslist} +\item[\cs{ltjenableadjust[...]}] +\verb+...+ に指定したkey-valueリストに従い,「行末文字の位置調整」「優先順位付きの行長調整」 + 「『中身までみた』行送り計算」「段階的な行送り調整」を有効化/無効化する. +指定できるキーは以下の通り. +\begin{description} + \item[\texttt{lineend=[false,true,extended]}] + 行末文字の位置調整の機能を無効化(\texttt{false}),「行分割後に調整」の形で有効化(\texttt{true}), + 「行分割の過程で考慮」の形で有効化(\texttt{extended})する. + \item[\texttt{priority=[false,true]}] + 優先順位付きの行長調整を無効化(\texttt{false}),または有効化(\texttt{true}). + \item[\texttt{profile=[false,true]}] + 「中身までみた」行送り計算を無効化(\texttt{false}),または有効化(\texttt{true}). + \item[\texttt{linestep=[false,true]}] + 段階的な行送り調整を無効化(\texttt{false}),または有効化(\texttt{true}). +\end{description} +どのキーともキー名のみを指定した場合は値として\texttt{true}が指定されたものと扱われる. + +互換性の為,オプション無しでただ\cs{ltjenableadjust}が呼び出された場合は, +\begin{lstlisting} +\ltjenableadjust[lineend=true,priority=true] +\end{lstlisting} +と扱われる. + +\item[\cs{ltjdisableadjust}] +\Pkg{luatexja-adjust}パッケージの機能を無効化する. +\begin{lstlisting} +\ltjenableadjust[lineend=false,priority=false,profile=false,linestep=false] +\end{lstlisting} +と同義. +\end{cslist} + +また,次のパラメータが\cs{ltjsetparameter}内で +追加される.いずれもグローバルに効力を発揮する. +\begin{cslist}[style=standard] +\item[\DParam{stretch\_priority}\,=\{\}] +\Param{kanjiskip}, \Param{xkanjiskip},および「\textbf{JAglue}以外のグルー」を, +「行を自然長より伸ばす」場合の調整に用いる優先度を指定する. + +指定方法は,の中にkey-value listの形で +\begin{lstlisting} +stretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50} +\end{lstlisting} +のようにして行う.キー名\texttt{kanjiskip},~\texttt{xkanjiskip}については +そのままの意味であり, +\texttt{others}キーが「\textbf{JAglue}以外のグルー」を表す. +各キーの値は,JFMグルーにおける「優先度$i$」を$10i$に対応させた整数値であり, + 大きい方が先に伸ばされることを意味している. + 初期値は +\begin{lstlisting} +{kanjiskip=-35,xkanjiskip=-25,others=50} +\end{lstlisting} +であり,「優先度$-4$」と指定されているJFMグルーが最も伸びにくいようになっている. + +\item[\DParam{shrink\_priority}\,=\{\}] +同様に,「行を自然長より縮める」場合の調整に用いる優先度を指定する. +それ以外は\Param{stretch\_priority}と指定の形式は変わらない(初期値も変わらない). + + \item[\DParam{linestep\_factor}\,=] + 段階的な行送り調整の際,\cs{baselineskip}の自然長の何倍単位で行送りを変えるかを指定する. + 0を指定すると無効になるのと変わらない.また負数を指定すると, + その絶対値が指定されたかのように扱われる. + 初期値は0.5(つまり半行単位)である. + + \item[\DParam{profile\_hgap\_factor}\,=] + 「中身まで見た」行送り計算の際, + 前の行にある深さが大きいものと次の行にある高さが大きいものが + 水平方向にどれだけ離れていないといけないかを + 「\cs{lineskip}の自然長の何倍か」で指定する. + 負数を指定すると,その絶対値が指定されたかのように扱われる. + 初期値は1(つまり\cs{lineskip}(の自然長))である. +\end{cslist} % + +\subsection{\Pkg{luatexja-ruby}} %<*en> -\item Now \LuaTeX-ja looks whether there exists an alphabetic font encoding~ such that - a font definition named \texttt{.fd} (the file name is - all lowercase) exists. If so, current alphabetic font family will be changed to - ~(the font definition file won't be loaded here). - If not, current alphabetic font family won't be changed, and - is appended to the list~$N_{\mathrm{A}}$. +This addon package provides functionality of ``ruby'' (\emph{furigana}) annotations +using callbacks of \LuaTeX-ja. +There is no detailed manual of \Pkg{luatexja-ruby.sty} in English. +(Japanese manual is another PDF file, \url{luatexja-ruby.pdf}.) % %<*ja> -\item 最終段階では,欧文エンコーディングで -フォント定義ファイル\texttt{.fd}(ファイル名は全て小文字)が存在するようなも - のがあるかどうかを調べる. -存在すれば,は欧文フォントファミリと認識される(フォント定義ファイルは読み込まれない). -存在しなければ,は欧文フォントファミリと認識されないので,リスト$N_{\mathrm{A}}$に - を追加してそのことを記憶する. +この追加パッケージは,\LuaTeX-jaの機能を利用したルビ(振り仮名)の組版機能を提供する. +前後の文字種に応じた前後への自動進入や, +行頭形・行中形・行末形の自動的な使い分けが特徴である. + +ルビ組版に設定可能な項目や注意事項が多いため,本追加パッケージの詳細な説明は +使用例と共に \url{luatexja-ruby.pdf}\ という別ファイルに載せている. +この節では簡単な使用方法のみ述べる. % -\end{enumerate} +\begin{description} %<*en> -Also, each call of \cs{DeclareFontFamily} \emph{after} loading of \LuaTeX-ja makes -the second argument (family) is appended to the list~$F_{\mathrm{A}}$. + \item[Group-ruby] +By default, ruby characters (the second argument of \cs{ruby}) +are attached to base characters (the first argument), as one object. +This type of ruby is called \emph{group-ruby}. % %<*ja> -また,\cs{DeclareFontFamily}が\LuaTeX-jaの読み込み後に実行された場合は, -第2引数(ファミリ名)が自動的に$F_{\mathrm{A}}$に追加される. + \item[グループルビ] 標準ではグループルビの形で組まれる.第1引数に親文字, +第2引数にルビを記述する. % - +\begin{LTXexample}[width=0.3\textwidth] +東西線\ruby{妙典}{みようでん}駅は……\\ +東西線の\ruby{妙典}{みようでん}駅は……\\ +東西線の\ruby{妙典}{みようでん}という駅……\\ +東西線\ruby{葛西}{かさい}駅は…… +\end{LTXexample} %<*en> -The above order is very similar to \cs{fontfamily} in \pLaTeXe, but more complicated (clause~3.). -This is because \pLaTeXe\ is a \emph{format} however \LuaTeX-ja is not, -hence \LuaTeX-ja does not know calls of \cs{DeclareFontFamily} \emph{before} itself is -loaded. +As the above example, ruby hangover is allowed on the Hiragana before/after +its base characters. % -%<*ja> -以上の方針は\pLaTeXe における \cs{fontfamily} にやはり類似しているが,3.が加わり若干複雑になっている. -それは\pLaTeXe がフォーマットであるのに対し\LuaTeX-jaはそうでないため, -\LuaTeX-jaは自身が読み込まれる前にどういう\cs{DeclareFontFamily}の呼び出しがあったか -把握できないからである. -% +% この例のように,標準では前後の平仮名にルビ全角までかかるようになっている. -%\paragraph{Remarks} -%\paragraph{注意} %<*en> -Of course, there is a case that is not recognized as a Japanese font family, nor -an alphabetic font family. -In this case, \LuaTeX-ja treats ``the argument is wrong'', so -set both current alphabetic and Japanese font family to , -to use the default family for font substitution. +\item[Mono-ruby] +To attach ruby characters to each base characters (\emph{mono-ruby}), +one should use \cs{ruby} multiple times: % %<*ja> -さて,引数によっては,「和文フォントファミリとも欧文フォントファミリも認識されなかった」 -という事態もあり得る. - この場合,引数は不正だった,ということになるので, -和文・欧文の両方のフォントファミリをに設定し,代用フォントが使われるに任せることにする. + \item[モノルビ] 親文字を1文字にするとモノルビとなる. +2文字以上の熟語をモノルビの形で組みたい場合は,面倒でも +その数だけ \cs{ruby} を書く必要がある. % +\begin{LTXexample}[width=0.3\textwidth] +東西線の\ruby{妙}{みよう}\ruby{典}{でん}駅は…… +\end{LTXexample} %<*en> -\subsection{Notes on \cs{DeclareTextSymbol}} -From \LaTeX~2017/01/01, the standard encoding of \LuaLaTeX\ is changed to the \texttt{TU} -encoding. This menas that symbols defined by \texttt{T1}~and~\texttt{TS1} encodings can be used -without loading any package. To produces these symbols in alphabetic fonts in \LuaTeX-ja, -\LuaTeX-ja patches \cs{DeclareTextSymbol}, and reloads \texttt{tuenc.def}. - -Under original definition of \cs{DeclareTextSymbol}, -internal commands which is defined by \cs{DeclareTextSymbol} (such as \cs{T1\cs{textquotedblleft}}) -are \textit{chardef} tokens. However, this no longer holds in \LuaTeX-ja; -for example, the meaning of \cs{TU\cs{textquotedblleft}} is \cs{ltjalchar8220\ltjalchar"2423 }. + \item[Jukugo-ruby] +Vertical bar~\verb+|+ denotes a boundary of \emph{groups}. % %<*ja> -\subsection{\cs{DeclareTextSymbol}使用時の注意} -\LaTeX~(2017/01/01)以降では,\texttt{TU}エンコーディングが標準となり,特に何もしなくても -\texttt{T1},~\texttt{TS1}エンコーディングで定義されていた記号類が -使えるようになった.\LuaTeX-jaではこれらの命令によって記号が欧文フォントで出力されるようにするため, -\cs{DeclareTextSymbol}命令を改変し,そして\texttt{TU}エンコーディングの定義である -\texttt{tuenc.def}を再読込している. - -従来は \cs{DeclareTextSymbol} で内部的に定義された\cs{T1\cs{textquotedblleft}}といった命令は -\textit{chardef}トークンであった.しかし前段落で述べた改変によりもはやそうではなくなっており,例えば -\cs{TU\cs{textquotedblleft}}は \cs{ltjalchar8220\ltjalchar"2423 } という定義になっている.%" + \item[熟語ルビ] 引数内の縦棒 \verb+|+ はグループの区切りを表し, +複数グループのルビは熟語ルビとして組まれる. +\cite{x4051}にあるように, +どのグループでも「親文字」が対応するルビ以上の長さの場合は +各グループごとに,そうでないときは全体をまとめて1つのグループルビとして組まれる. +\cite{jlreq}で規定されている組み方とは異なるので注意. % - -\begin{table}[t] - \centering\small - \caption{strut}\label{tab:strutbox} - \begin{tabular}{llcccl} - \toprule - \textbf{box}&\textbf{direction}&\textbf{width}&\textbf{height}&\textbf{depth} - &\textbf{user command}\\ - \midrule - \cs{ystrutbox}&yoko&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{ystrut}\\\midrule - \cs{tstrutbox}&tate, utod&0&0.5\cs{baselineskip}&0.5\cs{baselineskip}&\cs{tstrut}\\\midrule - \cs{dstrutbox}&dtou&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{dstrut}\\\midrule - \cs{zstrutbox}&---&0&0.7\cs{baselineskip}&0.3\cs{baselineskip}&\cs{zstrut}\\\bottomrule - \end{tabular} -\end{table} +\begin{LTXexample} +\ruby{妙|典}{みよう|でん}\ +\ruby{葛|西}{か|さい}\ +\ruby{神楽|坂}{かぐら|ざか} +\end{LTXexample} %<*en> -\subsection{\cs{strutbox}} -As \pLaTeX~(2017/04/08 or later), \cs{strutbox} is \emph{a macro} which is expanded to one of -\cs{ystrutbox},~\cs{tstrutbox},~and~\cs{dstrutbox} -(all of them are shown in \autoref{tab:strutbox}), according to the current direction. -Similarly, \cs{strut} now uses one of these boxes. +If there are multiple groups in one \cs{ruby} call, +A linebreak between two groups is allowed. % -%<*ja> -\subsection{\cs{strutbox}} -\pLaTeX~2017/04/08以降と同じように, -\cs{strutbox}は現在の組方向によって\cs{ystrutbox}, \cs{tstrutbox}, \cs{dstrutbox}の -いずれかに展開される\emph{マクロ}となっている(これらについては\autoref{tab:strutbox}参照). -同様に\cs{strut}もこの3\nobreak ボックスのいずれかを組方向によって使い分けるようになっている. - -\cs{zstrutbox}はutod方向(\pTeX でいう縦数式ディレクション)で使われる支柱ボックスであるが, -実際に使われるのは\cs{zstrut}が明示的に発行された時,そして -\Pkg{lltjext}パッケージで追加される組方向指定で \texttt{} を指定した時,および -周囲が縦組の状況で \texttt{} を指定した時に限られている. -% +% 複数ルビではグループとグループの間で改行が可能である. +\begin{LTXexample}[width=0.3\textwidth] +\vbox{\hsize=6\zw\noindent + \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} + \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} + \hbox to 3\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} +} +\end{LTXexample} +\end{description} %<*en> -\section{Addon packages} -\LuaTeX-ja has several addon packages. -These addons are written as \LaTeX\ packages, but -\Pkg{luatexja-otf} and~\Pkg{luatexja-adjust} can be loaded in plain \LuaTeX\ -by \cs{input}. +If the width of ruby characters are longer than that of base characters, +\cs{ruby} automatically selects the appropriate form +among the line-head form, the line-middle form, and the line-end form. % %<*ja> -\section{拡張パッケージ} -\LuaTeX-jaには(動作には必須ではないが)自由に読み込める拡張が付属している. -これらは\LaTeX のパッケージとして制作しているが, -\Pkg{luatexja-otf}と\Pkg{luatexja-adjust}についてはplain \LuaTeX でも\ -\cs{input} で読み込み可能である. +また,ルビ文字のほうが親文字よりも長い場合は,自動的に +行頭形・行中形・行末形のいずれか適切なものを選択する. % -\subsection{\Pkg{luatexja-fontspec}} -\label{ssec-fontspec2} -%<*en> -As described in Subsection~\ref{ssec-fontspec}, this optional package -provides the counterparts for several commands defined in the -\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: -% +\begin{LTXexample}[width=0.3\textwidth] +\vbox{\hsize=8\zw\noindent +\null\kern3\zw ……を\ruby{承}{うけたまわ}る + \kern1\zw ……を\ruby{承}{うけたまわ}る\\ +\null\kern5\zw ……を\ruby{承}{うけたまわ}る +} +\end{LTXexample} + + %<*ja> -\ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}% -パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する. +\subsection{\Pkg{lltjext}} +\pLaTeX では縦組用の拡張として \Pkg{plext} パッケージが用意されていたが, +それを\LuaTeX-ja用に書きなおしたものが本追加パッケージ \Pkg{lltjext} である. -\Pkg{fontspec}パッケージで指定可能な各種OpenType機能に加えて,和文版のコマンドには -以下の「フォント機能」を指定することができる: -% +従来の \Pkg{plext} パッケージとの違いは, +{\catcode`\<=12 +\begin{itemize} + \item 組方向オプション \texttt{}(横組),\texttt{}(縦組), +\texttt{}\ の他に\ \texttt{}(dtou方向),\texttt{}(utod方向)を追加した. +\texttt{} と \texttt{} の違いは,\texttt{} が(\Pkg{plext} パッケージと同様に) +周囲の組方向が縦組のときにしか意味を持たない + \footnote{% + 周囲の組方向が縦組以外のときは,\texttt{} を指定しても中身の組方向は周囲の組方向と変わらない. + }% +のに対し,\texttt{} にはそのような制限がないことである. + \item 連数字用命令 \cs{rensuji} における位置合わせオプション \texttt{[l]}, \texttt{[c]}, + \texttt{[r]} の挙動を若干変更した. +\end{itemize} +} +% +%<*en> +\subsection{\texttt{lltjext.sty}} +\pLaTeX\ supplies additional macros for vertical writing in the \Pkg{plext} package. +The \Pkg{lltjext} package which we want to describe here is the \LuaTeX-ja +counterpart of the \Pkg{plext} package. +% +%<*ja> +念の為,本 \Pkg{lltjext} パッケージで追加・変更している命令の一覧を載せておく. \begin{cslist} -\item[CID=\textrm{, }JFM=\textrm{, }JFM-var=] +\item[tabular\textrm{, }array\textrm{, }minipage環境] +これらの環境は, +\begin{lstlisting} +\begin{tabular}[pos]{table spec} ... \end{tabular} +\begin{array}[pos]{table spec} ... \end{array} +\begin{minipage}[pos]{width} ... \end{minipage} +\end{lstlisting} +のように,組方向オプション \texttt{\} が拡張されている. +既に述べたように,組方向オプションに指定できる値は以下の5つであり, +それ以外を指定した時や無指定時は周囲の組方向と同じ組方向になる. +\begin{description} + \item[y] 横組(\cs{yoko}) + \item[t] 縦組(\cs{tate}) + \item[z] 周囲が縦組の時はutod方向,それ以外はそのまま + \item[d] dtou方向 + \item[u] utod方向 +\end{description} +\item[\cs{parbox}\<\>{[]}\{\}\{\}] +\cs{parbox} 命令も同様に,組方向の指定ができるように拡張されている. -%<*en> -These 3 keys correspond to \texttt{cid}, \texttt{jfm} and -\texttt{jfmvar} keys for \cs{jfont}~and~\cs{tfont} respectively. -See Subsections~\ref{ssec-jfont} and \ref{ssec-psft} for details - of \texttt{cid}, \texttt{jfm} and -\texttt{jfmvar} keys. +\item[\cs{pbox}\<\>{[][]}\{\}] +組方向での中身をLRモードで組む命令である. +が正の値であるときは,ボックス全体の幅がその値となる. +その際,中身はの値に従い,左寄せ(\texttt{l}),右揃え(\texttt{r}), +中央揃え(それ以外)される. +\item[picture環境] +図表作成に用いる\texttt{picture}環境も, +\begin{lstlisting} +\begin{picture}(x_size, y_size)(x_offset,y_offset) + ... +\end{picture} +\end{lstlisting} +と組方向が指定できるように拡張されている. +$x$成分の増加方向は字送り方向,$y$成分の増加方向は行送り方向の\emph{反対方向}となる. +\Pkg{plext} パッケージと同様に +内部ではベースライン補正(\Param{yalbaselineshift}パラメータなど)の影響を受けないように, +\cs{put},~\cs{line}, \cs{vector}, \cs{dashbox}, \cs{oval},~\cs{circle}も +ベースライン補正を受けないように再定義されている. + +\item[\cs{rensuji}{[]}\{\}\textrm{, }\cs{rensujiskip}] -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 -will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. -% -%<*ja> -これら3つのキーはそれぞれ \cs{jfont},~\cs{tfont}に対する -\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する. -\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーの詳細は\ref{ssec-jfont}節 - と\ref{ssec-psft}節を参照. +\item[\cs{Kanji}\{\}] -\texttt{CID} キーは下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である. -また,横組用JFMと縦組用JFMは共用できないため,実際に \texttt{JFM} キーを用いる際は -後に述べる\ \texttt{YokoFeatures} キーや \texttt{TateFeatures}\ の中で用いる -ことになる. -% +\item[\cs{kasen}\{\}\textrm{, }\cs{bou}\{\}\textrm{, + }\cs{boutenchar}] -\item[NoEmbed] -%<*en> -By specifying this key, one can use ``name-only'' Japanese font which -will not be embedded in the output PDF file. See Subsection~\ref{ssec-psft}. -% -%<*ja> -これを指定することで,PDFに埋め込まれない「名前だけ」のフォントを指定することが -できる.\ref{ssec-psft}節を参照. +\item[参照番号] +\end{cslist} % +%<*en> +\begin{cslist} +\item[tabular\textrm{, }array\textrm{, }minipage\textrm{ environments}] +These environments are extended by \texttt{\}, which specifies the direction, +as follows: +\begin{lstlisting} +\begin{tabular}[pos]{table spec} ... \end{tabular} +\begin{array}[pos]{table spec} ... \end{array} +\begin{minipage}[pos]{width} ... \end{minipage} +\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} + \item[y] \emph{yoko} direction (horizontal writing) + \item[t] \emph{tate} direction (vertical writing) + \item[z] \emph{utod} direction if direction outside the env.\ is \emph{tate}. + \item[d] \emph{dtou} direction + \item[u] \emph{utod} direction +\end{description} +\item[\cs{parbox}\<\>{[]}\{\}\{\}] +\cs{parbox} command is also extended by \texttt{\<\>}. -\begin{figure}[!tb] -\begin{LTXexample}[width=0.25\textwidth] -\jfontspec[ - YokoFeatures={Color=007F00}, TateFeatures={Color=00007F}, - TateFont=KozGoPr6N-Regular -]{KozMinPr6N-Regular} -\hbox{\yoko 横組のテスト}\hbox{\tate 縦組のテスト} -\addjfontfeatures{Color=FF0000} -\hbox{\yoko 横組}\hbox{\tate 縦組} -\end{LTXexample} -%\caption{\texttt{TateFeatures} 等の使用例} -%\caption{An example of \texttt{TateFeatures} etc.} -\label{fig:yokotate-fontspec} -\end{figure} +\item[\cs{pbox}\<\>{[][]}\{\}] +This commands typeset in LR-mode, in direction. +If is positive, the width of the box becomes this . +In this case, will be aligned to left (when is \texttt{l}), +center (\texttt{c}), or~right (\texttt{r}). + +\item[picture\textrm{\ environment}] +\texttt{picture} environment also extended by \texttt{\<\>}, as follows: +\begin{lstlisting} +\begin{picture}(x_size, y_size)(x_offset,y_offset) + ... +\end{picture} +\end{lstlisting} -\item[Kanjiskip=] -%<*ja> -\pageref{pg:ltjksp}ページで説明した \verb+\jfont+ 中での \texttt{ltjksp} 指定と -同一の効力を持ち, -JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ -\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の有効/無効を切り替える. -標準値は \texttt{true} である. -% +\item[\cs{rensuji}{[]}\{\}\textrm{, }\cs{rensujiskip}] -\item[TateFeatures=\{\}\textrm{, }TateFont=] -%<*en> -The \texttt{TateFeatures} key specifies font features which are only turned~on in -vertical writing, such as \texttt{Style=VerticalKana}~(\texttt{vkna} feature). -Similarly, the \texttt{TateFont} key specifies the Japanese font which will be used only - in vertical writing. -A demonstrarion is shown in \autoref{fig:yokotate-fontspec}. -% -%<*ja> -縦組において使用されるフォントや,縦組においてのみ適用されるフォント機能達を -指定する.使用例は\autoref{fig:yokotate-fontspec}参照. -% +\item[\cs{Kanji}\{\}] -\item[YokoFeatures=\{\}] -%<*en> -The \texttt{YokoFeatures} key specifies font features which are only turned~on in -horizontal writing,. -A demonstrarion is shown in \autoref{fig:yokotate-fontspec}. +\item[\cs{kasen}\{\}\textrm{, }\cs{bou}\{\}\textrm{, + }\cs{boutenchar}] + +\item[参照番号] +\end{cslist} % + %<*ja> -同様に,横組においてのみ適用されるフォント機能達を -指定する.使用例は\autoref{fig:yokotate-fontspec}参照. -% +\paragraph{表組他の揃え位置} +表組(\texttt{array}, \texttt{tabular}環境),\cs{parbox}命令,\cs{minipage}環境の +揃え位置については\autoref{tab:lltjext_dir}を参照.\pLaTeX~2017-07-29と +できるだけ同じ挙動になるようにしている.\autoref{tab:lltjext_dir}中のA--Dの意味は次の通り. +\begin{table} + \caption{\Pkg{lltjext}パッケージにおける表組・\cs{parbox}命令他の揃え位置} + \label{tab:lltjext_dir} + {\centering + \begin{tabular}{lcccc} + \toprule + ↓中身\周囲→&\cs{yoko}&\cs{tate}&\cs{utod}&\cs{dtou}\\ + \midrule + \cs{yoko}&A&B&B&B\\ + \cs{tate}&B&A&D&C\\ + \cs{utod}&B&D&A&C\\ + \cs{dtou}&B&C&C&A\\ + \bottomrule + \end{tabular}\par} +\end{table} -\begin{figure}[!tb] -\begin{LTXexample}[pos=b] -\jfontspec[ - AltFont={ - {Range="4E00-"67FF, Color=007F00}, - {Range="6800-"9EFF, Color=0000FF}, - {Range="3040-"306F, Font=KozGoPr6N-Regular}, - } -]{KozMinPr6N-Regular} -日本国民は、正当に選挙された国会における代表者を通じて行動し、われらとわれらの子孫のために、 -諸国民との協和による成果と、わが国全土にわたつて自由のもたらす恵沢を確保し、…… -\end{LTXexample} -%\caption{\texttt{AltFont} の使用例} -%\caption{An example of \texttt{AltFont}} -\label{fig:altkanji-fontspec} -\end{figure} +\begin{description} + \item[A] 周囲の組方向と中身の組方向が同じ場合. + \begin{itemize} + \item \texttt{[t]}指定のとき: + 中身の先頭行のベースラインが周囲のベースラインと一致する. + 表組で先頭行の上に罫線があった場合は,それがベースラインの位置 + \footnote{\LuaTeX-jaでは和文側のベースラインの位置も上下移動できることに注意. + そのため「和文ベースライン」の位置に来るとは限らない.}となる. + \item \texttt{[c]}指定のとき: + 中身の上下の中心が周囲の数式の軸を通る. + \item \texttt{[b]}指定のとき: + 中身の最終行のベースラインが周囲のベースラインと一致する. + 表組で最終行の下に罫線があった場合は,それがベースラインの位置となる. + \end{itemize} + \item[B] 周囲の組方向と中身の組方向が90度ずれている場合. + \begin{itemize} + \item \texttt{[t]}指定のとき: + 表組においては,上端が周囲のベースラインと一致する. + \cs{parbox}や\cs{minipage}環境においては,上端が周囲の和文文字の上端と一致する. + \item \texttt{[c]}指定のとき: + 中身の上下の中心が周囲の数式の軸を通る. + \item \texttt{[b]}指定のとき: + 表組においては,下端が周囲のベースラインと一致する. + \cs{parbox}や\cs{minipage}環境においては,下端が周囲の和文文字の下端と一致する. + \end{itemize} + \item[C] 周囲の組方向と中身の組方向が180度ずれている場合. + \cs{parbox}や\cs{minipage}環境においては,上のBの場合と同じ挙動である.表組においては, + Aで\texttt{[t]}と\texttt{[b]}を入れ替えた + \begin{itemize} + \item \texttt{[t]}指定のとき: + 中身の最終行のベースラインが周囲のベースラインと一致する. + 最終行の下に罫線があった場合は,それがベースラインの位置となる. + \item \texttt{[c]}指定のとき: + 中身の上下の中心が周囲の数式の軸を通る. + \item \texttt{[b]}指定のとき: + 中身の先頭行のベースラインが周囲のベースラインと一致する. + 表組で先頭行の上に罫線があった場合は,それがベースラインの位置となる. + \end{itemize} + \item[D] 通常の縦組(\cs{tate})と「縦数式ディレクション」に相当する\cs{utod}方向が絡んだ場合. + \cs{parbox}や\cs{minipage}環境においては,上のBの場合と同じ挙動である.表組においては, + \begin{itemize} + \item \texttt{[t]}指定のとき: + 中身の先頭行の欧文ベースラインが周囲の欧文ベースラインと一致する. + \item \texttt{[c]}指定のとき: + 中身の上下の中心が周囲の数式の軸を通る. + \item \texttt{[b]}指定のとき: + 中身の最終行の欧文ベースラインが周囲の欧文ベースラインと一致する. + \end{itemize} +\end{description} +% -\item[AltFont] +\subsection{\Pkg{luatexja-preset}} +\label{ssec:preset} %<*en> -As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec-altfont}) and -\cs{DeclareAlternateKanjiFont}~(Subsection~\ref{ssec-nfsspat}), -with this key, one can typeset some Japanese characters -by a different font and/or using different features. -The \texttt{AltFont} feature takes a comma-separated list of comma-separated lists, -as the following: +As described in Subsection~\ref{ssec:preset-abst}, +One can load the \Pkg{luatexja-preset} +package to use several ``presets'' of Japanese fonts. +This package provides functions in a part of \Pkg{japanese-otf} package (changing fonts) +and a part of \Pkg{PXchfon} package (presets) by Takayuki Yato. + +Options which are given in \cs{usepackage} but not described in this~subsection +are simply passed to the \Pkg{luatexja-fontspec}\footnote{if \texttt{nfssonly} option is +\emph{not} specified; in this case these options are simply ignored.}. +For example, the line~5 in below example is equivalent to lines 1--3. % %<*ja> -\ref{ssec-altfont}節の \cs{ltjdeclarealtfont} や, -\ref{ssec-nfsspat}節の \cs{DeclareAlternateKanjiFont} と同様に, -このキーを用いると一部の文字を異なったフォントや機能たちを使って組むことができる. -\texttt{AltFont} キーに指定する値は,次のように二重のコンマ区切りリストである: +\ref{ssec:preset-abst}節で述べたように,よく使われている和文フォント設定を一行で指定できるようにしたのが +\Pkg{luatexja-preset}パッケージである.このパッケージは, +\Pkg{otf}パッケージの一部(多書体化)と八登崇之氏による\Pkg{PXchfon}パッケージの一部(プリセット指定) +とを合わせたような格好をしている. + +パッケージ読み込み時に渡されたオプションのうち, +本節にないものを指定した場合,それらはそのまま +\Pkg{luatexja-fontspec}パッケージに渡される\footnote{\texttt{nfssonly} オプションが +指定されていた場合は,\Pkg{luatexja-fontspec}パッケージは読み込まれないので単純に無視され +る.}.例えば,下の1--3行目は5行目のように一行にまとめることができる. % -\begin{lstlisting}[escapechar=\#] -AltFont = { - ... - { Range=#\LARG range>#, #\LARG features>#}, - { Range=#\LARG range>#, Font=#\LARG font~name>#, #\LARG features># }, - { Range=#\LARG range>#, Font=#\LARG font~name># }, - ... -} +\begin{lstlisting} +\usepackage[no-math]{fontspec} +\usepackage[match]{luatexja-fontspec} +\usepackage[kozuka-pr6n]{luatexja-preset} +%%-------- +\usepackage[no-math,match,kozuka-pr6n]{luatexja-preset} \end{lstlisting} + +%\subsubsection{General Options} +%\subsubsection{一般的なオプション} +\label{sssec:ltjpreset-general} + +\begin{cslist}[before*=] +\item[fontspec% +%\textrm{~(enabled by default)} +%\emph{\gtfamily (既定)} +] %<*en> -Each sublist should have the \texttt{Range} key -(sublist which does not contain \texttt{Range} key is simply ignored). -A demonstrarion is shown in \autoref{fig:altkanji-fontspec}. +With this option, Japanese fonts are selected using functionality of +the \Pkg{luatexja-fontspec} package. This means that the \Pkg{fontspec} package is + automatically loaded by this package. + +If you need to pass some options to \Pkg{fontspec}, you can load \Pkg{fontspec} manually +before \Pkg{luatexja-preset}: % %<*ja> -各部分リストには \texttt{Range} キーが必須である(含まれない部分リストは -単純に無視される).指定例は\autoref{fig:altkanji-fontspec}に示した. -% -\end{cslist} +\Pkg{luatexja-fontspec}パッケージの機能を用いて和文フォントを選択する. +これは,\Pkg{fontspec}パッケージが自動で読み込まれることを意味する. -%<*ja> -なお,\Pkg{luatexja-fontspec} 読み込み時には和文フォント定義ファイル% -\texttt{.fd}は全く参照されなくなる. +もし\Pkg{fontspec}パッケージに何らかのオプションを渡す必要がある +\footnote{例えば,数式フォントまで置換されてしまい,\cs{mathit}によってギリシャ文字の +斜体大文字が出なくなる,など.}場合は, +次のように\Pkg{luatexja-preset}の前に\Pkg{fontspec}を手動で読みこめば良い: % - - -%<*en> -\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, \begin{lstlisting} -AltFont = { - { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, - Range="3000-"30FF, BoldFeatures={Color=007F00} } -} -\end{lstlisting} -does \emph{not} work. Instead, one have to write -\begin{lstlisting} -UprightFeatures = { - AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } }, -}, -BoldFeatures = { - AltFont = { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } }, -} +\usepackage[no-math]{fontspec} +\usepackage[...]{luatexja-preset} \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, -one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatures}. +\item[nfssonly] +%<*en> +With this option, selecting Japanese fonts won't be performed using the functionality of + the \Pkg{fontspec} package, but only standard NFSS2 (hence without + \cs{addjfontfeatures} etc.). +This option is ignored when \Pkg{luatexja-fontspec} package is loaded. -Note that features which are specified in \texttt{YokoFeatures}~and~\texttt{TateFeatures} -are always interpreted \emph{after} other ``direction-independent'' features. -This explains why \cs{addjfontfeatures} at~line~6 in~\autoref{fig:yokotate-fontspec} -has no effect, because a color specification is already done in -\texttt{YokoFeatures}~and~\texttt{TateFeatures} keys. -% -%<*ja> -\paragraph{\texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} 等の制限} -\texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures}の各キーは -シェイプ別に指定されるべきものであり, -内部では \texttt{BoldFeatures} などのシェイプ別の指定は行うことが出来ない. -例えば. +When this option is specified, \Pkg{fontspec}~and~\Pkg{luatexja-fontspec} are +\emph{not} loaded by default. Nevertheless, +the package\Pkg{fontspec} can coexist with the option, as the following: \begin{lstlisting} -AltFont = { - { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold, - Range="3000-"30FF, BoldFeatures={Color=007F00} } -} +\usepackage{fontspec} +\usepackage[hiragino-pron,nfssonly]{luatexja-preset} \end{lstlisting} -のように指定することは出来ず, -\begin{lstlisting} -UprightFeatures = { - AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } }, -}, -BoldFeatures = { - AltFont = { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } }, -} +In this case, one can use \cs{setmainfont} etc.\ to select \emph{alphabetic} fonts. +% +%<*ja> +\LaTeX 標準のフォント選択機構(NFSS2)を用いて +\texttt{ltjpm}$n$(明朝),\texttt{ltjpg}$n$(ゴシック), +それに後に述べる\texttt{deluxe}オプションが指定された場合には +\texttt{ltjpmg}$n$(丸ゴシック)という +和文フォントファミリを定義% +\footnote{% + $n$は自然数であり,\cs{ltjapplypreset}の実行(この命令は\Pkg{luatexja-preset}パッケージ + 読み込み時に自動的に実行される)ごとに増加していく. +}し,これらを用いる. + +本オプション指定時には\Pkg{fontspec}・\Pkg{luatexja-fontspec}パッケージは +自動では読み込まれない,しかし, +\begin{lstlisting} +\usepackage{fontspec} +\usepackage[hiragino-pron,nfssonly]{luatexja-preset} \end{lstlisting} -のように指定しなければならない. +のようにすれば,このオプションを指定すれば +欧文フォントを\Pkg{fontspec}パッケージの機能を使って指定することができる. -一方,\texttt{AltFont} キー内の各リストでは -\ \texttt{YokoFeatures},~\texttt{TateFeatures} 及び \texttt{TateFont} キーを -指定することは可能であり.また\ \texttt{YokoFeatures},~\texttt{TateFeatures} キーの -中身に \texttt{AltFont} を指定することができる. +一方,\Pkg{luatexja-preset}パッケージ読み込み時に +既に\Pkg{luatexja-fontspec}パッケージが読み込まれている場合は +\texttt{nfssonly}オプションは無視される. +% -また,\autoref{fig:yokotate-fontspec}後半部では6行目の色の指定が効かず, -2行目で指定した\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による色の指定が有効になっ -たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による -OpenType機能指定は -組方向に依存しないOpenType機能の指定より後に解釈される}からである. +\item[match] +%<*en> +If this option is specified, usual family-changing commands such as +\cs{rmfamily},~\cs{textrm}, \cs{sffamily},~\dots\ also change Japanese font family. +This option is passed to \Pkg{luatexja-fontspec}, if \texttt{fontspec} +option is specifed. +% +%<*ja> +このオプションが指定されると,「\pLaTeXe 新ドキュメントクラス」のように\ +\cs{rmfamily}, \verb+\textrm{...}+, \cs{sffamily} 等が +欧文フォントだけでなく和文フォントも変更するようになる. +\ \texttt{fontspec}\ +オプションが有効になっている場合は,このオプションは \Pkg{luatexja-fontspec} パッケージへと渡される. % -\subsection{\Pkg{luatexja-otf}} -\label{ssec-ltjotf} +\item[nodeluxe% +%\textrm{~(enabled by default)} +%\emph{\gtfamily (既定)} +] %<*en> -This optional package supports typesetting glyphs -by specifying a CID number. -The package \Pkg{luatexja-otf} offers the following 2~low-level -commands: +The nagation of \texttt{deluxe} option. +Use one-weighted \textit{mincho} and \textit{gothic} font families. +This means that \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+ and +\verb+\gtfamily\mdseries+ use the same font. % %<*ja> -この追加パッケージはCID番号による文字の出力をサポートする. -\Pkg{luatexja-otf}は以下の2つの低レベルコマンドを提供する: +\texttt{deluxe}オプションの否定. +\LaTeXe 環境下の標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する. +より具体的に言うと,この設定の下では +\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+, +\verb+\gtfamily\mdseries+はみな同じフォントとなる. % -\begin{cslist} -\item[\cs{CID}\{\}] +\item[deluxe] %<*en> -Typeset a glyph whose CID number is . -If the Japanese font is neither Adobe-Japan1,~Adobe-GB1, Adobe-CNS1,~nor~Adobe-Korea1 CID-keyed font, -\LuaTeX-ja treats that is a CID number of Adobe-Japan1 character collection, -and tries to typeset a ``most suitable glyph''. +Use the mincho family with three weights (light, medium, and~bold), +the gothic family with three weights (medium, bold, and extra~bold), and \textit{rounded gothic}% +\footnote{Provided by \cs{mgfamily} and \cs{textmg}, +because ``rounded gothic'' is called \textit{maru gothic} (丸ゴシック) in Japanese.}. +Mincho light and gothic extra~bold can be by +\cs{mcfamily}\cs{ltseries}~and~\cs{gtfamily}\cs{ebseries}, respectively. + +\begin{itemize} + \item Some presets do not have the light weight of mincho. + In this case, we substitute the medium weight for the light weight. + \item \Pkg{luatexja-preset} does not produce an error (only produces a warning), even if + (one of) fonts for \cs{mcfamily}\cs{ltseries}, \cs{gtfamily}\cs{ebseries}, \cs{mgfamily} + do not exist. +\end{itemize} % %<*ja> -CID番号がの文字を出力する. -もし現在の和文フォントがAdobe-Japan1,~Adobe-GB1, Adobe-CNS1,~Adobe-Korea1の - いずれのCID-keyed fontでもない場合,はAdobe-Japan1のCID番号であると解釈し - 「適切なグリフ」\footnote{% - 例えばフォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて - グリフを選択する. -}を出力する. -% +明朝体・ゴシック体各3ウェイトと, +丸ゴシック体 (\cs{mgfamily}, \verb+\textmg{...}+) を利用可能にする. +明朝体は細字・中字・太字の3ウェイトがあり, +明朝体の細字は \cs{mcfamily}\cs{ltseries} で利用できる. +また,ゴシック体は中字・太字・極太の3ウェイトがあり, +ゴシック体の極太は \cs{gtfamily}\cs{ebseries} で利用できる% +\footnote{過去との互換性のため,\cs{gtebfamily}, \cs{textgteb\{...\}} も + 依然として利用可能である.}. -\item[\cs{UTF}\{\}] +\begin{itemize} + \item プリセット設定によっては明朝体細字が用意されていないものもある.その場合は + 明朝体中字が代用される. + \item 明朝体細字,ゴシック体極太,丸ゴシック体の3フォントについては + 実際にフォントをロードする前に存在するかチェックを行う. + 存在しなかったものについては警告を発し, + それぞれ明朝体中字.ゴシック体太字,ゴシック体太字で代用する. +\end{itemize} +% +\item[expert] %<*en> -Typeset a character whose character code is (in hexadecimal). -This command is similar to \verb+\char"+,\ %" -but please remind remarks below. +Use horizontal/vertical kana alternates, and define a command \cs{rubyfamily} to use kana +characters designed for ruby. % %<*ja> -文字コードが(16進で)の文字を出力する. -このコマンドは \verb+\char"+と似ているが,下の注意を参照すること.%" -% -\end{cslist} - -%<*ja> -このパッケージは,マクロ集 \texttt{luatexja-ajmacros.sty}\footnote{\Pkg{otf}パッケージ付属の井上浩一氏によるマクロ集 -\texttt{ajmacros.sty} に対して -漢字コードをUTF-8にしたり,plain \LuaTeX でも利用可能にするという -修正を加えたものである.}\ も自動的に読み込む. -\texttt{luatexja-ajmacros.sty} は, -そのため,\Pkg{luatexja-otf} を読みこめば \texttt{ajmacros.sty} マクロ集にある \cs{aj半角} などのマクロもそのまま使うことができる. +横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{% + \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では + OpenType機能の有効化であり,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替える). +}. % +\item[bold] %<*en> -This package automatically loads \texttt{luatexja-ajmacros.sty}, which is slightly -modified version of \texttt{ajmacros.sty}\footnote{Useful macros by iNOUE Koich!, for the -\Pkg{japanese-otf} package.}. -Hence one can use macros which sre defined in \texttt{ajmacros.sty}, such as~\cs{aj半角}. +Substitute bold series of gothic for bold series of mincho. +If \texttt{nodeluxe} option is enabled, medium series of gothic is also changed, +since we use same font for both series of gothic. % - -%\paragraph{Remarks} -%\paragraph{注意} +%<*ja> +「明朝の太字」をゴシック体の太字によって代替する. +もし\texttt{nodeluxe}オプションが指定されている場合は,ゴシック体は1ウェイトしか使用されな + いため, +「ゴシック体の中字」も同時に変更されることになる. +% +\item[jis90\textrm{,~}90jis] +%Use JIS~X~0208:1990 glyph variants if possible. +%出来る限りJIS~X~0208:1990の字形を使う. +\item[jis2004\textrm{,~}2004jis] +%Use JIS~X~0213:2004 glyph variants if possible. +%出来る限りJIS~X~0213:2004の字形を使う. +\item[jfm\_yoko=] %<*en> -Characters by \cs{CID} and \cs{UTF} commands are different from -ordinary characters in the following points: +Use the JFM \texttt{jfm-.lua} for horizontal direction, instead of \texttt{jfm-ujis.lua}~(default JFM). % %<*ja> -\cs{CID} と \cs{UTF} コマンドによって出力される文字は -以下の点で通常の文字と異なる: +横組用和文フォントで用いるJFMを\texttt{jfm-.lua}にする.このオプションがない時は +\LuaTeX\nobreakdash -ja標準の\texttt{jfm-ujis.lua}が用いられる. % -\begin{itemize} +\item[jfm\_tate=] %<*en> -\item Always treated as \textbf{JAchar}s. +Use the JFM \texttt{jfm-.lua} for vertical direction, instead of \texttt{jfm-ujisv.lua}~(default JFM). % %<*ja> -\item 常に\textbf{JAchar}として扱われる. +縦用和文フォントで用いるJFMを\texttt{jfm-.lua}にする.このオプションがない時は +\LuaTeX-ja標準の\texttt{jfm-ujisv.lua}が用いられる. % + +\item[jis] +%Same as \texttt{jfm\_yoko=jis}. +%\texttt{jfm\_yoko=jis}と同じ.ここで用いるJFM\texttt{jfm-jis.lua}はJISフォントメトリックを元にしたものである. + +\end{cslist} %<*en> -\item Processing codes for supporting OpenType features (\textit{e.g.}, - glyph replacement and kerning) by the \Pkg{luaotfload} package - is not performed to these characters. +Note that \texttt{jis90},~\texttt{90jis}, \texttt{jis2004}~and~\texttt{2004jis} only affect with mincho, +gothic (and, possibly rounded gothic) families defined by this package. +We didn't taken account of when more than one options among them are specified. % %<*ja> -\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための - \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない. +\texttt{jis90},~\texttt{90jis}, \texttt{jis2004},~\texttt{2004jis}については本パッケージで定義された +明朝体・ゴシック体(・丸ゴシック体)にのみ有効である. +これら4オプションのうち複数が同時に指定された場合の動作については全く考慮していない. % -\end{itemize} -%\paragraph{Additional syntax of JFM} -%\paragraph{JFMへの記法の追加} +%\subsubsection{Presets which support multi weights} +%\subsubsection{多ウェイト用プリセットの一覧} +\label{sssec:ltjpreset-multi} %<*en> -The package \Pkg{luatexja-otf} extends the syntax of JFM; the entries of \texttt{ -chars} table in JFM now allows a string in the form -\verb+'AJ1-xxx'+, which stands for the character -whose CID number in Adobe-Japan1 is \verb+xxx+. - -This extended notation is used in the standard JFM \texttt{jfm-ujis.lua} -to typeset halfwidth Hiragana glyphs (CID~516--598) in halfwidth. +Besides \texttt{bizud}, \texttt{morisawa-pro},~and~\texttt{morisawa-pr6n} presets, +fonts are specified by font name, not by file name. +In following tables, starred fonts (e.g.~KozGo\dots-Regular) are used for medium series of \textit{gothic}, +\emph{if and only if \texttt{deluxe} option is specified}. % %<*ja> -\Pkg{luatexja-otf}パッケージを読み込むと, -JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形の文字列が -使えるようになる.これはAdobe-Japan1におけるCID番号が \verb+xxx+ の文字を表す. - -この拡張記法は,標準JFM~\texttt{jfm-ujis.lua}で,半角ひらがなのグリフ(CID~516--598)を -正しく半角幅で組むために利用されている. +\texttt{bizud}, \texttt{morisawa-pro}, \texttt{morisawa-pr6n}以外はフォントの指定は +(ファイル名でなく)フォント名で行われる. +以下の表において,*\,つきのフォント(e.g.,~KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション指定時に} +ゴシック体中字として用いられるものを示している. % +\begin{cslist}[style=standard] + \item[kozuka-pro] Kozuka Pro (Adobe-Japan1-4) fonts. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[kozuka-pr6] Kozuka Pr6 (Adobe-Japan1-6) fonts. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[kozuka-pr6n] Kozuka Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts. -\subsection{\Pkg{luatexja-adjust}} -\label{ssec-adj} -\begin{figure}[t] -\def\sq{% - \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% -  \hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% - \hskip\dimexpr.5\zw-.2pt\relax}\hss}} -\def\sb{\hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{% - ■\hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw% - \hskip\dimexpr.5\zw-.2pt\relax}\hss}} -\newbox\gridbox -\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}{\copy\gridbox}\hskip-20\zw% - \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}% -}} - -{\centering -\begin{tabular}{lc} +%<*en> +Kozuka Pro/Pr6N fonts are bundled with Adobe's software, such as Adobe~InDesign. +There is not rounded gothic family in Kozuka fonts. +% +%<*ja> +小塚Pro書体・Pr6N書体はAdobe InDesign等のAdobe製品にバンドルされている. +「小塚丸ゴシック」は存在しないので,便宜的に小塚ゴシックHによって代用している. +% +\begin{center}\small +\begin{tabular}{lllll} \toprule -no adjustment&\outbox{以上の原理は,「包除原理」とよく呼ばれるが\hskip-.5\zw\null}\\ -without priority&% -\ltjdisableadjust -\outbox{以上の原理は,「包除原理」とよく呼ばれるが}% -\ltjenableadjust\\ -with priority&% -\outbox{以上の原理は,「包除原理」とよく呼ばれるが} -%\ltjdisableadjust -\\ +\bfseries family&\bfseries series&\ttfamily kozuka-pro&\ttfamily kozuka-pr6&\ttfamily kozuka-pr6n\\ +\midrule + &light&KozMinPro-Light&KozMinProVI-Light&KozMinPr6N-Light\\ +%\textit{mincho}% +%\textgt{明朝}% + &medium&KozMinPro-Regular&KozMinProVI-Regular&KozMinPr6N-Regular\\ + &bold&KozMinPro-Bold&KozMinProVI-Bold&KozMinPr6N-Bold\\ +\midrule + &&KozGoPro-Regular*&KozGoProVI-Regular*&KozGoPr6N-Regular*\\ + &\smash{\raisebox{1.5ex}{medium}} + &KozGoPro-Medium&KozGoProVI-Medium&KozGoPr6N-Medium\\ +\cmidrule(l){2-5} +%\smash{\raisebox{2ex}{\textit{gothic}}}% +%\smash{\raisebox{2ex}{\gt ゴシック}}% + &bold&KozGoPro-Bold&KozGoProVI-Bold&KozGoPr6N-Bold\\ + &extra bold&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\ \bottomrule -\end{tabular}\par} -\smallskip - -Note: the value of -\Param{kanjiskip} is 0\,pt${}^{+1/5\,\mathrm{em}}_{-1/5\,\mathrm{em}}$ in this figure, -for making the difference obvious. -%\caption{行長調整}\label{fig:adj} -%\caption{Line adjustment}\label{fig:adj} -\end{figure} +\end{tabular} +\end{center} + \item[hiragino-pro] Hiragino Pro (Adobe-Japan1-5) fonts. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[hiragino-pron] Hiragino ProN (Adobe-Japan1-5, JIS04-savvy) fonts. %<*en> -(see Japanese version of this manual) +Hiragino fonts (except Hiragino~Mincho~W2) are bundled with Mac OS~X 10.5 or later. +Some editions of a Japanese word-processor ``一太郎2012'' includes Hiragino ProN fonts. +Note that fonts for gothic extra~bold (HiraKakuStd[N]-W8) only contains characters in +Adobe-Japan1-3 character collection, while others contains those in +Adobe-Japan1-5 character collection. % %<*ja> -この追加パッケージは以下の機能を提供する.詳細な仕様については\ref{sec-adjspec}章を参照してほしい. -\begin{description} -\item[行末文字の位置調整] - \pTeX では,(是非はともかく)「行末の読点はぶら下げか二分取りか全角取りのいずれかに」のように - 行末文字と実際の行末の位置関係を2通り以上にすることは面倒であった. - 和文フォントメトリックだけでは「常に行末の読点はぶら下げ」といったことしかできず, - 前の文に書いたことを実現するには -\begin{lstlisting} -\def\。{% - \penalty10000 % 禁則ペナルティ - \hbox to0pt{。\hss}\penalty0 % ぶら下げの場合 - \kern.5\zw\penalty0 % 二分取りの場合 - \kern.5\zw\penalty0 % 全角取りの場合 -} -\end{lstlisting} - のような命令を定義し,文中の全ての句点を \lstinline+\。+ で書くことが必要だった. +ヒラギノフォントは,Mac OS~X以外にも,一太郎2012の上位エディションにもバンドルされている. +極太ゴシック体として用いるヒラギノ角ゴW8は,Adobe-Japan1-3の範囲しかカバーしていない +Std/StdNフォントであり,その他はAdobe-Japan1-5対応である. -\Pkg{luatexja-adjust}パッケージは,上で述べた行末文字と実際の行末との位置関係を -2通り以上から自動的に選択する機能を提供する. -\pdfTeX と同じように,「\TeX による行分割の後で行末文字の位置を補正する」方法と - 「行分割の過程で行末文字の位置を考慮に入れる」方法を選べるようにした( -\Pkg{luatexja-adjust}パッケージの既定では前者). - -\item[優先順位付きの行長調整] -\pTeX では,行長調整において優先度の概念が存在しなかったため,図 -\ref{fig:adj}上段における半角分の半端は,\autoref{fig:adj}中段のように,鍵 -括弧周辺の空白と和文間空白(\Param{kanjiskip})の両方によって負担される.し -かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい -ては,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文 -文字はベタ組で組まれる(\autoref{fig:adj}下段)ことになっている. -\Pkg{luatexja-adjust}パッケージの提供する第2の機能は, -\cite{jlreq}や\cite{x4051}における規定のような,優先順位付き -の行長調整である. -\begin{itemize} - \item 優先度付き行長調整は,段落を行分割した後に個々の行について行われるものである. -そのため,行分割の位置は変化することはない. +なお,明朝体細字として用いるヒラギノ明朝体W2はOS~Xや一太郎にはバンドルされておらず, +別途購入する必要がある. +% +\begin{center}\small +\begin{tabular}{llll} +\toprule +\bf family&\bf series&\tt hiragino-pro&\tt hiragino-pron\\ +\midrule + &light&Hiragino~Mincho~Pro~W2&Hiragino~Mincho~ProN~W2\\ +%\textit{mincho}% +%\textgt{明朝}% + &medium&Hiragino~Mincho~Pro~W3&Hiragino~Mincho~ProN~W3\\ + &bold&Hiragino~Mincho~Pro~W6&Hiragino~Mincho~ProN~W6\\ +\midrule + &&Hiragino~Kaku~Gothic~Pro~W3*&Hiragino~Kaku~Gothic~ProN~W3*\\ + &\smash{\raisebox{1.5ex}{medium}} + &Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\ +\cmidrule(l){2-4} +%\smash{\raisebox{2ex}{\textit{gothic}}}% +%\smash{\raisebox{2ex}{\gt ゴシック}}% + &bold&Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\ + &extra bold&Hiragino~Kaku~Gothic~Std~W8&Hiragino~Kaku~Gothic~StdN~W8\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&Hiragino~Maru~Gothic~Pro~W4&Hiragino~Maru~Gothic~ProN~W4\\ +\bottomrule +\end{tabular} +\end{center} -\verb+\hbox{...}+ といった「途中で改行できない水平ボックス」では(たとえ幅が指定されていても)無効である. - \item 優先度付き行長調整を行うと,和文処理グルーの自然長は変化しないが,伸び量や縮み量は -一般に変化する.そのため,既に組まれた段落を \cs{unhbox} などを利用して組み直す処理を -行う場合には注意が必要である. -\end{itemize} -\end{description} +%\newpage +\item[bizud] BIZ UD fonts (by Morisawa Inc.) bundled with + Windows~10 October 2018 Update. +\begin{center}\small +\begin{tabular}{ll>{\ttfamily}l} +\toprule +\textbf{family}&\textbf{series}\\ +\midrule +%\textit{mincho} +%\textgt{明朝}% + &&BIZ-UDMinchoM.ttc\\ +\midrule + &medium&BIZ-UDGothicR.ttc\\ +\cmidrule(l){2-3} +%\textit{gothic}% +%\gt ゴシック + &bold&BIZ-UDGothicB.ttc\\ + &extra bold&BIZ-UDGothicB.ttc\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&BIZ-UDGothicB.ttc\\ +\bottomrule +\end{tabular} +\end{center} -\Pkg{luatexja-adjust}パッケージは,上記で述べた2機能を有効化/無効化するための -以下の命令を提供する.これらはすべてグローバルに効力を発揮する. +%\newpage -\begin{cslist} -\item[\cs{ltjenableadjust[...]}] -\verb+...+ に指定したkey-valueリストに従い,「行末文字の位置調整」「優先順位付きの行長調整」を有効化/無効化する. -指定できるキーは以下の通り. -\begin{description} - \item[\texttt{lineend=[false,true,extended]}] - 行末文字の位置調整の機能を無効化(\texttt{false}),「行分割後に調整」の形で有効化(\texttt{true}), - 「行分割の仮定で考慮」(\texttt{extended})する. - \item[\texttt{priority=[false,true]}] - 優先順位付きの行長調整を無効化(\texttt{false}),または有効化(\texttt{true})する. -\end{description} -両キーともキー名のみを指定した場合は値として\texttt{true}が指定されたものと扱われる. + \item[morisawa-pro] Morisawa Pro (Adobe-Japan1-4) fonts. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[morisawa-pr6n] Morisawa Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts. +\begin{center}\footnotesize +\begin{tabular}{ll>{\tt}l>{\tt}l} +\toprule +\bf family&\bf series&morisawa-pro&morisawa-pr6n\\ +\midrule + &medium&A-OTF-RyuminPro-Light.otf&A-OTF-RyuminPr6N-Light.otf\\ +%\smash{\raisebox{1.5ex}{\textit{mincho}}}% +%\smash{\raisebox{1.5ex}{\gt 明朝}}% + &bold&A-OTF-FutoMinA101Pro-Bold.otf&A-OTF-FutoMinA101Pr6N-Bold.otf\\ +\midrule + &medium + &A-OTF-GothicBBBPro-Medium.otf&A-OTF-GothicBBBPr6N-Medium.otf\\ +%\textit{gothic}% +%\gt ゴシック + &bold&A-OTF-FutoGoB101Pro-Bold.otf&A-OTF-FutoGoB101Pr6N-Bold.otf\\ + &extra bold&A-OTF-MidashiGoPro-MB31.otf&A-OTF-MidashiGoPr6N-MB31.otf\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&A-OTF-Jun101Pro-Light.otf&A-OTF-ShinMGoPr6N-Light.otf\\ +\bottomrule +\end{tabular} +\end{center} -互換性の為,オプション無しでただ\cs{ltjenableadjust}が呼び出された場合は, -\begin{lstlisting} -\ltjenableadjust[lineend=true,priority=true] -\end{lstlisting} -と扱われる. - -\item[\cs{ltjdisableadjust}] -\Pkg{luatexja-adjust}パッケージの機能を無効化する. -\begin{lstlisting} -\ltjenableadjust[lineend=false,priority=false] -\end{lstlisting} -と同義. -\end{cslist} -また,優先順位付きの行長調整のために,次の2パラメータが\cs{ltjsetparameter}内で -追加される.両パラメータともグローバルに効力を発揮する. -\begin{cslist}[style=standard] -\item[\DParam{stretch\_priority}\,=\{\}] -\Param{kanjiskip}, \Param{xkanjiskip},および「\textbf{JAglue}以外のグルー」を, -「行を自然長より伸ばす」場合の調整に用いる優先度を指定する. + \item[yu-win] Yu fonts bundled with Windows~8.1. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[yu-win10] Yu fonts bundled with Windows~10. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[yu-osx] Yu fonts bundled with OSX~Mavericks. +\begin{center}\small +\begin{tabular}{lllll} +\toprule +\bf family&\bf series&\texttt{yu-win}&\texttt{yu-win10}&\texttt{yu-osx}\\ +\midrule + &light&YuMincho-Light&YuMincho-Light&(YuMincho~Medium)\\ +%\textit{mincho}% +%\textgt{明朝}% + &medium&YuMincho-Regular&YuMincho-Regular&YuMincho~Medium\\ + &bold&YuMincho-Demibold&YuMincho-Demibold&YuMincho~Demibold\\ +\midrule + &&YuGothic-Regular*&YuGothic-Regular*&YuGothic~Medium*\\ + &\smash{\raisebox{1.5ex}{medium}}% + &YuGothic-Regular&YuGothic-Medium&YuGothic~Medium\\ +\cmidrule(l){2-5} +%\textit{gothic}% +%\gt ゴシック + &bold&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ + &extra bold&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&YuGothic-Bold&YuGothic-Bold&YuGothic~Bold\\ +\bottomrule +\end{tabular} +\end{center} -指定方法は,の中にkey-value listの形で -\begin{lstlisting} -stretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50} -\end{lstlisting} -のようにして行う.キー名\texttt{kanjiskip},~\texttt{xkanjiskip}については -そのままの意味であり, -\texttt{others}キーが「\textbf{JAglue}以外のグルー」を表す. -各キーの値は,JFMグルーにおける「優先度$i$」を$10i$に対応させた整数値であり, - 大きい方が先に伸ばされることを意味している. +\item[moga-mobo] MogaMincho, MogaGothic, and MoboGothic. +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] +\item[moga-mobo-ex] MogaExMincho, MogaExGothic, and MoboExGothic. +%\par These fonts can be downloaded from \url{http://yozvox.web.fc2.com/}. +%これらのフォントは \url{http://yozvox.web.fc2.com/} からダウンロードできる. +\begin{center}\small +\begin{tabular}{llll} +\toprule +\bf family&\bf series&\bf default, \texttt{90jis}~option&\bf \texttt{jis2004} option\\ +\midrule + &medium&Moga90Mincho&MogaMincho\\ +%\smash{\raisebox{1.5ex}{\textit{mincho}}}% +%\smash{\raisebox{1.5ex}{\gt 明朝}}% + &bold&Moga90Mincho Bold&MogaMincho Bold\\ +\midrule + &medium&Moga90Gothic&MogaGothic\\ +%\textit{gothic}% +%\gt ゴシック + &bold&Moga90Gothic Bold&MogaGothic Bold\\ + &extra bold&Moga90Gothic Bold&MogaGothic Bold\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&Mobo90Gothic&MoboGothic\\ +\bottomrule +\end{tabular} +\end{center} +%When \texttt{moga-mobo-ex} is specified, the font ``MogaEx90Mincho'' etc.\ are used. +%\texttt{moga-mobo-ex}オプション指定時にはMogaEx90MinchoなどのExが名前についたフォントが使われる. -\item[\DParam{shrink\_priority}\,=\{\}] -同様に,「行を自然長より縮める」場合の調整に用いる優先度を指定する. -それ以外は\Param{stretch\_priority}と指定の形式は変わらない. -\end{cslist} -初期値は\Param{stretch\_priority}, \Param{shrink\_priority}とも -\begin{lstlisting} -{kanjiskip=-35,xkanjiskip=-25,others=50} -\end{lstlisting} -であり,「優先度$-4$」と指定されているJFMグルーが最も伸び(縮み)にくいようになっている. -% +\item[ume] Ume Mincho and Ume Gothic. +%\par These fonts can be downloaded from\\\hfill \url{https://ja.osdn.net/projects/ume-font/wiki/FrontPage}. +%これらのフォントは \url{https://ja.osdn.net/projects/ume-font/wiki/FrontPage} からダウンロードできる. +\begin{center}\small +\begin{tabular}{lll} +\toprule +\bf family&\bf series&\bf default\\ +\midrule + &medium&Ume Mincho\\ +%\smash{\raisebox{1.5ex}{\textit{mincho}}}% +%\smash{\raisebox{1.5ex}{\gt 明朝}}% + &bold&Ume Mincho\\ +\midrule + &&Ume Gothic*\\ + &\smash{\raisebox{1.5ex}{medium}}&Ume Gothic O5\\ +\cmidrule(l){2-3} +%\textit{gothic}% +%\gt ゴシック + &bold&Ume Gothic O5\\ + &extra bold&Ume Gothic O5\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&Ume Gothic O5\\ +\bottomrule +\end{tabular} +\end{center} -\subsection{\Pkg{luatexja-ruby}} -%<*en> -This addon package provides functionality of ``ruby'' (\emph{furigana}) annotations -using callbacks of \LuaTeX-ja. -There is no detailed manual of \Pkg{luatexja-ruby.sty} in English. -(Japanese manual is another PDF file, \url{luatexja-ruby.pdf}.) -% -%<*ja> -この追加パッケージは,\LuaTeX-jaの機能を利用したルビ(振り仮名)の組版機能を提供する. -前後の文字種に応じた前後への自動進入や, -行頭形・行中形・行末形の自動的な使い分けが特徴である. +%\newpage + \item[sourcehan] Source Han Serif and Source Han Sans fonts (Language-specific OTF \textit{or} OTC) +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[sourcehan-jp] Source Han Serif JP and Source Han Sans JP fonts (Region-specific Subset OTF) +\begin{center}\small +\def\AD#1#2{Source Han #1 #2&Source Han #1 JP #2}% +\begin{tabular}{lllll} +\toprule +\bf family&\bf series&\texttt{sourcehan}&\texttt{sourcehan-jp}\\ +\midrule + &light&\AD{Serif}{Light}\\ +%\textit{mincho}% +%\textgt{明朝}% + &medium&\AD{Serif}{Regular}\\ + &bold&\AD{Serif}{Bold}\\ +\midrule + &&\AD{Sans}{Regular*}\\ + &\smash{\raisebox{1.5ex}{medium}} + &\AD{Sans}{Medium}\\ +\cmidrule(l){2-4} +%\smash{\raisebox{2ex}{\textit{gothic}}}% +%\smash{\raisebox{2ex}{\gt ゴシック}}% + &bold&\AD{Sans}{Bold}\\ + &extra bold&\AD{Sans}{Heavy}\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&\AD{Sans}{Heavy}\\ +\bottomrule +\end{tabular} +\end{center} -ルビ組版に設定可能な項目や注意事項が多いため,本追加パッケージの詳細な説明は -使用例と共に \url{luatexja-ruby.pdf}\ という別ファイルに載せている. -この節では簡単な使用方法のみ述べる. -% -\begin{description} -%<*en> - \item[Group-ruby] -By default, ruby characters (the second argument of \cs{ruby}) -are attached to base characters (the first argument), as one object. -This type of ruby is called \emph{group-ruby}. -% -%<*ja> - \item[グループルビ] 標準ではグループルビの形で組まれる.第1引数に親文字, -第2引数にルビを記述する. -% -\begin{LTXexample}[width=0.3\textwidth] -東西線\ruby{妙典}{みようでん}駅は……\\ -東西線の\ruby{妙典}{みようでん}駅は……\\ -東西線の\ruby{妙典}{みようでん}という駅……\\ -東西線\ruby{葛西}{かさい}駅は…… -\end{LTXexample} + \item[noto-otc] Noto Serif CJK and Noto Sans CJK fonts (OTC) +% \\*[-\dimexpr\medskipamount+\baselineskip\relax] + \item[noto-otf] Noto Serif CJK and Noto Sans CJK fonts (Language-specific OTF) +\begin{center}\small +\def\AD#1#2{Noto #1 CJK #2&Noto #1 CJK JP #2}% +\begin{tabular}{lllll} +\toprule +\bf family&\bf series&\texttt{noto-otc}&\texttt{noto-otf}\\ +\midrule + &light&\AD{Serif}{Light}\\ +%\textit{mincho}% +%\textgt{明朝}% + &medium&\AD{Serif}{Regular}\\ + &bold&\AD{Serif}{Bold}\\ +\midrule + &&\AD{Sans}{Regular*}\\ + &\smash{\raisebox{1.5ex}{medium}} + &\AD{Sans}{Medium}\\ +\cmidrule(l){2-4} +%\smash{\raisebox{2ex}{\textit{gothic}}}% +%\smash{\raisebox{2ex}{\gt ゴシック}}% + &bold&\AD{Sans}{Bold}\\ + &extra bold&\AD{Sans}{Black}\\ +\midrule +%\textit{rounded gothic} +%\gt 丸ゴシック +&&\AD{Sans}{Black}\\ +\bottomrule +\end{tabular} +\end{center} + +\end{cslist} +%\subsubsection{Presets which do not support multi weights} +%\subsubsection{単ウェイト用プリセット一覧} +\label{sssec:ltjpreset-single} + %<*en> -As the above example, ruby hangover is allowed on the Hiragana before/after -its base characters. +Next, we describe settings for using only single weight. % -% この例のように,標準では前後の平仮名にルビ全角までかかるようになっている. - +%<*ja> +次に,単ウェイト用の設定を述べる.この4設定では +明朝体太字・丸ゴシック体はゴシック体と同じフォントが用いられる. +% +\par\nobreak\medskip +{\centering\small +\begin{tabular}{lllll} +\toprule +&\tt noembed&\tt ipa&\tt ipaex&\tt ms\\ +\midrule %<*en> -\item[Mono-ruby] -To attach ruby characters to each base characters (\emph{mono-ruby}), -one should use \cs{ruby} multiple times: +\it mincho&Ryumin-Light (non-embedded) +&IPA Mincho&IPAex Mincho&MS Mincho\\ +\it gothic&GothicBBB-Medium (non-embedded) +&IPA Gothic&IPAex Gothic&MS Gothic\\ % %<*ja> - \item[モノルビ] 親文字を1文字にするとモノルビとなる. -2文字以上の熟語をモノルビの形で組みたい場合は,面倒でも -その数だけ \cs{ruby} を書く必要がある. +\gtfamily 明朝&Ryumin-Light(非埋込) +&IPA明朝&IPAex明朝&MS明朝\\ +\gtfamily ゴシック&GothicBBB-Medium(非埋込) +&IPAゴシック&IPAexゴシック&MSゴシック\\ % -\begin{LTXexample}[width=0.3\textwidth] -東西線の\ruby{妙}{みよう}\ruby{典}{でん}駅は…… -\end{LTXexample} +\bottomrule +\end{tabular}\par\medskip} +%\subsubsection{Presets which use HG fonts} +%\subsubsection{HGフォントを使うプリセット} +\label{sssec:ltjpreset-hg} %<*en> - \item[Jukugo-ruby] -Vertical bar~\verb+|+ denotes a boundary of \emph{groups}. +We can use HG~fonts bundled with Microsoft~Office for realizing multiple weights. +In the table below, starred fonts (e.g., IPA~Gothic*) are used +only if \texttt{jis2004} or \texttt{nodeluxe} option is spefified. % %<*ja> - \item[熟語ルビ] 引数内の縦棒 \verb+|+ はグループの区切りを表し, -複数グループのルビは熟語ルビとして組まれる. -\cite{x4051}にあるように, -どのグループでも「親文字」が対応するルビ以上の長さの場合は -各グループごとに,そうでないときは全体をまとめて1つのグループルビとして組まれる. -\cite{jlreq}で規定されている組み方とは異なるので注意. +すぐ前に書いた単ウェイト用設定を,Microsoft Office等に付属するHGフォントを使って +多ウェイト化した設定もある.以下の表では,*~付きのフォント(例:IPAゴシック*)は +\texttt{jis2004}と\texttt{nodeluxe}のいずれかのオプションが有効になっているときに使われる. % -\begin{LTXexample} -\ruby{妙|典}{みよう|でん}\ -\ruby{葛|西}{か|さい}\ -\ruby{神楽|坂}{かぐら|ざか} -\end{LTXexample} +\par\nobreak\medskip +{\centering\small +\begin{tabular}{lllll} +\toprule +\textbf{family}&\textbf{series}&\tt ipa-hg&\tt ipaex-hg&\tt ms-hg\\ +\midrule %<*en> -If there are multiple groups in one \cs{ruby} call, -A linebreak between two groups is allowed. -% -% 複数ルビではグループとグループの間で改行が可能である. -\begin{LTXexample}[width=0.3\textwidth] -\vbox{\hsize=6\zw\noindent - \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} - \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} - \hbox to 3\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た} -} -\end{LTXexample} -\end{description} +&medium&IPA Mincho&IPAex Mincho&MS Mincho\\ +\smash{\raisebox{1.5ex}{\textit{mincho}}}% +&bold&HG Mincho E&HG Mincho E&HG Mincho E\\\midrule +&&IPA Gothic*&IPAex Gothic*&MS Gothic*\\ +&\smash{\raisebox{1.5ex}{medium}}% +&HG Gothic M&HG Gothic M&HG Gothic M\\\cmidrule{2-5} +\textit{gothic}&bold&HG Gothic E&HG Gothic E&HG Gothic E\\\cmidrule{2-5} +&extra bold&HG Soei Kaku Gothic UB&HG Soei Kaku Gothic UB&HG Soei Kaku Gothic UB\\\midrule +\textit{rounded gothic}&& +HG MaruGothic M PRO&HG MaruGothic M PRO&HG MaruGothic M PRO\\ +% +%<*ja> +&medium&IPA明朝&IPAex明朝&MS明朝\\ +\smash{\raisebox{1.5ex}{\textgt{明朝}}}% +&bold&HG明朝E&HG明朝E&HG明朝E\\\midrule +&&IPAゴシック*&IPAexゴシック*&MSゴシック*\\ +&\smash{\raisebox{1.5ex}{medium}}% +&HGゴシックM&HGゴシックM&HGゴシックM\\\cmidrule{2-5} +\textgt{ゴシック}&bold&HGゴシックE&HGゴシックE&HGゴシックE\\\cmidrule{2-5} +&extra bold&HG創英角ゴシックUB&HG創英角ゴシックUB&HG創英角ゴシックUB\\\midrule +\textgt{丸ゴシック}&& +HG丸ゴシックM-PRO&HG丸ゴシックM-PRO&HG丸ゴシックM-PRO\\ +% +\bottomrule +\end{tabular}\par\medskip} %<*en> -If the width of ruby characters are longer than that of base characters, -\cs{ruby} automatically selects the appropriate form -among the line-head form, the line-middle form, and the line-end form. +Note that HG~Mincho~E, HG~Gothic~E, HG Soei Kaku Gothic UB, and HG Maru Gothic PRO +are internally specified by: +\begin{description} +\item[default] by font name (\texttt{HGMinchoE}, etc.). +\item[\texttt{jis90}, \texttt{90jis}] by file name (\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf}). +\item[\texttt{jis2004}, \texttt{2004jis}] by file name (\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf}). +\end{description} % %<*ja> -また,ルビ文字のほうが親文字よりも長い場合は,自動的に -行頭形・行中形・行末形のいずれか適切なものを選択する. +なお,HG明朝E・HGゴシックE・HG創英角ゴシックUB・HG丸ゴシック体PROの4つについては,内部で +\begin{description} +\item[標準] フォント名(\texttt{HGMinchoE} など) +\item[\texttt{jis90}, \texttt{90jis}指定時] ファイル名 (% +\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf}) +\item[\texttt{jis2004}, \texttt{2004jis}指定時] ファイル名 (% +\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf}) +\end{description} +として指定を行っているので注意すること. % -\begin{LTXexample}[width=0.3\textwidth] -\vbox{\hsize=8\zw\noindent -\null\kern3\zw ……を\ruby{承}{うけたまわ}る - \kern1\zw ……を\ruby{承}{うけたまわ}る\\ -\null\kern5\zw ……を\ruby{承}{うけたまわ}る -} -\end{LTXexample} +%\subsubsection{Define/Use Custom Presets} +%\subsubsection{新たなプリセットの定義} %<*ja> -\subsection{\Pkg{lltjext}} -\pLaTeX では縦組用の拡張として \Pkg{plext} パッケージが用意されていたが, -それを\LuaTeX-ja用に書きなおしたものが本追加パッケージ \Pkg{lltjext} である. - -従来の \Pkg{plext} パッケージとの違いは, -{\catcode`\<=12 -\begin{itemize} - \item 組方向オプション \texttt{}(横組),\texttt{}(縦組), -\texttt{}\ の他に\ \texttt{}(dtou方向),\texttt{}(utod方向)を追加した. -\texttt{} と \texttt{} の違いは,\texttt{} が(\Pkg{plext} パッケージと同様に) -周囲の組方向が縦組のときにしか意味を持たない - のに対し,\texttt{} にはそのような制限がないことである. - - \item \Pkg{plext} パッケージでは,表組(\texttt{tabular} 環境,\texttt{align} 環境等)や -\texttt{minipage} 環境,\cs{parbox} 命令において, -垂直位置指定 \texttt{[t]},~\texttt{[b]} の挙動が非読み込み時と微妙に変わることがあった. - -\Pkg{lltjext} パッケージでは,垂直位置指定が\LaTeXe と同様の挙動(以下に示す)に -なるように修正した. -\begin{itemize} - \item \texttt{[t]} オプション指定時は,ボックスのベースラインが中身の1行目のベースライン - (1行目の上に罫線などが来た時は,ボックスの上端)に一致するように配置する. - \item \texttt{[b]} オプション指定時は,ボックスのベースラインが中身の最終行のベースライン - (中身の最後が罫線などの時は,ボックスの下端)に一致するように配置する. - \item それ以外のときは,ボックスの中央が「数式の軸」に一致するように配置する. -\end{itemize} - - \item 連数字用命令 \cs{rensuji} における位置合わせオプション \texttt{[l]}, \texttt{[c]}, - \texttt{[r]} の挙動を若干変更した. - -\end{itemize} -} +バージョン20170904.0以降では,自分で新たなプリセットを定義することが出来るようになった. +以下に説明する2命令はプリアンブルでしか実行できない. % %<*en> -\subsection{\texttt{lltjext.sty}} -\pLaTeX\ supplies additional macros for vertical writing in the \Pkg{plext} package. -The \Pkg{lltjext} package which we want to describe here is the \LuaTeX-ja -counterpart of the \Pkg{plext} package. +From version~20170904.0, one can define new presets using \cs{ltjnewpreset}, +and use them by \cs{ltjapplypreset}. These two commands can only be used in the preamble. % +\begin{cslist} + \item[\cs{ltjnewpreset}\{\}\{\}] +%<*ja> + 新たにという名称のプリセットを定義する.この名称は, + すでに定義されているプリセット名や, + \ref{sssec:ltjpreset-general}で定義されているオプション,さらに + 次の9つと重複してはならない. + \begin{quote} + \ttfamily + mc mc-l mc-m mc-bx gt gt-m gt-bx gt-eb mg-m + \end{quote} + + は,プリセット名や以下のキー達のコンマ区切りリストを指定する: + \begin{description} + \item[\ttfamily mc-l=] 明朝体細字(\cs{mcfamily}\cs{ltseries}) + \item[\ttfamily mc-m=] 明朝体中字(\cs{mcfamily}\cs{mdseries}) + \item[\ttfamily mc-bx=] 明朝体太字(\cs{mcfamily}\cs{bfseries}) + \item[\ttfamily gt-m=] ゴシック体中字(\cs{gtfamily}\cs{mdseries}) + \item[\ttfamily gt-bx=] ゴシック体太字(\cs{gtfamily}\cs{bfseries}) + \item[\ttfamily gt-eb=] ゴシック体太字(\cs{gtfamily}\cs{ebseries}) + \item[\ttfamily mg-m=] 丸ゴシック体(\cs{mgfamily}) + \item[\ttfamily mc=] 明朝体の細字・中字・太字全部を設定. + 以下を指定したことと同じである: + \begin{quote} + \ttfamily mc-l=, mc-m=, mc-bx= + \end{quote} + \item[\ttfamily gt=] ゴシック体の中字・太字・極太全部を設定. + 以下を指定したことと同じである: + \begin{quote} + \ttfamily gt-m=, gt-bx=, gt-eb= + \end{quote} + \end{description} + なお,パッケージ読み込み時に \texttt{deluxe} が有効でない場合は, + 上記9キーのうち\texttt{mc}, \texttt{gt}しか実質的に意味を持たない. +% +%<*en> + Define new preset~. This cannot be same as other presets, + options described in Subsubsection~\ref{sssec:ltjpreset-general}, nor + following nine strings: + \begin{quote} + \ttfamily + mc mc-l mc-m mc-bx gt gt-m gt-bx gt-eb mg-m + \end{quote} + is a comma-separated list which consists of + other presets and/or the following keys: + \begin{description} + \item[\ttfamily mc-l=] mincho light + \item[\ttfamily mc-m=] mincho medium + \item[\ttfamily mc-bx=] mincho bold + \item[\ttfamily gt-m=] gothic medium + \item[\ttfamily gt-bx=] gothic bold + \item[\ttfamily gt-eb=] gothic extra~bold + \item[\ttfamily mg-m=] rounded gothic + \item[\ttfamily mc=] Same as + \begin{quote} + \ttfamily mc-l=, mc-m=, mc-bx= + \end{quote} + \item[\ttfamily gt=] Same as + \begin{quote} + \ttfamily gt-m=, gt-bx=, gt-eb= + \end{quote} + \end{description} + If \texttt{deluxe} is not specified at loading the package, + only \texttt{mc}~and~\texttt{gt} keys (among above 9~keys) have a meaning. +% + \item[\cs{ltjnewpreset}*\{\}\{\}] %<*ja> -念の為,本 \Pkg{lltjext} パッケージで追加・変更している命令の一覧を載せておく. -\begin{cslist} -\item[tabular\textrm{, }array\textrm{, }minipage環境] -これらの環境は, -\begin{lstlisting} -\begin{tabular}[pos]{table spec} ... \end{tabular} -\begin{array}[pos]{table spec} ... \end{array} -\begin{minipage}[pos]{width} ... \end{minipage} -\end{lstlisting} -のように,組方向オプション \texttt{\} が拡張されている. -既に述べたように,組方向オプションに指定できる値は以下の5つであり, -それ以外を指定した時や無指定時は周囲の組方向と同じ組方向になる. -\begin{description} - \item[y] 横組(\cs{yoko}) - \item[t] 縦組(\cs{tate}) - \item[z] 周囲が縦組の時はutod方向,それ以外はそのまま - \item[d] dtou方向 - \item[u] utod方向 -\end{description} -\item[\cs{parbox}\<\>{[]}\{\}\{\}] -\cs{parbox} 命令も同様に,組方向の指定ができるように拡張されている. + \cs{ltjnewpreset}とほぼ同じであるが,こちらはすでに定義されているプリセット名 + をに指定した場合にはエラーを出さずに定義を置き換える. +% +%<*en> + Almost same as \cs{ltjnewpreset}. However, if matches a preset which already defined, + this command simply overwrite it. +% + \item[\cs{ltjapplypreset}\{\}] +% で指定されたプリセットを使って和文フォントを設定する. +% Set Japanese font families using preset~. +\end{cslist} -\item[\cs{pbox}\<\>{[][]}\{\}] -組方向での中身をLRモードで組む命令である. -が正の値であるときは,ボックス全体の幅がその値となる. -その際,中身はの値に従い,左寄せ(\texttt{l}),右揃え(\texttt{r}), -中央揃え(それ以外)される. -\item[picture環境] -図表作成に用いる \texttt{picture} 環境も, +%<*ja> +なお,\cs{ltjnewpreset}の第二引数に含まれる +プリセット名は\cs{ltjnewpreset}の時点で定義されている必要はなく, +\cs{ltjapplypreset}で実際に使うときに定義されていれば良い. +そのため,次のような記述も可能である: \begin{lstlisting} -\begin{picture}(x_size, y_size)(x_offset,y_offset) - ... -\end{picture} + \ltjnewpreset{hoge}{piyo,mc-bx=HiraMinProN-W6} + \ltjnewpreset{piyo}{mg-m=HiraMaruProN-W4} + \ltjapplypreset{hoge} \end{lstlisting} -と組方向が指定できるように拡張されている. -$x$成分の増加方向は字送り方向,$y$成分の増加方向は行送り方向の\emph{反対方向}となる. -\Pkg{plext} パッケージと同様に -内部ではベースライン補正(\Param{yalbaselineshift}パラメータなど)の影響を受けないように, -\cs{put},~\cs{line}, \cs{vector}, \cs{dashbox}, \cs{oval},~\cs{circle}も -ベースライン補正を受けないように再定義されている. - -\item[\cs{rensuji}{[]}\{\}\textrm{, }\cs{rensujiskip}] - -\item[\cs{Kanji}\{\}] - -\item[\cs{kasen}\{\}\textrm{, }\cs{bou}\{\}\textrm{, - }\cs{boutenchar}] -\item[参照番号] -\end{cslist} +\paragraph{注意} +\cs{ltjnewpreset}で定義したプリセットには以下の制限がある. +\begin{itemize} + \item 非埋め込みのフォントを指定することはできない. + \item \texttt{ipa-hg}などのいくつかのプリセットでは + 「\texttt{90jis}, \texttt{jis2004}が指定されているか否かでフォントの指定を変える」処理が + 行われていたが,\cs{ltjnewpreset}で定義したプリセットではこの処理は働かない. + HGフォントやモガ明朝などを使うプリセットを定義する場合には注意すること. +\end{itemize} % %<*en> -\begin{cslist} -\item[tabular\textrm{, }array\textrm{, }minipage\textrm{ environments}] -These environments are extended by \texttt{\}, which specifies the direction, -as follows: +Note that \cs{ltjnewpreset} does not ``expand'' the definition to define a preset. +This means that one can write as the following: \begin{lstlisting} -\begin{tabular}[pos]{table spec} ... \end{tabular} -\begin{array}[pos]{table spec} ... \end{array} -\begin{minipage}[pos]{width} ... \end{minipage} + \ltjnewpreset{hoge}{piyo,mc-bx=HiraMinProN-W6} + \ltjnewpreset{piyo}{mg-m=HiraMaruProN-W4} + \ltjapplypreset{hoge} \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} - \item[y] \emph{yoko} direction (horizontal writing) - \item[t] \emph{tate} direction (vertical writing) - \item[z] \emph{utod} direction if direction outside the env.\ is \emph{tate}. - \item[d] \emph{dtou} direction - \item[u] \emph{utod} direction -\end{description} -\item[\cs{parbox}\<\>{[]}\{\}\{\}] -\cs{parbox} command is also extended by \texttt{\}. - -\item[\cs{pbox}\<\>{[][]}\{\}] -This commands typeset in LR-mode, in direction. -If is positive, the width of the box becomes this . -In this case, will be aligned \dots - -\item[picture\textrm{\ environment}] - -\item[\cs{rensuji}{[]}\{\}\textrm{, }\cs{rensujiskip}] - -\item[\cs{Kanji}\{\}] - -\item[\cs{kasen}\{\}\textrm{, }\cs{bou}\{\}\textrm{, - }\cs{boutenchar}] -\item[参照番号] -\end{cslist} +\paragraph{Restrictions} +Presets which are defined by \cs{ltjnewpreset} have following restrictions: +\begin{itemize} + \item One cannot specify non-embedded fonts (such as Ryumin-Light). + \item Some presets, such as \texttt{ipa-hg}, have a feature that + fonts are changed according to whether \texttt{90jis}~or~\texttt{jis2004} is speified. + This feature is not usable in presets which are defined by \cs{ltjnewpreset}. +\end{itemize} % - +\clearpage %\part{Implementations} %\part{実装} \label{part-imp} @@ -7599,18 +8497,23 @@ Current number of Japanese font family for math formulas. \attr{ltj@curjfnt} %<*en> -The font index of current Japanese font for horizontal direction. +If this attribute is a positive number, it stores the font number of current Japanese font for horizontal direction. +If this attribute is negative, it means that the Japanese font for horizontal direction is +not loaded---\LuaTeX-ja only knows its size and JFM. % %<*ja> -現在の横組用和文フォントのフォント番号. +基本的には現在の横組用和文フォントのフォント番号を格納しているが, +\LaTeX 下で使用する場合は($-2$以下の)負数となることがある. + 負数の場合は「横組用和文フォントは実際には読み込まれておらず,そのフォントサイズとJFMだけが + \LuaTeX-jaが把握している」状態を表す. % \attr{ltj@curtfnt} %<*en> -The font index of current Japanese font for vertical direction. +Similar to \cs{ltj@curjfnt}, but with current Japanese font for vertical direction. % %<*ja> -現在の縦組用和文フォントのフォント番号. +縦組用和文フォントに関する\cs{ltj@curjfnt}と同様の値. % \attr{ltj@charclass} @@ -7833,7 +8736,7 @@ for its label before the actual contents. So \dots % %<*ja> 「段落の開始」を意味するノード. -list環境,itemize環境などにおいて,\cs{item} で始まる各項目は…… +\texttt{list}環境,\texttt{itemize}環境などにおいて,\cs{item} で始まる各項目は…… % \item[\textit{direction}] @@ -7849,7 +8752,7 @@ These whatsits will be removed during the process of inserting \textbf{JAglue}s. %\subsection{Stack system of \LuaTeX-ja} %\subsection{\LuaTeX-jaのスタックシステム} -\label{ssec-stack} +\label{ssec:stack} %\paragraph{Background} %\paragraph{背景} @@ -7873,7 +8776,7 @@ source: \end{LTXexample} %<*en> -As described in Subsection~\ref{ssec-param}, the only effective value of +As described in Subsection~\ref{ssec:param}, the only effective value of \Param{kanjiskip} in an hbox is the latest value, so the value of \Param{kanjiskip} which applied in the entire hbox should be 5\,pt. However, by the implementation method of \LuaTeX, this ``5\,pt'' cannot be @@ -7881,7 +8784,7 @@ known from any callbacks. In the \texttt{tex/packaging.w}, which is a file in the source of \LuaTeX, there are the following codes: % %<*ja> -\ref{ssec-param}節で述べたように,あるhboxの中で効力を持つ +\ref{ssec:param}節で述べたように,あるhboxの中で効力を持つ \Param{kanjiskip}の値は最後に現れた値のみであり,したがってボックス全体に適用される \Param{kanjiskip}は5\,ptであるべきである.しかし,\LuaTeX の実 装を観察すると,この5\,ptという長さはどのコールバックからも知ることはできないことがわかる. @@ -8178,7 +9081,7 @@ function luatexja.unary_pars.hoge (t) end \end{lstlisting} Here the argument of \verb+luatexja.unary_pars.hoge+ is -the stack level of \LuaTeX-ja's stack system (see Subsection~\ref{ssec-stack}). +the stack level of \LuaTeX-ja's stack system (see Subsection~\ref{ssec:stack}). On the other hand, for parameters that need an additional argument (this must be an integer), one have to define a function in @@ -8209,7 +9112,7 @@ function luatexja.unary_pars.hoge (t) end \end{lstlisting} を実行すると,\verb+\ltjgetparameter{hoge}+ は \texttt{42} という\emph{文字列}を返す. -関数 \verb+luatexja.unary_pars.hoge+ の引数$t$は,\ref{ssec-stack}節で述べた +関数 \verb+luatexja.unary_pars.hoge+ の引数$t$は,\ref{ssec:stack}節で述べた \LuaTeX-jaのスタックシステムにおけるスタックレベルである. 戻り値はいかなる値であっても,最終的には文字列として出力されることに注意. @@ -8521,6 +9424,8 @@ u \def\OA{$\text{\sf O}_{\text{\sf A}}$} \def\OB{$\text{\sf O}_{\text{\sf B}}$} +\def\NA{$\text{\sf N}_{\text{\sf A}}$} +\def\NB{$\text{\sf N}_{\text{\sf B}}$} \begin{defn} %<*en> A \emph{cluster} is consecutive nodes in one of the following forms, @@ -8715,7 +9620,7 @@ JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip} \item[欧文] リスト中に直接/hboxの中身として出現している「\textbf{JAchar}以外の文字」.次の3つの場合が該当: \begin{itemize} \item \textit{id}が\textit{id\_glyph}である. -\item \textit{id}が\textit{id\_math}である. +\item \textit{id}が\textit{id\_math}である(つまりこのクラスタは1つの文中数式をなす). \item \textit{id}が\textit{id\_pbox}か\textit{id\_hlist}か\textit{id\_disc}であって,$\mathit{Np}.\mathit{head}$が\textbf{ALchar}. \end{itemize} \item[箱] box,またはそれに類似するもの.次の2つが該当: @@ -8771,7 +9676,7 @@ $g$は「文字コード \texttt{'boxbdd'} の文字」と\textit{Np}の間に \Param{kcatcode}の最下位ビットはこの\Param{jcharwidowpenalty}用にのみ利用される.}. \subsection{概観と典型例:2つの「和文A」の場合} -\label{ssec-cluster-wa} +\label{ssec:cluster-wa} 先に述べたように,2つの隣り合ったクラスタ,\textit{Nq}と\textit{Np}の間には, ペナルティ,\cs{vadjust},whatsitなど,行組版には関係しないものがある.模式的に表すと, \[ @@ -8937,7 +9842,7 @@ $a$は禁則処理用に\textit{Nq}と\textit{Np}の間に加えられるべき \sf 和文A& \gkf{E}{M→K}{PN}& \gkf{---}{\OA →K}{PN}& -\gkf{---}{\OA →X}{PN}& +\gkf{---}{\NA →X}{PN}& \gkf{---}{\OA}{PA}& \gkf{---}{\OA}{PN}& \gkf{---}{\OA}{PS}\\ @@ -8946,7 +9851,7 @@ $a$は禁則処理用に\textit{Nq}と\textit{Np}の間に加えられるべき \gkf{---}{K}{PS}& \gkf{---}{X}{PS}\\ \sf 欧文& -\gkf{E}{\OB →X}{PA}& +\gkf{E}{\NB →X}{PA}& \gkf{---}{X}{PS}\cr \sf 箱&\gkf{E}{\OB}{PA}\\ \sf glue&\gkf{E}{\OB}{PN}\\ @@ -8997,21 +9902,29 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] \paragraph{和文Aと欧文の間} \textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{欧文}の場合,JFMグルー挿入処理は次のようにして行われる. \begin{itemize} -\item 「右空白」については,まず以下に述べる\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる. +\item 「右空白」については,まず以下に述べる\textsf{欧文境界B~[\NB]}により空白を決定しようと試みる. それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める. %\item 「左空白」については,既に述べた\textsf{line-end~[E]}をそのまま採用する.それに伴う「右空白」の補正も%同じ. \item 禁則用ペナルティも,以前述べた\textsf{P-normal~[PN]}と同じである. \end{itemize} \begin{description} -\item[Boundary-B~{[\OB]}] \textbf{JAchar}と「\textbf{JAchar}でないもの」との間に入る空白を以下によって求め, -未定義でなければそれを「右空白」として採用する. -\textsf{JFM-origin~[M]}の変種と考えて良い. -これによって定まる空白の典型例は,和文の閉じ括弧と欧文文字の間に入る半角アキである. +\item[欧文境界B~{[\NB]}] 以下で求めた量を「右空白」として採用する. +この処理は\textsf{JFM-origin~[M]}の変種と考えて良く, +典型例は「和文の閉じ括弧と欧文文字の間に入る半角アキ」である. \begin{enumerate} \item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合% -(証としてwhatsitノードが自動挿入される),「右空白」は未定義. +(証としてwhatsitノードが自動挿入される),未定義. \item そうでなければ, -\textit{Nq}と「文字コードが {\tt'jcharbdd'} の文字」との間に入るグルー/カーンとして定まる. +\textit{Nq}と「文字コードが$x$の文字」との間に入るグルー/カーンとする. +この$x$は次の場合分けによる: + \begin{itemize} + \item $\mathit{Np}.\mathit{id}$が\textit{id\_math}のとき(つまりクラスタ\textit{Np}が文中数式を表す) + ときは,$x=-1$. + \item \textit{Np}の中身の中身の文字コードについて,「直前への\Param{xkanjiskip}の挿入」が禁止されている +(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが偶数)ときは, + $x=\text{\texttt{'nox\_alchar'}}$. + \item 以上のいずれでもないときは,$x=\text{\texttt{'alchar'}}$. + \end{itemize} \end{enumerate} \item[\Param{xkanjiskip}~{[X]}] この段階では,\textsf{\Param{kanjiskip}~[K]}のときと同じように, @@ -9035,22 +9948,29 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] \paragraph{欧文と和文Aの間} \textit{Nq}が\textsf{欧文}で,\textit{Np}が\textsf{和文A}の場合,JFMグルー挿入処理は上の場合とほぼ同じである. -\textsf{和文A}のクラスタが逆になるので,\textsf{Boundary-A~[\OA]}の部分が変わるだけ. +\textsf{和文A}のクラスタが逆になるので,\textsf{欧文境界B~[\NB]}の部分が変わるだけである. \begin{itemize} -\item 「右空白」については,まず以下に述べる\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる. +\item 「右空白」については,まず以下に述べる\textsf{欧文境界A~[\OA]}により空白を決定しようと試みる. それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める. %\item \textit{Nq}が和文でないので,「左空白」は算出されない. \item 禁則用ペナルティは,以前述べた\textsf{P-normal~[PN]}と同じである. \end{itemize} \begin{description} -\item[Boundary-A~{[\OA]}] 「\textbf{JAchar}でないもの」と\textbf{JAchar}との間に入る空白を以下によって求め, -未定義でなければそれを「右空白」として採用する. -\textsf{JFM-origin~[M]}の変種と考えて良い. -これによって定まる空白の典型例は,欧文文字と和文の開き括弧との間に入る半角アキである. +\item[欧文境界A~{[\NA]}] これは\textsf{欧文境界B~[\NB]}で\textit{Np}と\textit{Nq}の役割が + 交換されたものと思えば良い. + この処理で定まる空白の典型例は,欧文文字と和文の開き括弧との間に入る半角アキである. \begin{enumerate} -\item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合(証としてwhatsitノードが自動挿入される),次へ. +\item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合(証としてwhatsitノードが自動挿入される), + 未定義. \item そうでなければ, -「文字コードが {\tt'jcharbdd'} の文字」と\textit{Np}との間に入るグルー/カーンとして定まる. +「文字コードが$x$の文字」と\textit{Np}との間に入るグルー/カーンと定める. +$x$は\textit{Nq}から\textsf{欧文境界B~[\NB]}におけるそれと同じ方法で定めるが, +\texttt{'nox\_alchar'}か\texttt{'alchar'}は +\begin{quote} + \textit{Nq}の中身の文字コードについて,「直後への\Param{xkanjiskip}の挿入」が禁止されている +(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが2以上). +\end{quote} + か否かで判断する. \end{enumerate} \end{description} @@ -9058,9 +9978,8 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] \textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{箱}・グルー・カーンのいずれかであった場合, 両者の間に挿入されるJFMグルーについては同じ処理である.しかし,そこでの行分割に対する仕様が異なるので, ペナルティの挿入処理は若干異なったものとなっている. - \begin{itemize} -\item 「右空白」については,既に述べた\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる. +\item 「右空白」については,以下に述べる\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる. それが失敗した場合は,「右空白」は挿入されない. %\item 「左空白」については,既に述べた\textsf{line-end~[E]}の算出方法をそのまま採用する.それに伴う「右空白」の補正も同じ. \item 禁則用ペナルティの処理は,後ろのクラスタ\textit{Np}の種類によって異なる. @@ -9083,6 +10002,12 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] \end{itemize} \begin{description} +\item[Boundary-B~{[\OB]}] この処理は\textsf{欧文境界B~[\NB]}と同様であり, + $x$が次によって決まることのみが異なる: + \begin{itemize} + \item \textit{Np}がグルーやカーンのときは,$x=\text{\texttt{'glue'}}$. + \item そうでない(\textit{Np}が\textsf{箱})ときは,$x=\text{\texttt{'jcharbdd'}}$. + \end{itemize} \item[P-allow~{[PA]}] \textit{Nq}と\textit{Np}の間の(a)部分にペナルティがあれば,\textsf{P-normal~[PN]}と同様に, それらの各ノードにおいてペナルティ値を$a$だけ増加させる. @@ -9111,7 +10036,7 @@ If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K] すぐ上の(\textit{Nq}と\textit{Np}の順序が逆になっている)場合と同じである. %が,「左空白」がなくなることにのみ注意. \begin{itemize} -\item 「右空白」については,既に述べた\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる. +\item 「右空白」については,以下に述べる\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる. それが失敗した場合は,「右空白」は挿入されない. %\item \textit{Nq}が和文でないので,「左空白」は算出されない. \item 禁則用ペナルティの処理は,\textit{Nq}の種類によって異なる. @@ -9126,12 +10051,21 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, \end{description} \end{itemize} +\begin{description} +\item[Boundary-A~{[\OA]}] この処理は\textsf{欧文境界A~[\NA]}と同様であり, + $x$が次によって決まることのみが異なる: + \begin{itemize} + \item \textit{Nq}がグルーやカーンのときは,$x=\text{\texttt{'glue'}}$. + \item そうでない(\textit{Nq}が\textsf{箱})ときは,$x=\text{\texttt{'jcharbdd'}}$. + \end{itemize} +\end{description} + \paragraph{和文Aと和文Bの違い} 先に述べたように,\textsf{和文B}はhboxの中身の先頭(or 末尾)として出現している \textbf{JAchar}である.リスト内に直接ノードとして現れている\textbf{JAchar}(\textsf{和文A})との違いは, \begin{itemize} \item \textsf{和文B}に対しては,JFMの文字クラス指定から定まる空白 -\textsf{JFM-origin~[M]},\textsf{Boundary-A~[\OA]},\textsf{Boundary-B~[\OB]})の挿入は行われない. +(\textsf{JFM由来[M]},\textsf{Boundary-A~[\OA]}など)の挿入は行われない. %「左空白」の算出も行われない. 例えば, \begin{itemize} @@ -9154,12 +10088,12 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので, あ.A \end{LTXexample} \begin{itemize} -\item 1行目の\cs{inhibitglue}は\textsf{Boundary-B~[\OB]}の処理のみを抑止するので,ピリオドと「A」の間には +\item 1行目の\cs{inhibitglue}は\textsf{欧文境界B~[\NB]}の処理のみを抑止するので,ピリオドと「A」の間には \Param{xkanjiskip}(四分アキ)が入ることに注意. \item 2行目のピリオドと「A」の間においては,前者が\textsf{和文B}となる(hboxの中身の末尾として登場しているから)ので, -そもそも\textsf{Boundary-B~[\OB]}の処理は行われない.よって,\Param{xkanjiskip}が入ることとなる. +そもそも\textsf{欧文境界B~[\NB]}の処理は行われない.よって,\Param{xkanjiskip}が入ることとなる. \item 3行目では,ピリオドの属するクラスタは\textsf{和文A}である.これによって, -ピリオドと「A」の間には\textsf{Boundary-B~[\OB]}由来の半角アキが入ることになる. +ピリオドと「A」の間には\textsf{欧文境界B~[\NB]}由来の半角アキが入ることになる. \end{itemize} % @@ -9341,7 +10275,7 @@ variation selectors are ``combined'' with the previous character. \texttt{vsraw}は,ブール値の値をとるキーであり,標準ではfalseである. \begin{itemize} \item trueの場合は,異体字セレクタは「直前の文字に続けて」出力される. -もしもIVSサポート(\ref{ssec-ltjotf}節)が有効になっていた場合は, +もしもIVSサポート(\ref{ssec:ltjotf}節)が有効になっていた場合は, 以下の例(左側は入力,右側はその出力)のようになる. % \begin{LTXexample} @@ -9472,19 +10406,37 @@ For illustration, we introduce following classes of characters: 直前が和文文字であるかを示すフラグ \verb+\lst@ifkanji+ を新たに導入した. 以降,説明のために以下のように文字を分類する: % +%<*ja> \begin{center} \small -\begin{tabular}{lccccc} +\begin{tabular}{llllll} \toprule -&Letter&Other&Kanji&Open&Close\\\midrule +&\emph{Letter}&\emph{Other}&\emph{Kanji}&\emph{Open}&\emph{Close}\\\midrule \verb+\lst@ifletter+&T&F&T&F&T\\ \verb+\lst@ifkanji+&F&F&T&T&F\\ -%Meaning&char in an identifier&other alphabet&% -%most of Japanese char&opening brackets&closing brackets\\ -%意図&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\ +\emph{意図}&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\ +\bottomrule +\end{tabular} +\end{center} +% +%<*en> +\begin{center} +\small +\begin{tabular}{llll} +\toprule +&\textbf{Letter}&\textbf{Other}&\\\midrule +\verb+\lst@ifletter+&T&F&\\ +\verb+\lst@ifkanji+&F&F&\\ +\textbf{Meaning}&char in an identifier&other alphabet&\\ + \midrule +&\textbf{Kanji}&\textbf{Open}&\textbf{Close}\\\midrule +\verb+\lst@ifletter+&T&F&T\\ +\verb+\lst@ifkanji+&T&T&F\\ +\textbf{Meaning}&most of Japanese char&opening brackets&closing brackets\\ \bottomrule \end{tabular} \end{center} +% %<*en> Note that \textit{digits} in the \Pkg{listings} package can be Letter or Other according to circumstances. @@ -9516,27 +10468,27 @@ The following table summarizes $5\times 5=25$ cases: % \begin{center} \small -\begin{tabular}{llccccc} +\begin{tabular}{lllllll} \toprule %<*en> -&&\multicolumn{4}{c}{Next}\\\cmidrule(lr){3-7} -&&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss} -&\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule +&&\multicolumn{4}{c}{\textbf{Next}}\\\cmidrule(lr){3-7} +&&\hbox to 4em{Letter\hss}&\hbox to 4em{Other\hss} +&\hbox to 4em{Kanji\hss}&\hbox to 4em{Open\hss}&Close\\\midrule &Letter&collects&\multicolumn{3}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ &Other&outputs&collects&\multicolumn{2}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ -Prev&Kanji&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ +\textbf{Prev}&Kanji&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ &Open&\multicolumn{5}{c}{\hrulefill \ collects\ \hrulefill}\\ &Close&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\ % %<*ja> -&&\multicolumn{4}{c}{後ろ側の文字}\\\cmidrule(lr){3-7} -&&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss} -&\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule -直&Letter&収集&\multicolumn{3}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ -前&Other&出力&収集&\multicolumn{2}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ -文&Kanji&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ -字&Open&\multicolumn{5}{c}{\hrulefill \ 収集\ \hrulefill}\\ -種&Close&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ +&&\multicolumn{4}{c}{\textbf{後側文字種}}\\\cmidrule(lr){3-7} +&&\hbox to 4em{Letter\hss}&\hbox to 4em{Other\hss} +&\hbox to 4em{Kanji\hss}&\hbox to 4em{Open\hss}&Close\\\midrule +\emph{直}&Letter&収集&\multicolumn{3}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ +\emph{前}&Other&出力&収集&\multicolumn{2}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ +\emph{文}&Kanji&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ +\emph{字}&Open&\multicolumn{5}{c}{\hrulefill \ 収集\ \hrulefill}\\ +\emph{種}&Close&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\ % \bottomrule \end{tabular} @@ -9626,7 +10578,7 @@ the \texttt{lstlisting} environment or other environments/commands. \begin{itemize} \item \textbf{JAglue}ではないグルー \item JFMグルー(優先度\footnote{% - \ref{ssec-jfm-str}節にあるように, + \ref{ssec:jfm-str}節にあるように, 各JFMグルーには$-4$から3までの優先度がついている.場合によっては 伸びと縮みで異なる優先度が付いているかもしれない.}% 別にまとめられる) @@ -9784,53 +10736,6 @@ $|\textit{total}|$の分だけが,行中のグルーの伸び量,あるい % %<*ja> -\section{IVS対応} -\verb+luatexja.otf.enable_ivs()+ を実行し,IVS対応を有効にした状態では, -\verb+pre_linebreak_filter+ や \verb+hpack_filter+ コールバックには -次の4つが順に実行される状態となっている: -\begin{description} -\item[\tt ltj.do\_ivs] \textit{glyph\_node}~$p$の直後に,異体字セレクタ(を表す\textit{glyph\_node}) -が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える. - -しかし,単に$p.\textit{char}$を変更するだけでは,後から -OpenType機能の適用(すぐ下)により置換される可能性がある.そのため, -\cs{CID} や \cs{UTF} と同じように,\textit{glyph\_node}~$p$の代わりに -\texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを用いている. -\item[(\Pkg{luaotfload} によるfont featureの適用)] -\item[\tt ltj.otf] \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを -きちんと\textit{glyph\_node}に変換する.この処理は,\cs{CID}, \cs{UTF}やIVSによる置換が, -OpenType機能の適用で上書きされてしまうのを防止するためである. -\item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と, -JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う. -\end{description} - -問題は各フォントの持っているIVS情報をどのように取得するか,である. -\Pkg{luaotfload} はフォント番号の情報を\ -\texttt{fonts.hashes.identifiers[]} 以下に格納している. -しかし,OpenTypeフォントのIVS情報は格納されていないようである% -\footnote{TrueTypeフォントに関しては, -\begin{center} -\texttt{fonts.hashes.idenfiers[]% - .resources.variants[][]} -\end{center} -に,番の文字の後に異体字セレクタが続いた場合に -出力すべきグリフが書かれてある.}. -%例えば,小塚明朝Pr6N~Rでは, - -一方,\LuaTeX 内部の \texttt{fontloader} の返すテーブルには -OpenTypeフォントでもTrueTypeフォントでもIVS情報が格納されている. -具体的には…… - -そのため,\LuaTeX-jaのIVS対応においては,\LuaTeX 内部の\ -\texttt{fontloader} を直接用いることで,フォントのIVS情報を取得している. -20140114.0以降でキャッシュを用いるようにした要因はここにあり, -\texttt{fontloader} の呼び出しでかなり時間を消費することから, -%%% to_table を使わなくしたことで,メモリ使用量は減った -IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している. -% - - -%<*ja> \section{複数フォントの「合成」(未完)} \section{\LuaTeX-jaにおけるキャッシュ} \Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を @@ -9934,6 +10839,7 @@ The following is the structure of the that table. \midrule Adobe-Japan1-*<j-cid-auto-adobe-japan1.lua&UniJIS2004-UTF32-*&Adobe-Japan1-UCS2\\ Adobe-Korea1-*<j-cid-auto-adobe-korea1.lua&UniKS-UTF32-*&Adobe-Korea1-UCS2\\ +Adobe-KR-*<j-cid-auto-adobe-kr.lua&UniAKR-UTF32-*&Adobe-KR-UCS2\\ Adobe-GB1-*<j-cid-auto-adobe-gb1.lua&UniGB-UTF32-*&Adobe-GB1-UCS2\\ Adobe-CNS1-*<j-cid-auto-adobe-cns1.lua&UniCNS-UTF32-*&Adobe-CNS1-UCS2\\ \bottomrule @@ -10258,6 +11164,51 @@ direction~whatsit内部のノードリストに,\textit{dir\_box}として格 } \] のようになる. + +\subsection{縦組用字形の取得} +縦組時には,「\hbox to \zw{、}」(\texttt{U+3001})から「\ltjjachar"FE11」(\texttt{U+FE11})%" +のように縦組用字形への置き換えに関係する処理は,以下のようになっている. + \begin{itemize} + \item 各縦組用和文フォントは読み込み時に以下の属性が設定される: + \begin{description} + \item[\textit{vert\_activated}] 真となるのは, + 明示的に \texttt{-vert} も \texttt{-vrt2} のいずれも指定されていないちょうどその時. + \item[\textit{auto\_enable\_vrt2}] 真となるのは, + \texttt{vert}, \texttt{vrt2}のいずれについても有効・無効が指定されていないちょうどその時. + \end{description} + \textit{vert\_activated}については\texttt{luatexja.define\_jfont}コールバックで渡される引数 + \texttt{jfont\_info}から取得可能である. + + \item \textit{auto\_enable\_vrt2}が真の場合は,現在のscript tagとlanguage system identifierの値で + \texttt{vrt2}機能が利用可能か調べる.利用可能ならば\texttt{vrt2}を,そうでなければ + \texttt{vert}を有効化する. + \item また,各和文フォント読み込み時には, + 「OpenType機能による置換以前に行う縦組形への置換」を格納したテーブル\textit{vform}も作成する. + \begin{enumerate} + \item \LuaTeX-jaには,「\hbox to \zw{、}」(\texttt{U+3001})→「\ltjjachar"FE11」(\texttt{U+FE11})といった + いくつかの置換がハードコードされている.そのような各置換$i\longmapsto v$に対して, + \begin{quote} + 置換元$i$が(あるscript, languageにおける)\texttt{vert}では置換対象でなく, + かつ置換先$v$がフォント内に存在する文字コードである + \end{quote} + ならば,$i\longmapsto v$を\textit{vform}に登録する. + \item \ref{ssec:tfont}節にある\texttt{jpotf}が指定された場合, + …… + \item もし\texttt{vert}も\texttt{vrt2}も現在のscript, languageでは有効にできない場合, + どこかのscript, languageにおける\texttt{vert}で定義されている + 置換$i\longmapsto v$をすべて\textit{vform}に登録する. + \end{enumerate} + + あとで説明するように,\textit{vform}は\textit{vert\_activated}が真であるような縦組用和文フォントでしか + 利用されない. + + \item 「現在の水平リスト」内の\textbf{JAchar}を(欧文フォントから)和文フォントへ置き換える処理において, + その時点での組方向が縦組であり,かつ処理対象の各ノードの縦組用フォントで + \textit{vert\_activated}が真である場合,\textit{vform}に従いグリフが置き換えられる. + + \Pkg{luaotfload}が行う,OpenType機能に沿ったグリフ置換はこの後の処理となる.G + \end{itemize} + % \newpage @@ -10280,11 +11231,11 @@ TUG 2013, October 2013. Requirements for Japanese Text Layout (W3C Working Group Note), 2011, 2012. \newblock \url{http://www.w3.org/TR/jlreq/}% % \\日本語訳の書籍版:W3C日本語組版タスクフォース(編),『W3C技術ノート 日本語組版処理の要件』,東京電機大学出版局,2012. -\bibitem{min10} 乙部厳己.min10フォントについて.\\\null\hfill +\bibitem{min10} 乙部厳己.「min10フォントについて」\\\null\hfill \url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf} -\bibitem{x4051} 日本工業規格(Japanese Industrial Standard). JIS~X~4051, -日本語文書の組版方法(Formatting rules for Japanese documents), 1993, 1995, 2004. -\bibitem{ptexdoc} 濱野尚人,田村明史,倉沢良一.\TeX の出版への応用—縦組み機能の組み込み—. +\bibitem{x4051} 日本工業規格(Japanese Industrial Standard). 「JIS~X~4051, +日本語文書の組版方法(Formatting rules for Japanese documents)」, 1993, 1995, 2004. +\bibitem{ptexdoc} 濱野尚人,田村明史,倉沢良一.「\TeX の出版への応用—縦組み機能の組み込み—」. \\\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. @@ -10293,6 +11244,8 @@ ISO 32000-1:2008, \textit{Document management -- Portable document format -- Par 1.7}, 2008. \newblock \\\null\hfill \url{http://www.iso.org/iso/iso\_catalogue/catalogue_tc/catalogue\_detail.htm?csnumber=51502} +\bibitem{tc18ltja} 北川弘典.「\LuaTeX-jaの近況」,\TeX Conf~2018.\\ + \url{https://osdn.net/projects/luatex-ja/wiki/Documentation/attach/tc18ltja.pdf} \end{thebibliography} \end{document}