--- /dev/null
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+ kanjiskip = { 0.1, 0.04, 0.05 },
+ xkanjiskip = { 0.31, 0.045, 0.057 },
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ },
+ [1] = {
+ chars = { 'あ' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = { [3] = { 1.41, 0, 0} },
+ kern = { [8] = -1.41 , [2] = 2.0, [99] = 1.21 }
+ },
+ [11] = {
+ chars = { 'い' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = { [3] = { 1.41, 0, 0} },
+ kern = { [2] = 2.0, }
+ },
+ [21] = {
+ chars = { 'う' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = { [3] = { 1.41, 0, 0}, [99] ={ 1.73, 0, 0} },
+ kern = { [8] = -1.41 , [2] = 2.0, }
+ },
+ [31] = {
+ chars = { 'え' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = { [3] = { 1.41, 0, 0} },
+ kern = { [2] = 2.0, [99] = 1.73}
+ },
+ [41] = {
+ chars = { 'お' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ kern = { [8] = -1.41 , [2] = 2.0}
+ },
+ [51] = {
+ chars = { 'か' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ kern = { [199] = 0.85 },
+ },
+
+ [2] = {
+ chars = { 'ア' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0
+ },
+ [3] = {
+ chars = { 'ウ' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0
+ },
+ [99] = {
+ chars = { 'jcharbdd' },
+ glue = { [11] = { 1.41, 0, 0} },
+ kern = { [21] = 2.0, }
+ },
+ [199] = {
+ chars = { 'boxbdd' },
+ glue = { [51] = { 1.03, 0, 0} , [1] = { 0.94, 0.23, 0.45 }},
+ },
+ [8] = {
+ chars = { 'lineend' },
+ }
+}
%<*en>
\documentclass[a4paper,titlepage]{article}
-\usepackage[margin=20mm]{geometry}
+\usepackage[margin=20mm,footskip=5mm]{geometry}
%</en>
%<*ja>
\documentclass[a4paper,titlepage]{bxjsarticle}
-\setpagelayout*{margin=20mm}
+\setpagelayout*{margin=20mm,footskip=5mm}
\def\headfont{\normalfont\bfseries}
% \def\headfont{\sffamily\gtfamily} is needed in ordinal documents
+% This document cannot typeset in ltjsclasses (conflict with showexpl?)
%</ja>
-\usepackage{amsmath,amssymb,xcolor,pict2e}
+\usepackage{amsmath,amssymb,xcolor,pict2e,multienum,amsthm,float}
\usepackage{booktabs,listings,lltjlisting,showexpl,multicol}
\usepackage{luatexja-otf}
-\usepackage[unicode=true]{hyperref}
+\usepackage[unicode=false]{hyperref}
\usepackage[all]{xy}
\SelectTips{cm}{}
\DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
\DeclareRobustCommand\LuaTeX{Lua\TeX}
+\DeclareRobustCommand\pdfTeX{pdf\TeX}
\DeclareRobustCommand\pTeX{p\kern-.05em\TeX}
\DeclareRobustCommand\upTeX{p\kern-.05em\TeX}
\DeclareRobustCommand\pLaTeX{p\kern-.05em\LaTeX}
\DeclareRobustCommand\pLaTeXe{p\kern-.05em\LaTeXe}
\DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\kern-.125em\pTeX}
+\theoremstyle{definition}
+\newtheorem{defn}{Definition}
+
+\newenvironment{cslist}{%
+ \leftskip2em\parindent=0pt\def\makelabel##1{{\tt\char92##1}}
+ \def\{{\char`\{}\def\}{\char`\}}
+ \let\origitem=\item
+ \def\item[##1]{\par\smallskip\par\hskip-\leftskip\makelabel{##1}\par}
+}{}
\makeatletter
\long\def\@makecaption#1#2{%
}
\parskip=\smallskipamount
+\protected\def\Param#1{\textsf{#1}} % parameter name
+\protected\def\Pkg#1{\underline{\smash{\texttt{#1}}}} % packages/classes
+
\begin{document}
\catcode`\<=13
\def<#1>{{\normalfont\rm\itshape$\langle$#1$\rangle$}}
%</ja>
\subsection{Backgrounds}
+%<*en>
Traditionally, ASCII \pTeX, an extension of \TeX, and its derivatives
are used to typeset Japanese documents in \TeX. \pTeX\ is an engine
extension of \TeX: so it can produce high-quality Japanese documents
\LuaTeX. So there is no need to modify sources of engines to
support Japanese typesetting: to do this, we only have to write Lua
scripts for appropriate callbacks.
-
+%</en>
+%<*ja>
+従来,「\TeX を用いて日本語組版を行う」といったとき,エンジンとしては
+ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX
+のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に
+も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に
+もなってしまった:\pTeX という(組版的に)満足なものがあったため,海外で
+行われている数々の\TeX の拡張──例えば\eTeX や\pdfTeX ──や,TrueType,
+OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること
+を怠ってしまったのだ.
+
+ここ数年,若干状況は改善されてきた.現在手に入る大半の\pTeX バイナリでは
+外部UTF-8入力が利用可能となり,さらにUnicode化を推進し,\pTeX の内部処理
+までUnicode化した\upTeX も開発されている.また,\pTeX に\eTeX 拡張をマー
+ジした\epTeX も登場し,\TeX\ Live\ 2011では\pLaTeX が\epTeX の上で動作す
+るようになった.だが,\pdfTeX 拡張(pdf直接出力やmicro-typesetting)を
+\pTeX に対応させようという動きはなく,海外とのgapは未だにあるのが現状であ
+る.
+
+しかし,\LuaTeX の登場で,状況は大きく変わることになった.Luaコードで
+`callback'を書くことにより,\LuaTeX の内部処理に割り込みをかけることが可
+能となった.これは,エンジン拡張という真似をしなくても,Luaコードとそれに
+関する\TeX マクロを書けば,エンジン拡張とほぼ同程度のことができるようになっ
+たということを意味する.\LuaTeX-jaは,このアプローチによってLuaコード・
+\TeX マクロによって日本語組版を\LuaTeX の上で実現させようという目的で開発
+が始まったパッケージである.
+%</ja>
\subsection{Major Changes from \pTeX}
+%<*en>
The \LuaTeX-ja package is under much influence of \pTeX\ engine. The initial
target of development was to implement features of \pTeX. However,
\emph{\LuaTeX-ja is not a just porting of \pTeX; unnatural
specifications/behaviors of \pTeX\ were not adopted}.
+%</en>
+
+%<*ja>
+\LuaTeX-jaは,\pTeX に多大な影響を受けている.初期の開発目標は,\pTeX の機
+能をLuaコードにより実装することであった.しかし,開発が進むにつれ,\pTeX
+の完全な移植は不可能であり,また\pTeX における実装がいささか不可解になっ
+ているような状況も発見された.そのため,\textbf{\LuaTeX-ja は,もはや
+\pTeX の完全な移植は目標とはしない.\pTeX における不自然な仕様・挙動があ
+れば,そこは積極的に改める.}
+%</ja>
The followings are major changes from \pTeX:
\begin{itemize}
\end{itemize}
We say `alphabetic fonts' for fonts used in \textbf{ALchar}, and `Japanese fonts' for fonts used in \textbf{JAchar}.
-\item A word in a sans-serif font (like \textsf{prebreakpenalty})
- represents an internal parameter for Japanese typesetting, and it
+\item A word in a sans-serif font (like \Param{prebreakpenalty})
+ means an internal parameter for Japanese typesetting, and it
is used as a key in \verb+\ltjsetparameter+ command.
+\item A word in typewriter font with underline (like \Pkg{fontspec})
+ means a package of a class of \LaTeX.
\item The word `primitive' is used not only for primitives in \LuaTeX,
but also for control sequences that defined in the core module of
\LuaTeX-ja.
This project is hosted by SourceForge.JP.
\paragraph{Members}\
-% \begin{multicols}{2}
-% \begin{itemize}
-% \item Hironori KITAGAWA
-% \item Kazuki MAEDA
-% \item Takayuki YATO
-% \item Yusuke KUROKI
-% \item Noriyuki ABE
-% \item Munehiro YAMAMOTO
-% \item Tomoaki HONDA
-% \par\
-% \end{itemize}
-% \end{multicols}
+%<*en>
+\begin{multienumerate}
+\def\labelenumi{$\bullet$}
+\mitemxxx{Hironori KITAGAWA}{Kazuki MAEDA}{Takayuki YATO}
+\mitemxxx{Yusuke KUROKI}{Noriyuki ABE}{Munehiro YAMAMOTO}
+\mitemx{Tomoaki HONDA}
+\end{multienumerate}
+%</en>
+%<*ja>
+\begin{multienumerate}
+\def\labelenumi{$\bullet$}
+\mitemxxx{Hironori KITAGAWA}{Kazuki MAEDA}{Takayuki YATO}
+\mitemxxx{Yusuke KUROKI}{Noriyuki ABE}{Munehiro YAMAMOTO}
+\mitemx{Tomoaki HONDA}
+\end{multienumerate}
+%</ja>
+
% \paragraph{Acknowledgments} -- 挿入するならここ
\item May be conflict with other packages.
For example, the default setting of \textbf{JAchar} in the present
- version does not coexist with \texttt{unicode-math}
+ version does not coexist with the \Pkg{unicode-math}
package. Putting the following line in preamble makes that
mathematical symbols will be typeset correctly, but several
Japanese characters will be treated as an \textbf{ALchar} as
fonts, namely scaled by 0.962216.
\end{itemize}
\item The amount of glue that are inserted between a \textbf{JAchar} and
- an \textbf{ALchar} (the parameter \textsf{xkanjiskip}) is set to
+ an \textbf{ALchar} (the parameter \Param{xkanjiskip}) is set to
\[
(0.25\cdot 13.5\,\textrm{Q})^{+1\,\text{pt}}_{-1\,\text{pt}}
= {27\over 32}\,\mathrm{mm}^{+1\,\text{pt}}_{-1\,\text{pt}}.
However, above settings are not sufficient for Japanese-based
documents. To typeset Japanese-based documents, You are better to use
class files other than {\tt article.cls}, {\tt book.cls}, and so on. At
-the present, we have the counterparts of \texttt{jclasses} (standard
-classes in \pLaTeX) and \texttt{jsclasses} (classes by Haruhiko
-Okumura), namely, \texttt{ltjclasses} and \texttt{ltjsclasses}.
+the present, we have the counterparts of \Pkg{jclasses} (standard
+classes in \pLaTeX) and \Pkg jsclasses (classes by Haruhiko
+Okumura), namely, \Pkg{ltjclasses} and \Pkg{ltjsclasses}.
\paragraph{{\tt\char92 CID, {\tt\char92 UTF}} and macros in OTF package}
-Under \pTeX, \texttt{OTF} package (developed by Shuzaburo Saito) is
+Under \pTeX, \Pkg{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 \texttt{OTF} package.
+supports some of functions in \Pkg{otf} package.
\begin{LTXexample}
森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。
%lltjlisting.sty要修正?:↑「森」の直後で改行.
-\subsection{Changing Fonts}
+\subsection{Changing Fonts}\label{ssub-chgfnt}
\paragraph{Remark: Japanese Characters in Math Mode}
Since \pTeX\ supports Japanese characters in math mode, there are
sources like the following:
\verb+\fontshape+ and \verb+\selectfont+ can be used to change
attributes of Japanese fonts.
\begin{center}
-\begin{tabular}{ccccc}
+\begin{tabular}{cccccc}
\toprule
-&\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}\\\midrule
+&\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}&\textbf{selection}\\\midrule
alphabetic fonts
-&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+\\
+&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+
+&\verb+\useroman+\\
Japanese fonts
-&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+\\
-both&---&--&\verb+\fontseries+&\verb+\fontshape+\\
-auto select&\verb+\fontencoding+&\verb+\fontfamily+&---&---\\
+&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+
+&\verb+\usekanji+\\
+both&---&--&\verb+\fontseries+&\verb+\fontshape+&---\\
+auto select&\verb+\fontencoding+&\verb+\fontfamily+&---&---&\verb+\usefont+\\
\bottomrule
\end{tabular}
\end{center}
-\item For defining a Japanese font family, use \verb+\DeclareKanjiFamily+
- instead of \verb+\DeclareFontFamily+.
+
+%<*ja>
+ここで,\verb+\fontencoding{<encoding>}+は,引数により和文側か欧文側かの
+ どちらかが切り替わる.例えば,次の入力で最初の\verb+\fontencoding+
+ の呼び出しは和文フォントのエンコーディングを\texttt{JT3}に変更し,
+ 2回目の呼びだしでは欧文フォント側を\texttt{T1}へと変更する.
+\begin{verbatim}
+\fontencoding{JY3}\fontencoding{T1}
+\end{verbatim}
+\verb+\fontfamily+も引数により和文側,欧文側,\textbf{あるいは両方}のフォ
+ ントファミリが切り替わる.
+詳細はSubsection~\ref{ssub-nfsspat}を参照すること.
+%</ja>
+
+\item For defining a Japanese font family, use
+ \verb+\DeclareKanjiFamily+ instead of
+ \verb+\DeclareFontFamily+. However, in the present implementation,
+ using \verb+\DeclareFontFamily+ doesn't cause any problem.
\end{itemize}
\paragraph{fontspec}
-To coexist with the \texttt{fontspec} package, it is needed to load
-\texttt{luatexja-fontspec} package in the preamble. This additional
-package automatically loads \texttt{luatexja} and \texttt{fontspec}
+To coexist with the \Pkg{fontspec} package, it is needed to load
+\Pkg{luatexja-fontspec} package in the preamble. This additional
+package automatically loads \Pkg{luatexja} and \Pkg{fontspec}
package, if needed.
-In \texttt{luatexja-fontspec} package, the following 7~commands are defined as
-counterparts of original commands in \texttt{fontspec}:
+In \Pkg{luatexja-fontspec} package, the following 7~commands are defined as
+counterparts of original commands in the \Pkg{fontspec} package:
\begin{center}
\begin{tabular}{ccccc}
\toprule
\begin{verbatim}
\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, +8}}
\end{verbatim}
-
-
+The argument to {\sf jacharrange} parameter is a list of integer. Negative interger $-n$ in the list means that `the character range~$n$ is ...'.
\paragraph{Default Setting}
Lua\TeX-ja predefines eight character ranges for convinience. They are
\end{multicols}
\item[Range~3${}^{\text{J}}$] Punctuations and Miscellaneous symbols. The block list is
indicated in Table~\ref{table-rng3}.
-\begin{table}[p]
+\begin{table}[!tb]
\caption{Unicode blocks in predefined character range~3.}\label{table-rng3}
\catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"2000--"206F&General Punctuation\\
+\begin{center}\small
+\begin{tabular}{llll}
+"2000--"206F&General Punctuation&
"2070--"209F&Superscripts and Subscripts\\
-"20A0--"20CF&Currency Symbols\\
-"20D0--"20FF&Combining Diacritical Marks for Symbols\\
-"2100--"214F&Letterlike Symbols\\
+"20A0--"20CF&Currency Symbols&
+"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\
+"2100--"214F&Letterlike Symbols&
"2150--"218F&Number Forms\\
-"2190--"21FF&Arrows\\
+"2190--"21FF&Arrows&
"2200--"22FF&Mathematical Operators\\
-"2300--"23FF&Miscellaneous Technical\\
+"2300--"23FF&Miscellaneous Technical&
"2400--"243F&Control Pictures\\
-"2500--"257F&Box Drawing\\
+"2500--"257F&Box Drawing&
"2580--"259F&Block Elements\\
-"25A0--"25FF&Geometric Shapes\\
+"25A0--"25FF&Geometric Shapes&
"2600--"26FF&Miscellaneous Symbols\\
-"2700--"27BF&Dingbats\\
+"2700--"27BF&Dingbats&
"2900--"297F&Supplemental Arrows-B\\
-"2980--"29FF&Miscellaneous Mathematical Symbols-B\\
+"2980--"29FF&Misc.\ Mathematical Symbols-B&
"2B00--"2BFF&Miscellaneous Symbols and Arrows\\
-"E000--"F8FF&Private Use Area\\
+"E000--"F8FF&Private Use Area&
\end{tabular}
\end{center}
\end{table}
\end{lstlisting}
\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
\item[Range~6${}^{\text{J}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
-\begin{table}[p]
+\begin{table}[!tb]
\caption{Unicode blocks in predefined character range~6.}\label{table-rng6}
\catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"2460--"24FF&Enclosed Alphanumerics\\
+\begin{center}\small
+\begin{tabular}{llll}
+"2460--"24FF&Enclosed Alphanumerics&
"2E80--"2EFF&CJK Radicals Supplement\\
-"3000--"303F&CJK Symbols and Punctuation\\
+"3000--"303F&CJK Symbols and Punctuation&
"3040--"309F&Hiragana\\
-"30A0--"30FF&Katakana\\
+"30A0--"30FF&Katakana&
"3190--"319F&Kanbun\\
-"31F0--"31FF&Katakana Phonetic Extensions\\
+"31F0--"31FF&Katakana Phonetic Extensions&
"3200--"32FF&Enclosed CJK Letters and Months\\
-"3300--"33FF&CJK Compatibility\\
+"3300--"33FF&CJK Compatibility&
"3400--"4DBF&CJK Unified Ideographs Extension A\\
-"4E00--"9FFF&CJK Unified Ideographs\\
+"4E00--"9FFF&CJK Unified Ideographs&
"F900--"FAFF&CJK Compatibility Ideographs\\
-"FE10--"FE1F&Vertical Forms\\
+"FE10--"FE1F&Vertical Forms&
"FE30--"FE4F&CJK Compatibility Forms\\
-"FE50--"FE6F&Small Form Variants\\
+"FE50--"FE6F&Small Form Variants&
"{20}000--"{2F}FFF&(Supplementary Ideographic Plane)
\end{tabular}
\end{center}
\end{table}
\item[Range~7${}^{\text{J}}$] Characters used in CJK languages, but not included in Adobe-Japan1-6.
The block list is indicated in Table~\ref{table-rng7}.
-\begin{table}[p]
+\begin{table}[!tb]
\caption{Unicode blocks in predefined character range~7.}\label{table-rng7}
\catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"1100--"11FF&Hangul Jamo\\
+\begin{center}\small
+\begin{tabular}{llll}
+"1100--"11FF&Hangul Jamo&
"2F00--"2FDF&Kangxi Radicals\\
-"2FF0--"2FFF&Ideographic Description Characters\\
+"2FF0--"2FFF&Ideographic Description Characters&
"3100--"312F&Bopomofo\\
-"3130--"318F&Hangul Compatibility Jamo\\
+"3130--"318F&Hangul Compatibility Jamo&
"31A0--"31BF&Bopomofo Extended\\
-"31C0--"31EF&CJK Strokes\\
+"31C0--"31EF&CJK Strokes&
"A000--"A48F&Yi Syllables\\
-"A490--"A4CF&Yi Radicals\\
+"A490--"A4CF&Yi Radicals&
"A830--"A83F&Common Indic Number Forms\\
-"AC00--"D7AF&Hangul Syllables\\
+"AC00--"D7AF&Hangul Syllables&
"D7B0--"D7FF&Hangul Jamo Extended-B
\end{tabular}
\end{center}
\end{description}
-\subsection{\textsf{kanjiskip} and \textsf{xkanjiskip}}\label{subs-kskip}
+\subsection{\Param{kanjiskip} and \Param{xkanjiskip}}\label{subs-kskip}
\textbf{JAglue} is divided into the following three categories:
\begin{itemize}
\item Glues/kerns specified in JFM. If \verb+\inhibitglue+ is issued
\item The default glue which inserted between two \textbf{JAchar}s ({\sf
kanjiskip}).
\item The default glue which inserted between a \textbf{JAchar} and an
- \textbf{ALchar} (\textsf{xkanjiskip}).
+ \textbf{ALchar} (\Param{xkanjiskip}).
\end{itemize}
-The value (a skip) of \textsf{kanjiskip} or \textsf{xkanjiskip} can be
+The value (a skip) of \Param{kanjiskip} or \Param{xkanjiskip} can be
changed as the following.
\begin{lstlisting}
\ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt},
It may occur that JFM contains the data of `ideal width of {\sf
-kanjiskip}' and/or `ideal width of \textsf{xkanjiskip}'.
-To use these data from JFM, set the value of \textsf{kanjiskip} or
-\textsf{xkanjiskip} to \verb+\maxdimen+.
+kanjiskip}' and/or `ideal width of \Param{xkanjiskip}'.
+To use these data from JFM, set the value of \Param{kanjiskip} or
+\Param{xkanjiskip} to \verb+\maxdimen+.
-\subsection{Insertion Setting of \textsf{xkanjiskip}}
-It is not desirable that \textsf{xkanjiskip} is inserted between every
+\subsection{Insertion Setting of \Param{xkanjiskip}}
+It is not desirable that \Param{xkanjiskip} is inserted between every
boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example,
-\textsf{xkanjiskip} should not be inserted after opening parenthesis
+\Param{xkanjiskip} should not be inserted after opening parenthesis
(\textit{e.g.}, compare `(あ' and `(\hskip\ltjgetparameter{xkanjiskip}あ').
-\LuaTeX-ja can control whether \textsf{xkanjiskip} can be inserted
-before/after a character, by changing \textsf{jaxspmode} for \textbf{JAchar}s and
-\textsf{alxspmode} parameters \textbf{ALchar}s respectively.
+\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.
\begin{LTXexample}
\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}}
pあq い!う
\end{LTXexample}
The second argument {\tt preonly} means `the insertion of
-\textsf{xkanjiskip} is allowed before this character, but not after'.
+\Param{xkanjiskip} is allowed before this character, but not after'.
the other possible values are {\tt postonly}, {\tt allow} and {\tt
inhibit}. For the compatibility with \pTeX, natural numbers between
0~and~3 are also allowed as the second argument\footnote{But we don't
recommend this: since numbers 1~and~2 have opposite meanings in
-\textsf{jaxspmode} and \textsf{alxspmode}.}.
+\Param{jaxspmode} and \Param{alxspmode}.}.
-If you want to enable/disable all insertions of \textsf{kanjiskip} and
-\textsf{xkanjiskip}, set \textsf{autospacing} and \textsf{autoxspacing}
+If you want to enable/disable all insertions of \Param{kanjiskip} and
+\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing}
parameters to {\tt false}, respectively.
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 (\textsf{yalbaselineshift}
-parameter) and that of Japanese fonts (\textsf{yjabaselineshift}
+of the baseline of alphabetic fonts (\Param{yalbaselineshift}
+parameter) and that of Japanese fonts (\Param{yjabaselineshift}
parameter).
\begin{LTXexample}
To load a font as a Japanese font, you must use the
\verb+\jfont+ primitive instead of~\verb+\font+, while
\verb+\jfont+ admits the same syntax used in~\verb+\font+.
-\LuaTeX-ja automatically loads \texttt{luaotfload} package,
+\LuaTeX-ja automatically loads \Pkg{luaotfload} package,
so TrueType/OpenType fonts with features can be used for Japanese fonts:
\begin{LTXexample}
\jfont\tradgt={file:ipaexg.ttf:script=latn;%
\begin{description}
\item[\tt jfm-ujis.lua] A standard JFM in Lua\TeX-ja. This JFM is
based on \verb+upnmlminr-h.tfm+, a metric for UTF/OTF package that
- is used in \upTeX. When you use \texttt{luatexja-otf.sty}, please use this JFM.
+ is used in \upTeX. When you use the \Pkg{luatexja-otf} package, please use this JFM.
\item[\tt jfm-jis.lua] A counterpart for \verb+jis.tfm+, `JIS font
metric' which is widely used in \pTeX. A major difference of
\texttt{jfm-ujis.lua} and this \texttt{jfm-jis.lua} is that
\item[\tt jfm-min.lua] A counterpart for \verb+min10.tfm+, which is one
of the default Japanese font metric shipped with \pTeX. There
are notable difference between this JFM and other 2~JFMs, as
- showed below:
-
-何かいい例.単純に「min10にはバグあり」ではなく,プロポーショナルな側面も見せたいよね
-(乙部さんのmin10.pdfの例を使う?)
+ shown in Table~\ref{tab-difjfm}.
\end{description}
-\item[jfmvar=<string>] ...
+\item[jfmvar=<string>] Sometimes there is a need that
\end{list}
+\begin{table}[t]
+\caption{Differences between JFMs shipped with \LuaTeX-ja}
+\label{tab-difjfm}
+\begin{center}
+\def\r#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 14.43324pt \g
+\setbox0=\vtop{\hsize=7\zw\noindent ◆◆◆◆◆◆◆
+ある日モモちゃんがお使いで迷子になって泣きました.}\copy0
+\vrule height 0pt depth \dp0}}
+\def\s#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 14.43324pt \g
+\setbox0=\vtop{\hsize=7\zw\noindent ちょっと!何}\copy0}}
+\def\t#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 19.24432pt \g
+\setbox0=\hbox{漢}%
+\vrule width 0.4pt height\ht0 depth\dp0\kern-.2pt\copy0
+\kern-\wd0\vrule width\wd0height .2pt depth .2pt
+\kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+\kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+\kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}}
+\begin{tabular}{rccc}
+\toprule
+&\tt jfm-ujis.lua&\tt jfm-jis.lua&\tt jfm-min.lua\\
+\midrule
+Example~1&\r{ujis}&\r{jis}&\r{min}\\
+Example~2&\s{ujis}&\s{jis}&\s{min}\\
+Bounding Box&\t{ujis}&\t{jis}&\t{min}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\end{table}
\paragraph{Note: kern feature}\label{para-kern}
Some fonts have information for inter-glyph spacing. However, this
\item[kanjiskip=\{<natural>, <stretch>, <shrink>\}] (optional)
-This field specifies the `ideal' amount of \textsf{kanjiskip}. As noted
+This field specifies the `ideal' amount of \Param{kanjiskip}. As noted
in Subsection~\ref{subs-kskip}, if the parameter
- \textsf{kanjiskip} is \verb+\maxdimen+, the value specified
+ \Param{kanjiskip} is \verb+\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 <stretch> and <shrink>
fields are in design-size unit too.
\item[xkanjiskip=\{<natural>, <stretch>, <shrink>\}] (optional)
-Like the \texttt{kanjiskip} field, this field specifies the `ideal'
- amount of \textsf{xkanjiskip}.
+Like the \Param{kanjiskip} field, this field specifies the `ideal'
+ amount of \Param{xkanjiskip}.
\end{list}
than 0 (hence, the character class~0 contains most of
\textbf{JAchar}s). In the list, a character can be
specified by its code number, or by the character itself
- (as a string of length~1).
-
-In addition to those `real' characters, the following `imaginary
- characters' can be specified in the list:
+ (as a string of length~1). Moreover, there are `imaginary
+ characters' which specified in the list. We will describe these later.
\item[width=<length>, height=<length>, depth=<length>, italic=<length>]\ (required)
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'.
-\begin{figure}[tb]
+\begin{figure}[!tb]
\begin{minipage}{0.4\textwidth}%
\begin{center}\unitlength=10pt\small
\begin{picture}(15,12)(-1,-4)
\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>\}, ...\}}]
\end{list}
+%<*en>
+\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
+\item['lineend'] An ending of a line.
+\item['diffmet'] Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
+\item['boxbdd'] The beginning/ending of a horizontal box, and the beginging of a noindented paragraph.
+\item['parbdd'] The beginning of an (indented) paragraph.
+\item['jcharbdd'] A boundary between \textbf{JAchar} and anything else
+ (such as \textbf{ALchar}, kern, glue, ...).
+\item[$-1$] The left/right boundary of an inline math formula.
+\end{list}
+%</en>
+
+%<*ja>
+上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も
+指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字
+クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か
+い組版調整ができるようになっている.以下のその一覧を述べる:
+\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
+\item['lineend'] 行の終端を表す.
+\item['diffmet']
+
+\item['boxbdd'] hboxの先頭と末尾,及びインデントされていない
+ (\verb+\noindent+で開始された)段落の先頭を表す.
+\item['parbdd'] 通常の(\verb+\noindent+で開始されていない)段落の先頭.
+\item['jcharbdd'] 和文文字と「その他のもの」(欧文文字,glue,kern等)との境界.
+\item[$-1$] 行中数式と地の文との境界.
+\end{list}
+
+\paragraph{\pTeX 用和文フォントメトリックの移植}
+以下に,\pTeX 用和文フォントメトリックを\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{verbatim}
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{}
+\end{verbatim}
+\end{itemize}
+\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする
+ (JFM中に単に書かなければよい).
+\item \texttt{'boxbdd'}については,それのみで一つの文字クラスを形成し,その
+ 文字クラスに関してはglue/kernの設定はしない.
+
+これは,\pTeX では,
+ hboxの先頭・末尾とインデントされていない(\verb+\noindent+で開始さ
+ れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである.
+\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である.
+
+ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので,
+ 段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに
+ は,段落の最初に手動で\verb+\inhibitglue+を追加するか,あるいは
+ \verb+\everypar+のhackを行い,それを自動化させるしかなかった.
+
+一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ
+うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに
+\texttt{'parbdd'}を入れれば全角下がりとなる.
+
+\begin{LTXexample}
+\jfont\g=psft:Ryumin-Light:jfm=test \g
+\parindent1\zw\noindent{}◆◆◆◆◆
+\par{}「◆◆←二分下がり
+\par{}【◆◆←全角下がり
+\par{}〔◆◆←全角二分下がり
+\end{LTXexample}
+\end{itemize}
+
+%</ja>
+
\subsection{Math Font Family}
\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
\LuaTeX-ja's handling of Japanese fonts in math formulas is similar;
Table~\ref{tab-math} shows counterparts to \TeX's primitives for math
-font families.
+font families. There is no relation between the value of
+\verb+\fam+ and that of \verb+\jfam+; with appropreate settings,
+you can set both \verb+\fam+ and \verb+\jfam+ to~the same value.
-\begin{table}[tb]
-\label{tab-math}
+\begin{table}[!tb]
\caption{Primitives for Japanese math fonts.}
+\label{tab-math}
\begin{center}\def\{{\char`\{}\def\}{\char`\}}
\begin{tabular}{lll}
\toprule
&Japanese fonts&alphabetic fonts\\
\midrule
font family&\verb+\jfam+${}\in [0,256)$&\verb+\fam+\\
-text size&\tt\textsf{jatextfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\textfont+<fam>=<font\_cs>\\
-script size&\tt\textsf{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptfont+<fam>=<font\_cs>\\
-scriptscript size&\tt\textsf{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptscriptfont+<fam>=<font\_cs>\\
+text size&\tt\Param{jatextfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\textfont+<fam>=<font\_cs>\\
+script size&\tt\Param{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptfont+<fam>=<font\_cs>\\
+scriptscript size&\tt\Param{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptscriptfont+<fam>=<font\_cs>\\
\bottomrule
\end{tabular}
\end{center}
\end{table}
+\subsection{Callbacks}
+Like \LuaTeX\ itself, \LuaTeX-ja also has callbacks. These callbacks can
+be accessed via \verb+luatexbase.add_to_callback+ function and so on, as other callbacks
+\begin{list}{}%
+{\def\makelabel#1{\bfseries#1}}
+\item[\texttt{luatexja.load\_jfm} callback]
+With this callback you can overwrite JFMs.
+
+\begin{verbatim}
+function (<table> jfm_info, <string> jfm_name)
+ return <table> new_jfm_info
+end
+\end{verbatim}
+
+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.
+
+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}. This callback doesn't
+ replace any code of \LuaTeX-ja.
+
+\item[\texttt{luatexja.define\_font} callback]
+This callback and the next callback form a pair, and you can assign letters which don't have
+ fixed codepoints in Unicode to non-zero character classes.
+This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded.
+\begin{verbatim}
+function (<table> jfont_info, <number> font_number)
+ return <table> new_jfont_info
+end
+\end{verbatim}
+
+You may assume that \verb+jfont_info+ has the following fields:
+\begin{description}
+\item[\tt jfm] The index number of JFM.
+\item[\tt size] Font size in a scaled point (${}=2^{-16}\,\textrm{pt}$).
+\item[\tt var] The value specified in \texttt{jfmvar=...} at a call of \verb+\jfont+.
+\end{description}
+
+The returned table \verb+new_jfont_info+ also should include these three fields.
+The \verb+font_number+ is a font number.
+
+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.
+
+
+\item[\texttt{luatexja.find\_char\_class} callback]
+This callback is called just when \LuaTeX-ja inready to determine which
+ character class a character \verb+chr_code+ belongs.
+A function used in this callback should be in the following form:
+\begin{lstlisting}[numbers=left]
+function (<number> char_class, <table> jfont_info, <number> chr_code)
+ if char_class~=0 then return char_class
+ else
+ ....
+ return (<number> new_char_class or 0)
+ end
+end
+\end{lstlisting}
+
+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.
+
+This callback doesn't replace any code of \LuaTeX-ja.
+
+
+
+\end{list}
+
\section{Parameters}
12~(other), while the space has 10~(space).
\subsection{List of Parameters}
-In the following list of parameters, [\verb+\cs+] indicates the counterpart in \pTeX, and each symbol has the following meaning:
+The following is the list of parameters which can be specificated by the
+\verb+\ltjsetparameter+ command. [\verb+\cs+] indicates the counterpart
+in \pTeX, and symbols beside each parameter has the following meaning:
\begin{itemize}
\item No mark: values at the end of the paragraph or the hbox are
adopted in the whole paragraph/hbox.
\end{itemize}
\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
-\item[\textsf{jcharwidowpenalty}\,=<penalty>] [\verb+\jcharwidowpenalty+]
+\item[\Param{jcharwidowpenalty}\,=<penalty>] [\verb+\jcharwidowpenalty+]
Penalty value for supressing orphans. This penalty is inserted just
after the last \textbf{JAchar} which is not regarded as a
(Japanese) punctuation mark.
-\item[\textsf{kcatcode}\,=\{<chr\_code>,<natural number>\}]\
+\item[\Param{kcatcode}\,=\{<chr\_code>,<natural number>\}]\
An additional attributes having each character whose character code is <chr\_code>.
At the present version, the lowermost bit of <natural number> indicates
whether the character is considered as a punctuation mark
- (see the description of \textsf{jcharwidowpenalty} above).
+ (see the description of \Param{jcharwidowpenalty} above).
+
+
+\item[\Param{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]\
+%<*ja>
+文字コード<chr\_code>の\textbf{JAchar}が行頭にくることを抑止するために,
+ この文字の前に挿入/追加されるペナルティの量を指定する.
+例えば閉じ括弧「〗」は絶対に行頭にきてはならないので,標準で読み込まれる
+ \texttt{luatexja-kinsoku.tex}において
+\begin{verbatim}
+\ltjsetparameter{prebreakpenalty={`〙,10000}}
+\end{verbatim}
+と,最大値の10000が指定されている.他にも,小書きのカナなど,絶対禁止とい
+ うわけではないができれば行頭にはきて欲しくない場合に,0と
+ 10000の間の値を指定するのも有用であろう.
+\begin{verbatim}
+\ltjsetparameter{prebreakpenalty={`ゕ,150}}
+\end{verbatim}
+%</ja>
+
+\item[\Param{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\postbreakpenalty+]
+%<*ja>
+文字コード<chr\_code>の\textbf{JAchar}が行末にくることを抑止するために,
+ この文字の後に挿入/追加されるペナルティの量を指定する.
+
+\pTeX では,\verb+\prebreakpenalty+, \verb+\postbreakpenalty+において,
+\begin{itemize}
+\item 一つの文字に対して,pre, postどちらか一つしか指定することができなかっ
+ た(後から指定した方で上書きされる).
+\item pre, post合わせて256文字分の情報を格納することしかできなかった.
+\end{itemize}
+という制限があったが,\LuaTeX-ja ではこれらの制限は解消されている.
+%</ja>
-\item[\textsf{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]
-\item[\textsf{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\postbreakpenalty+]
-\item[\textsf{jatextfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\textfont+ in \TeX]
-\item[\textsf{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptfont+ in \TeX]
-\item[\textsf{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptscriptfont+ in \TeX]
-\item[\textsf{yjabaselineshift}\,=<dimen>$^\ast$]\
-\item[\textsf{yalbaselineshift}\,=<dimen>$^\ast$] [\verb+\ybaselineshift+]
+\item[\Param{jatextfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\textfont+ in \TeX]
+\item[\Param{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptfont+ in \TeX]
+\item[\Param{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptscriptfont+ in \TeX]
+\item[\Param{yjabaselineshift}\,=<dimen>$^\ast$]\
+\item[\Param{yalbaselineshift}\,=<dimen>$^\ast$] [\verb+\ybaselineshift+]
-\item[\textsf{jaxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\inhibitxspcode+]
+\item[\Param{jaxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\inhibitxspcode+]
-Setting whether inserting \textsf{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
+Setting whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
The followings are allowed for <mode>:
\begin{description}
-\item[0, \texttt{inhibit}] Insertion of \textsf{xkanjiskip} is inhibited before the charater, nor after the charater.
-\item[2, \texttt{preonly}] Insertion of \textsf{xkanjiskip} is allowed before the charater, but not after.
-\item[1, \texttt{postonly}] Insertion of \textsf{xkanjiskip} is allowed after the charater, but not before.
-\item[3, \texttt{allow}] Insertion of \textsf{xkanjiskip} is allowed before the charater and after the charater.
+\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the charater, nor after the charater.
+\item[2, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the charater, but not after.
+\item[1, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the charater, but not before.
+\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the charater and after the charater.
This is the default value.
\end{description}
-\item[\textsf{alxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\xspcode+]
+\item[\Param{alxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\xspcode+]
-Setting whether inserting \textsf{xkanjiskip} is allowed before/after a \textbf{ALchar} whose character code is <chr\_code>.
+Setting whether inserting \Param{xkanjiskip} is allowed before/after a
+ \textbf{ALchar} whose character code is <chr\_code>.
The followings are allowed for <mode>:
\begin{description}
-\item[0, \texttt{inhibit}] Insertion of \textsf{xkanjiskip} is inhibited before the charater, nor after the charater.
-\item[1, \texttt{preonly}] Insertion of \textsf{xkanjiskip} is allowed before the charater, but not after.
-\item[2, \texttt{postonly}] Insertion of \textsf{xkanjiskip} is allowed after the charater, but not before.
-\item[3, \texttt{allow}] Insertion of \textsf{xkanjiskip} is allowed before the charater and after the charater.
+\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited
+ before the charater, nor after the charater.
+\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed
+ before the charater, but not after.
+\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed
+ after the charater, but not before.
+\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both
+ before the charater and after the charater.
This is the default value.
\end{description}
-Note that parameters \textsf{jaxspmode} and \textsf{alxspmode} use a common table.
+Note that parameters \Param{jaxspmode} and \Param{alxspmode} use a common table.
-\item[\textsf{autospacing}\,=<bool>$^\ast$] [\verb+\autospacing+]
-\item[\textsf{autoxspacing}\,=<bool>$^\ast$] [\verb+\autoxspacing+]
-\item[\textsf{kanjiskip}\,=<skip>] [\verb+\kanjiskip+]
-\item[\textsf{xkanjiskip}\,=<skip>] [\verb+\xkanjiskip+]
+\item[\Param{autospacing}\,=<bool>$^\ast$] [\verb+\autospacing+]
+\item[\Param{autoxspacing}\,=<bool>$^\ast$] [\verb+\autoxspacing+]
+\item[\Param{kanjiskip}\,=<skip>] [\verb+\kanjiskip+]
+\item[\Param{xkanjiskip}\,=<skip>] [\verb+\xkanjiskip+]
-\item[\textsf{differentjfm}\,=<mode>$^\dagger$]
+\item[\Param{differentjfm}\,=<mode>$^\dagger$]
Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different.
The allowed arguments are the followings:
\item[\texttt{small}]
\end{description}
-\item[\textsf{jacharrange}\,=<ranges>$^\ast$]
-\item[\textsf{kansujichar}\,=\{<digit>, <chr\_code>\}] [\verb+\kansujichar+]
+\item[\Param{jacharrange}\,=<ranges>$^\ast$]
+\item[\Param{kansujichar}\,=\{<digit>, <chr\_code>\}] [\verb+\kansujichar+]
\end{list}
\section{Other Primitives}
-\subsection{Compatibility with \pTeX}
+\subsection{Primitives for Compatibility}
+The following primtives are implemented for compatibility with \pTeX:
\begin{list}{}{\def\makelabel{\ttfamily\char92 }}
\item[kuten]
\item[jis]
\item[ucs]
\item[kansuji]
\end{list}
+\subsection{{\tt\char92 inhibitglue}}
+The primitive \verb+\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 `ウ'.
+
+\begin{LTXexample}
+\jfont\g=psft:Ryumin-Light:jfm=test \g
+あウあ\inhibitglue{}ウ\inhibitglue\par
+あ\par\inhibitglue{}あ
+\par\inhibitglue\hrule{}あoff\inhibitglue ice
+\end{LTXexample}
+
+With the help of this example, we remark the specification of \verb+\inhibitglue+:
+\begin{itemize}
+\item The call of \verb+\inhibitglue+ in the (internal) vertical mode is
+ effective at the beginning of the next paragraph. This is realized
+ by hacking \verb+\everypar+.
+\item The call of \verb+\inhibitglue+ in the (restricted) horizontal
+ mode is only effective on the spot; does not get over boundary of
+ paragraphs. Moreover, \verb+\inhibitglue+ cancels ligatures and
+ kernings, as shown in line~4 of above example.
+\item The call of \verb+\inhibitglue+ in math mode is just ignored.
+\end{itemize}
\section{Control Sequences for \LaTeXe}
-\subsection{Patch for NFSS2}
-As described in Subsection~\ref{ssec-ltx}, \LuaTeX-ja simply adopted \texttt{plfonts.dtx} in \pLaTeXe\ for the Japanese patch for NFSS2.
+\subsection{Patch for NFSS2}\label{ssub-nfsspat}
+As described in Subsection~\ref{ssec-ltx}, \LuaTeX-ja simply adopted
+\texttt{plfonts.dtx} in \pLaTeXe\ for the Japanese patch for NFSS2.
+For an convinience, we will describe
+commands which are not described in Subsection~\ref{ssub-chgfnt}.
+
+\begin{cslist}%
+\item[DeclareYokoKanjiEncoding\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
+In NFSS2 under \LuaTeX-ja, distinction between alphabetic font families
+ and Japanese font families is only made by its
+ encoding. For example, encodings OT1 and T1 are for
+ alphabetic font families, and a Japanese font family cannot
+ have these encodings. This command defines a new encoding
+ scheme for Japanese font family (in horizontal direction).
+
+\item[DeclareKanjiEncodingDefaults\{<text-settings>\}\{<math-settings>\}]
+\item[DeclareKanjiSubstitution\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}]
+\item[DeclareErrorKanjiFont\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}\{<size>\}]
+
+The above 3~commands are just the counterparts for \verb+DeclareFontEncodingDefaults+ and~others.
+
+\item[reDeclareMathAlphabet\{<unified-cmd>\}\{<al-cmd>\}\{<ja-cmd>\}]
+和文・欧文の数式用フォントファミリを一度に変更する命令を作成する.
+具体的には,欧文数式用フォントファミリ変更の命令<al-cmd>と,和文数式用フォ
+ ントファミリ変更の命令<ja-cmd>の2つを同時に行う命令として
+ <unified-cmd>を(再)定義する.実際の使用では<unified-cmd>と
+ <al-cmd>に同じものを指定する,すなわち,<al-cmd>に和文側も変
+ 更させるようにするのが一般的と思われる.
+
+本コマンドの使用については,\pLaTeX 配布中の\texttt{plfonts.dtx}に詳しく
+ 注意点が述べられているので,そちらを参照されたい.
+
+\item[DeclareRelationFont\{<ja-encoding>\}\{<ja-family>\}\{<ja-series>\}\{<ja-shape>\}\\
+ \hfill\{<al-encoding>\}\{<al-family>\}\{<al-series>\}\{<al-shape>\}]
+%<*en>
+This command sets the `accompanied' alphabetic font family (given by the latter 4~arguments)
+with respect to a Japanese font family given by the former 4~arguments.
+%</en>
+%<*ja>
+いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントファミリに対して,
+そのフォントに対応する「従属欧文」フォントファミリを後半の4引数により与える.
+%</ja>
+\item[SetRelationFont]
+This command is almost same as \verb+\DeclareRelationFont+, except that this command does a local
+assignment, where \verb+\DeclareRelationFont+ does a global assignment.
+\item[userelfont]
+Change current alphabetic font encoding/family/\dots\ to the `accompanied' alphabetic
+ font family with respect to current Japanese font family,
+ which was set by
+ \verb+\DeclareRelationFont+ or \verb+SetRelationFont+.
+Like \verb+\fontfamily+, \verb+\selectfont+ is required to take an effect.
+
+\item[adjustbaseline]
+...
+
+\item[fontfamily\{<family>\}]
+{\let\item\origitem
+As in \LaTeXe, this command changes current font family (alphabetic, Japanese,~\emph{or both})
+to <family>. Which family will be changed is determined as follows:
+\begin{itemize}
+\item Let current encoding scheme for Japanese fonts be
+ <ja-enc>. Current Japanese font family will be changed to
+ <family>, if one of the following two conditions is met:
+\begin{itemize}
+\item The family <fam> under the encoding <ja-enc> is already defined by
+ \verb+\DeclareKanijFamily+.
+\item A font definition named \texttt{<enc><ja-enc>.fd} (the filename is
+ all lowercase) exists.
+\end{itemize}
+\item Let current encoding scheme for Japanese fonts be
+ <al-enc>. For alphabetic font family, the criterion as above is used.
+\item There is a case which none of the above applies, that is, the font
+ family named <family> doesn't seem to be defined neither under the
+ encoding <ja-enc>, nor under <al-enc>.
+
+In this case, the default family for font substitution is used for
+ alphabetic and Japanese fonts. Note that current encoding will not
+ be set to <family>, unlike the original inplementation in \LaTeX.
+\end{itemize}
+}
+\end{cslist}
+
+As closing this subsection, we shall introduce an example of
+\verb+SetRelationFont+ and \verb+\userelfont+:
+\begin{LTXexample}
+\gtfamily{}あいうabc
+\SetRelationFont{JY3}{gt}{m}{n}{OT1}{pag}{m}{n}
+\userelfont\selectfont{}あいうabc
+\end{LTXexample}
+
\subsection{Cropmark/`tombow'}
\begin{itemize}
\item Always treated as \textbf{JAchar}s.
\item Processing codes for supporting OpenType features (\textit{e.g.},
- glyph replacement and kerning) by the \texttt{luaotfload} package
+ glyph replacement and kerning) by the \Pkg{luaotfload} package
is not performed to these characters.
\end{itemize}
fonts in scaled point ($2^{-16}\,\textrm{pt}$).
\attr{ltj@ykblshift} The amount of shifting the baseline of Japanese
fonts in scaled point ($2^{-16}\,\textrm{pt}$).
-\attr{ltj@autospc} Whether the auto insertion of \textsf{kanjiskip} is allowed at the node.
-\attr{ltj@autoxspc} Whether the auto insertion of \textsf{xkanjiskip} is allowed at the node.
-\attr{ltj@icflag} For distinguishing `kinds' of the node. To this
- attribute, one of the following value is
- assigned:
+\attr{ltj@autospc} Whether the auto insertion of \Param{kanjiskip} is allowed at the node.
+\attr{ltj@autoxspc} Whether the auto insertion of \Param{xkanjiskip} is allowed at the node.
+\attr{ltj@icflag} An attribute for distinguishing `kinds' of a node. One of the following value is
+ assigned to this attribute:
\begin{description}
-\item[ITALIC (1)] Glues from an itaric correction
+\item[\textit{italic} (1)] Glues from an itaric correction
(\verb+\/+). This distinction of origins of glues
(from explicit \verb+\kern+, or from \verb+\/+)
- is needed in the insertion process of \textsf{xkanjiskip}.
-\item[PACKED (2)]
-\item[KINSOKU (3)] Penalties inserted for the word-wrapping process of Japanese characters (\emph{kinsoku}).
-\item[FROM\_JFM (4)] Glues/kerns from JFM.
-\item[LINE\_END (5)] Kerns for ...
-\item[KANJI\_SKIP (6)] Glues for \textsf{kanjiskip}.
-\item[XKANJI\_SKIP (7)] Glues for \textsf{xkanjiskip}.
-\item[PROCESSED (8)] Nodes which is already processed by ...
-\item[IC\_PROCESSED (9)] Glues from an itaric correction, but also already processed.
-\item[BOXBDD (15)] Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
+ is needed in the insertion process of \Param{xkanjiskip}.
+\item[\textit{packed} (2)]
+\item[\textit{kinsoku} (3)] Penalties inserted for the word-wrapping process of Japanese characters (\emph{kinsoku}).
+\item[\textit{from\_jfm} (4)] Glues/kerns from JFM.
+\item[\textit{line\_end} (5)] Kerns for ...
+\item[\textit{kanji\_skip} (6)] Glues for \Param{kanjiskip}.
+\item[\textit{xkanji\_skip} (7)] Glues for \Param{xkanjiskip}.
+\item[\textit{processed} (8)] Nodes which is already processed by ...
+\item[\textit{ic\_processed} (9)] Glues from an itaric correction, but also already processed.
+\item[\textit{boxbdd} (15)] Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
\end{description}
\attr{ltj@kcat$i$} Where $i$~is a natural number which is less than~7.
These 7~attributes store bit~vectors indicating which character block is regarded as a block of \textbf{JAchar}s.
\texttt{type} is 100).
\begin{description}
\item[30111] Nodes for indicating that \verb+\inhibitglue+ is
- specified. The \texttt{value} field of these nodes is not
- used.
+ specified. The \texttt{value} field of these nodes doesn't matter.
\item[30112] Nodes for \LuaTeX-ja's stack system (see the next
subsection). The \texttt{value} field of these nodes is
current group.
\verb+user_id+ is converted to a `glyph\_node' \emph{after}
the callback process of luaotfload.
\end{description}
+These whatsits will be removed during the process of inserting \textbf{JAglue}s.
\subsection{Stack System of \LuaTeX-ja}\label{ssec-stack}
\paragraph{Background}
\LuaTeX-ja has its own stack system, and most parameters of \LuaTeX-ja
are stored in it. To clarify the reason, imagine the parameter
-\textsf{kanjiskip} is stored by a skip, and consider the following
+\Param{kanjiskip} is stored by a skip, and consider the following
source:
\begin{LTXexample}
\ltjsetparameter{kanjiskip=0pt}ふがふが.%
\end{LTXexample}
As described in Part~\ref{part-ref}, the only effective value of
-\textsf{kanjiskip} in an hbox is the latest value, so the value of
-\textsf{kanjiskip} which applied in the entire hbox should be 5\,pt.
+\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
known from any callbacks. In the \texttt{tex/packaging.w} (which is a
file in the source of \LuaTeX), there are the following codes:
\section{Linebreak after Japanese Character}\label{sec-lbreak}
\subsection{Reference: Behavior in \pTeX}
-(NOT COMPLETED)
-
+%<*en>
In~\pTeX, a linebreak after a Japanese character doesn't emit a space,
since words are not separated by spaces in Japanese writings. However,
this feature isn't fully implemented in \LuaTeX-ja due to the
Japanese characters. The diagram of state transitions are indicated in
Figure~\ref{fig-ptexipro}. Note that \pTeX\ doesn't leave state~$K$
after `beginning/ending of a group' characters.
-\begin{figure}[tb]
-\label{fig-ptexipro}
+%</en>
+
+%<*ja>
+欧文では文章の改行は単語間でしか行わない.そのため,\TeX では,(文字の直後の)改行は
+空白文字と同じ扱いとして扱われる.一方,和文ではほとんどどどこでも改行が可能なため,
+\pTeX では和文文字の直後の改行は単純に無視されるようになっている.
+
+このような動作は,\pTeX が\TeX からエンジンとして拡張されたことによって可能になったことである.
+\pTeX の入力処理部は,\TeX におけるそれと同じように,有限オートマトンとして記述することができ,
+以下に述べるような4状態を持っている.
+
+\begin{itemize}
+\item State~$N$: 行の開始.
+\item State~$S$: 空白読み飛ばし.
+\item State~$M$: 行中.
+\item State~$K$: 行中(和文文字の後).
+\end{itemize}
+また,状態遷移は,図\label{fig-ptexipro}のようになっており,図中の数字は
+カテゴリーコードを表している.最初の3状態は\TeX の入力処理部と同じであり,
+図中から状態$K$と「$j$」と書かれた矢印を取り除けば,\TeX の入力処理部と同
+じものになる.
+
+この図から分かることは,
+\begin{quote}
+行が和文文字(とグループ境界文字)で終わっていれば,改行は無視される
+\end{quote}
+ということである.
+%</ja>
+
+\begin{figure}[!tb]
\begin{gather*}
\def\sp{\text{\tt\char32}}
\xymatrix{&&
\item Category codes 9~(ignored), 14~(comment)~and~15~(invalid) are omitted in above diagram.
\end{itemize}
\caption{State transitions of \pTeX's input processor.}
+\label{fig-ptexipro}
\end{figure}
\subsection{Behavior in \LuaTeX-ja}
+%<*en>
States in the input processoe of \LuaTeX\ is the same as that of \TeX,
and they can't be customized by any callbacks. Hence, we can only use
\verb+process_input_buffer+ and \verb+token_filter+ callbacks for to
\verb+process_input_buffer+ callback. This means that suppressing a
space must be done \emph{just before} an input line is read.
-Considering these situations, handling of a end-of-line in \LuaTeX-ja are as follows:
+Considering these situations, handling of an end-of-line in \LuaTeX-ja are as follows:
\begin{quote}
A character U+FFFFF (its category code is set to 14~(comment) by
-\LuaTeX-ja) is appended to an input line, before \LuaTeX\ actually
-process it, if and only if the following two conditions are satisfied:
+\LuaTeX-ja) is appended to an input line, \emph{before \LuaTeX\ actually
+process it}, if and only if the following two conditions are satisfied:
\begin{enumerate}
\item The category code of the character $\langle${return}$\rangle$
(whose character code is 13) is 5~(end-of-line).
\bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
\]
\end{enumerate}
+\end{quote}
+
+\paragraph{Remark}
+The following example shows the major difference from the behavior of \pTeX:
+\begin{LTXexample}
+\ltjsetparameter{autoxspacing=false}
+\ltjsetparameter{jacharrange={-6}}xあ
+y\ltjsetparameter{jacharrange={+6}}zあ
+u
+\end{LTXexample}
+\begin{itemize}
+\item There is no space between `x' and `y', since the line~2 ends with a \textbf{JAchar} `あ'
+(this `あ' considered as an \textbf{JAchar} at the ending of line~1).
+\item There is no space between `あ' (in the line~3) and `u', since the
+ line~3 ends with an \textbf{ALchar}
+(the letter `あ' considered as an \textbf{ALchar} at the ending of line~2).
+\end{itemize}
+%</en>
+
+%<*ja>
+\LuaTeX の入力処理部は\TeX のそれと全く同じであり,callbackによりユーザが
+カスタマイズすることはできない.このため,改行抑制の目的でユーザが利用で
+きそうなcallbackとしては,\verb+process_input_buffer+や
+\verb+token_filter+に限られてしまう.しかし,\TeX の入力処理部をよく見る
+と,後者も役には経たないことが分かる:改行文字は,入力処理部によってトー
+クン化される時に,カテゴリーコード10の32番文字へと置き換えられてしまうた
+め,\verb+token_filter+で非標準なトークン読み出しを行おうとしても,空白文
+字由来のトークンと,改行文字由来のトークンは区別できないのだ.
+
+すると,我々のとれる道は,\verb+process_input_buffer+を用いて
+\LuaTeX の入力処理部に引き渡される前に入力文字列を編集するというものしかない.
+以上を踏まえ,\LuaTeX-jaにおける「和文文字直後の改行抑制」の処理は,次のようになっている:
+\begin{quote}
+各入力行に対し,\textbf{その入力行が読まれる前の内部状態で}
+以下の2条件が満たされている場合,\LuaTeX-jaはU+FFFFF番の文字
+\footnote{この文字はコメント文字として扱われるように\LuaTeX-ja内部で設定をしている.}
+を末尾に追加する.よって,その場合に改行は空白とは見做されないこととなる.
+\begin{enumerate}
+\item 改行文字(文字コード13番)のカテゴリーコードが5~(end-of-line)である.
+\item 入力行は次の「正規表現」にマッチしている:
+\[
+ (\text{any char})^*(\textbf{JAchar})
+ \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
+\]
+\end{enumerate}
\end{quote}
-\section{Insertion of JFM glues, \textsf{kanjiskip} and \textsf{xkanjiskip}}
-This is the longest section of the document.
+この仕様は,前節で述べた\pTeX の仕様にできるだけ近づけたものとなっている.最初の条件は,
+\texttt{verbatim}系環境などの日本語対応マクロを書かなくてすませるためのものである.
+しかしながら,完全に同じ挙動が実現できたわけではない.
+差異は,次の例が示すように,和文文字の範囲を変更した行の改行において見られる:
+\begin{LTXexample}
+\ltjsetparameter{autoxspacing=false}
+\ltjsetparameter{jacharrange={-6}}xあ
+y\ltjsetparameter{jacharrange={+6}}zあ
+u
+\end{LTXexample}
+もし\pTeX とまったく同じ挙動を示すならば,出力は
+「\hbox{\ltjsetparameter{autoxspacing=false}x yzあu}」となるべきである.しかし,実際には
+上のように異なる挙動となっている.
+\begin{itemize}
+\item 2行目は「あ」という和文文字で終わる(2行目を処理する前の時点では,
+ 「あ」は和文文字扱いである)ため,直後の改行文字は無視される.
+\item 3行目は「あ」という欧文文字で終わる(2行目を処理する前の時点では,
+ 「あ」は欧文文字扱いである)ため,直後の改行文字は空白に置き換わる.
+\end{itemize}
+このため,トラブルを避けるために,和文文字の範囲を\verb+\ltjsetparameter+で編集した場合,
+その行はそこで改行するようにした方がいいだろう.
+%</ja>
+
-jfmglue.tex の内容をここに入れる
+\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}}
+\subsection{Overview}
+%<*en>
+NOT COMPLETED
+%</en>
+
+%<*ja>
+\LuaTeX-ja における和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる.
+\pTeX では次のような仕様であった:
+\begin{itemize}
+\item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
+追加する過程で行われる.
+\item \Param{xkanjiskip}の挿入は,hboxへのパッケージングや行分割前に行われる.
+\item \Param{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に
+「和文文字を表す2つの<char\_node>の間には\Param{kanjiskip}がある」ものとみなされる.
+\end{itemize}
+しかし,\LuaTeX-jaでは,hboxへのパッケージングや行分割前に全ての
+\textbf{JAglue},即ちJFMグルー・\Param{xkanjiskip}・\Param{kanjiskip}の
+3種類を一度に挿入することになっている.これは,\LuaTeX において欧文の合字・
+カーニング処理がノードベースになったことに対応する変更である.
+
+\LuaTeX-jaにおける\textbf{JAglue}挿入処理では,下の図\ref{fig-clu}のよう
+に「塊」を単位にして行われる.大雑把にいうと,「塊」は文字とそれに付随す
+るノード達(アクセント位置補正用のkernや,イタリック補正)をまとめたもの
+であり,2つの塊の間には,ペナルティ,\verb+\vadjust+,whatsitなど,行組版
+には関係しないものがある.そのため,……
+%</ja>
+
+% \begin{figure}[!tb]
+% \unitlength=10mm
+% \end{figure}
+
+\subsection{Definition of a `cluster'}
+
+\begin{defn}
+A \emph{cluster} is a list of nodes in one of the following forms, with the \textit{id} of it:
+\begin{enumerate}
+\item Nodes whose value of\ \verb+\ltj@icflag+ is in $[3,15)$. These
+ nodes come from a hbox which is already packaged, by unpackaging
+ (\verb+\unhbox+).
+ The \textit{id} is \textit{id\_pbox}.
+\item A inline math formula, including two \textit{math\_node}s at the boundary of it:
+HOGE
+ The \textit{id} is \textit{id\_math}.
+\item A \textit{glyph\_node} with nodes which relate with it:
+HOGE
+The \textit{id} is \textit{id\_jglyph} or
+\textit{id\_glyph}, according to whether the \textit{glyph\_node}
+represents a Japanese character or not.
+\item An box-like node, that is, an hbox, an vbox and an rule (\verb+\vrule+).
+The \textit{id} is \textit{id\_hlist} if the node is an
+ hbox which is not shifted vertically, or \textit{id\_box\_like}
+ otherwise.
+\item A glue, a kern whose subtype is not 2~(\textit{accent}), and a discretionary break.
+The \textit{id} is \textit{id\_glue}, \textit{id\_kern}
+ and \textit{id\_disc}, respectively.
+%Just a node which will \dots, \textit{i.e.}, a node which is \emph{not} one of the following:
+%\textit{ins\_node}, \textit{mark\_node}, \textit{adjust\_node}, \textit{whatsit\_node}
+%and \textit{penalty\_node}.
+\end{enumerate}
+We denote a cluster by \textit{Np}, \textit{Nq} and \textit{Nr}.
+\end{defn}
+
+Internally, a cluster is represented by a table $\textit{Np}$ with the following fields.
+
+\begin{description}
+\def\makelabel#1{\textbf{\textit{#1}}}
+\item[first, last] The first/last node of the cluster.
+\item[id] The \textit{id} in above definition.
+\item[nuc]
+
+% jachar
+\item[auto\_kspc, auto\_xspc]
+\item[xspc\_before, xspc\_after]
+
+% alchar, jachar
+\item[pre, post]
+\item[char]
+\item[class]
+\item[lend]
+\item[met, var]
+\end{description}
\end{document}
\askforoverwritefalse
\generate{\file{man-ja.tex}{\from{manual.dtx}{ja}}
\file{man-en.tex}{\from{manual.dtx}{en}}}
-%\immediate\write18{lualatex man-ja}
+\immediate\write18{lualatex man-ja}
\immediate\write18{lualatex man-en}
\endbatchfile
},
[99] = { -- box末尾
- chars = {'boxbdd'},
+ chars = {'boxbdd', 'parbdd'},
},
}
\ No newline at end of file
},
[99] = { -- box末尾
- chars = {'boxbdd'},
+ chars = {'boxbdd', 'parbdd'},
},
-
-}
\ No newline at end of file
+}
-- -*- coding: utf-8 -*-
-- jfm-ujis.lua: LuaTeX-ja 標準 JFM
--- besed on upnmlminr-h.tfm (a metric in UTF/OTF package used by upTeX).
+-- based on upnmlminr-h.tfm (a metric in UTF/OTF package used by upTeX).
luatexja.jfont.define_jfm {
dir = 'yoko',
},
[99] = { -- box末尾
- chars = {'boxbdd'},
+ chars = {'boxbdd', 'parbdd'},
},
}
\ No newline at end of file
\in@@#2<#1>\in@\in@@}
\def\fam@elt{\noexpand\fam@elt}
\def\enc@elt{\noexpand\enc@elt}
-\def\fenc@list{\enc@elt<OML>\enc@elt<T1>\enc@elt<OT1>\enc@elt<OMS>%
- \enc@elt<OMX>\enc@elt<TS1>\enc@elt<U>}
\let\kenc@list\@empty
\let\kyenc@list\@empty
\let\ktenc@list\@empty
-\def\kfam@list{\fam@elt<mc>\fam@elt<gt>}
-\def\ffam@list{\fam@elt<cmr>\fam@elt<cmss>\fam@elt<cmtt>%
- \fam@elt<cmm>\fam@elt<cmsy>\fam@elt<cmex>}
-\let\notkfam@list\ffam@list
-\let\notffam@list\kfam@list
\newbox\tstrutbox
\newbox\zstrutbox
\def\strut{\relax
{\default@shape}}%
\expandafter\let\csname#1-cmd\endcsname\@changed@cmd
\def\enc@elt{\noexpand\enc@elt}%
- \xdef\fenc@list{\fenc@list\enc@elt<#1>}%
\else
\@font@info{Redeclaring font encoding #1}%
\fi
\def\DeclareFontFamily#1#2#3{%
\@ifundefined{T@#1}%
{\@latex@error{Encoding scheme `#1' unknown}\@eha}%
- {\edef\tmp@item{{#2}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
- \ifin@ \else
- \def\fam@elt{\noexpand\fam@elt}%
- \xdef\ffam@list{\ffam@list\fam@elt<#2>}%
- \fi
- \def\reserved@a{#3}%
+ {\def\reserved@a{#3}%
\global
\expandafter\let\csname #1+#2\expandafter\endcsname
\ifx \reserved@a\@empty
\def\DeclareKanjiFamily#1#2#3{%
\@ifundefined{T@#1}%
{\@latex@error{KANJI Encoding scheme `#1' unknown}\@eha}%
- {\edef\tmp@item{{#2}}%
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
- \ifin@ \else
- \def\fam@elt{\noexpand\fam@elt}%
- \xdef\kfam@list{\kfam@list\fam@elt<#2>}%
- \fi
- \def\reserved@a{#3}%
+ {\def\reserved@a{#3}%
\global
\expandafter\let\csname #1+#2\expandafter\endcsname
\ifx \reserved@a\@empty
\newif\if@tempswz
\DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
\DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
+% \notkfam@list@<enc>: list of non-defined kanji families under <enc>
+% \kfam@list@<enc>: list of kanji families under <enc>, defined in a .fd file
\DeclareRobustCommand\fontfamily[1]{%
- \edef\tmp@item{{#1}}%
- \@notkfamfalse
- \@notffamfalse
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kfam@list}%
- \ifin@ \edef\k@family{#1}%
- \else
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\notkfam@list}%
- \ifin@ \@notkfamtrue
- \else
- %% \@tempswzfalse
- %% \def\fam@elt{\noexpand\fam@elt}%
- %% \message{(I search kanjifont definition file:}%
- %% \def\enc@elt<##1>{\message{.}%
- %% \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
- %% \reserved@a{\@tempswztrue}{}\relax}%
- %% \kenc@list
- %% \message{)}%
- %% \if@tempswz
- %% \edef\k@family{#1}%
- %% \else
- \@notkfamtrue
- \xdef\notkfam@list{\notkfam@list\fam@elt<#1>}%
- %% \fi
- \fi\fi
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\ffam@list}%
- \ifin@ \edef\f@family{#1}\else
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\notffam@list}%
- \ifin@ \@notffamtrue \else
- \@tempswzfalse
- \def\fam@elt{\noexpand\fam@elt}%
- \message{(I search font definition file:}%
- \def\enc@elt<##1>{\message{.}%
- \edef\reserved@a{\lowercase{\noexpand\IfFileExists{##1#1.fd}}}%
- \reserved@a{\@tempswztrue}{}\relax}%
- \fenc@list
- \message{)}%
- \if@tempswz
- \edef\f@family{#1}%
- \else
- \@notffamtrue
- \xdef\notffam@list{\notffam@list\fam@elt<#1>}%
- \fi
- \fi\fi
+ \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+ \ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
+ \edef\k@family{#1}%
+ \else % search font definition file...
+ \ifcsname kfam@list@\k@encoding\endcsname\else
+ \expandafter\let\csname kfam@list@\k@encoding\endcsname\@empty
+ \expandafter\let\csname notkfam@list@\k@encoding\endcsname\@empty
+ \fi
+ \edef\@templist{\@nameuse{kfam@list@\k@encoding}}%
+ \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \ifin@\edef\k@family{#1}\else%
+ \edef\@templist{\@nameuse{notkfam@list@\k@encoding}}%
+ \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \ifin@\@notkfamtrue\else%
+ \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\k@encoding+%
+ \message{(I search kanjifont definition file: \@@temp#1.fd)}%
+ \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
+ \if@tempswz
+ \expandafter\xdef\csname kfam@list@\k@encoding\endcsname
+ {\@nameuse{kfam@list@\k@encoding}\fam@elt<#1>}\edef\k@family{#1}%
+ \else
+ \expandafter\xdef\csname notkfam@list@\k@encoding\endcsname
+ {\@nameuse{notkfam@list@\k@encoding}\fam@elt<#1>}\@notkfamtrue%
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifcsname \f@encoding+#1\endcsname
+ \edef\f@family{#1}%
+ \else % search font definition file...
+ \ifcsname ffam@list@\f@encoding\endcsname\else
+ \expandafter\let\csname ffam@list@\f@encoding\endcsname\@empty
+ \expandafter\let\csname notffam@list@\f@encoding\endcsname\@empty
+ \fi
+ \edef\@templist{\@nameuse{ffam@list@\f@encoding}}%
+ \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \ifin@\edef\f@family{#1}\else
+ \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
+ \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+ \ifin@\@notffamtrue\else
+ \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\f@encoding+%
+ \message{(I search font definition file: \@@temp#1.fd)}%
+ \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
+ \if@tempswz
+ \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
+ {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
+ \else
+ \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
+ {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
+ \fi
+ \fi
+ \fi
+ \fi
\if@notkfam\if@notffam
- \edef\k@family{#1}\edef\f@family{#1}%
- \fi\fi}
+ {\ifcsname D@\k@encoding\endcsname\@nameuse{D@\k@encoding}\fi
+ \xdef\@@temp{\default@family}}\edef\k@family{\@@temp}%
+ {\ifcsname D@\f@encoding\endcsname\@nameuse{D@\f@encoding}\fi
+ \xdef\@@temp{\default@family}}\edef\f@family{\@@temp}%
+ \fi\fi
+}
\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}}
\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}}
\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final}
\ProcessOptions\relax
\input{ltjsize1\@ptsize.clo}
+\directlua{luatexbase.add_to_callback('luatexja.load_jfm',
+ function (ji, jn) ji.chars['parbdd'] = 0; return ji end,
+ 'ltj.jclasses_load_jfm', 1)}
+{\jfont\g=psft:Ryumin-Light:jfm=min } % loading jfm-min.lua
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [0.962216] psft:Ryumin-Light:jfm=min}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [0.962216] psft:GothicBBB-Medium:jfm=min;jfmvar=goth}{}
+\ltjglobalsetparameter{differentjfm=both}
+\directlua{luatexbase.remove_from_callback('luatexja.load_jfm', 'ltj.jclasses_load_jfm')}
\if@stysize
\setlength\columnsep{2\Cwd}
\else
\ExecuteOptions{a4paper,10pt,twoside,onecolumn,final,openright}
\ProcessOptions\relax
\input{ltjbk1\@ptsize.clo}
+\directlua{luatexbase.add_to_callback('luatexja.load_jfm',
+ function (ji, jn) ji.chars['parbdd'] = 0; return ji end,
+ 'ltj.jclasses_load_jfm', 1)}
+{\jfont\g=psft:Ryumin-Light:jfm=min } % loading jfm-min.lua
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [0.962216] psft:Ryumin-Light:jfm=min}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [0.962216] psft:GothicBBB-Medium:jfm=min;jfmvar=goth}{}
+\ltjglobalsetparameter{differentjfm=both}
+\directlua{luatexbase.remove_from_callback('luatexja.load_jfm', 'ltj.jclasses_load_jfm')}
\if@stysize
\setlength\columnsep{2\Cwd}
\else
% This file is part of the pLaTeX2e system.
% -----------------------------------------
%
-% \fi
+% \fi
%
-% \CheckSum{4463}
+% \CheckSum{4475}
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%
% \section{フォント}
%
+% Lua\LaTeX-jaの標準では、OTFパッケージ由来のメトリックが使われるようになっています。
+% 本クラスでは、「p\TeX の組版と互換性をできだけ持たせる」例を提示するため、
+% \begin{itemize}
+% \item メトリックを\texttt{min10.tfm}ベースの\texttt{jfm-min.lua}に変更。
+% \item 明朝とゴシックは両方とも\texttt{jfm-min.lua}を用いるが、
+% 和文処理用グルー挿入時には「違うメトリックを使用」として思わせる。
+% \item p\TeX と同様に、「異なるメトリックの2つの和文文字」の間には、両者から定める
+% グルーを両方挿入する。
+% \item calllback を利用し、標準で用いる\texttt{jfm-min.lua}を、段落始めの括弧が全角二分下がりになるように内部で変更している。
+%
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*article|report|book>
+\directlua{luatexbase.add_to_callback('luatexja.load_jfm',
+ function (ji, jn) ji.chars['parbdd'] = 0; return ji end,
+ 'ltj.jclasses_load_jfm', 1)}
+{\jfont\g=psft:Ryumin-Light:jfm=min } % loading jfm-min.lua
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [0.962216] psft:Ryumin-Light:jfm=min}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [0.962216] psft:GothicBBB-Medium:jfm=min;jfmvar=goth}{}
+\ltjglobalsetparameter{differentjfm=both}
+\directlua{luatexbase.remove_from_callback('luatexja.load_jfm', 'ltj.jclasses_load_jfm')}
+%</article|report|book>
+% \end{macrocode}
+%
% ここでは、\LaTeX{}のフォントサイズコマンドの定義をしています。
% フォントサイズコマンドの定義は、次のコマンドを用います。
%
\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,openany}
\ProcessOptions\relax
\input{ltjsize1\@ptsize.clo}
+\directlua{luatexbase.add_to_callback('luatexja.load_jfm',
+ function (ji, jn) ji.chars['parbdd'] = 0; return ji end,
+ 'ltj.jclasses_load_jfm', 1)}
+{\jfont\g=psft:Ryumin-Light:jfm=min } % loading jfm-min.lua
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [0.962216] psft:Ryumin-Light:jfm=min}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [0.962216] psft:GothicBBB-Medium:jfm=min;jfmvar=goth}{}
+\ltjglobalsetparameter{differentjfm=both}
+\directlua{luatexbase.remove_from_callback('luatexja.load_jfm', 'ltj.jclasses_load_jfm')}
\if@stysize
\setlength\columnsep{2\Cwd}
\else
\newcount\ltj@tempcntc
\newdimen\ltj@tempdima
\newskip\ltj@tempskipa
+\newtoks\ltj@temptoks
\newdimen\ltj@zw
\newdimen\ltj@zh
\newdimen\jQ \jQ=0.25mm
-\newdimen\jH \jH=0.25mm
+\let\jH=\jQ
%%%%%%%% error message
\def\ltj@defnum{0}
\def\zh{\directlua{luatexja.jfont.load_zh()}\ltj@zh}
%%%%%%%% \inhibitglue
-\protected\def\inhibitglue{\ifvmode\leavevmode\fi
- \ifmmode\else\directlua{luatexja.jfmglue.create_inhibitglue_node()}\fi}
+\let\new@everypar=\everypar
+\protected\def\inhibitglue{%
+ \ifvmode
+ \directlua{ltj.global_temp = tex.globaldefs; tex.globaldefs = 0}% trick
+ \xdef\@@tempa{\the\everypar}%
+ \xdef\@@tempb{\everypar={\@@tempa}\@@tempa\noexpand\ltj@@ihb}%
+ \everypar\expandafter{\@@tempb}%
+ \directlua{tex.globaldefs = ltj.global_temp}% trick
+ \else\ifhmode\ltj@@ihb\fi\fi}
+\def\ltj@@ihb{\directlua{luatexja.jfmglue.create_inhibitglue_node()}}
%%%%%%%% \yoko, \tate, \ifydir, \iftdir
%% At this moment, tategaki mode is not implemented;
local ct = tex.getcatcode(c)
local ctl = tex.getcatcode(13) -- endline character
if ((ct==11) or (ct==12)) and (ctl==5) then
- local p = node.new(id_glyph)
+ local p = node_new(id_glyph)
p.char = c
if ltjc.is_ucs_in_japanese_char(p) then
buffer = buffer .. string.char(0xF3,0xBF,0xBF,0xBF) -- U+FFFFF
local ltjs_get_skip_table = ltjs.get_skip_table
local ltjf_font_metric_table = ltjf.font_metric_table
local ltjf_metrics = ltjf.metrics
+local box_stack_level
+local par_indented -- is the paragraph indented?
-------------------- Helper functions
local function skip_table_to_spec(n)
local g = node_new(id_glue_spec)
- local st = ltjs_get_skip_table(n, ltjp.box_stack_level)
+ local st = ltjs_get_skip_table(n, box_stack_level)
g.width = st.width; g.stretch = st.stretch; g.shrink = st.shrink
g.stretch_order = st.stretch_order; g.shrink_order = st.shrink_order
return g
elseif lpa>=PACKED then
if lpa == BOXBDD then
local lq = node_next(lp)
- head = node_remove(head, lp); lp = lq
+ head = node_remove(head, lp); node_free(lp); lp = lq
else calc_np_pbox(); return end -- id_pbox
elseif lpi == id_ins or lpi == id_mark or lpi == id_adjust then
set_attr_icflag_processed(lp); lp = node_next(lp)
elseif lpi == id_whatsit then
if lp.subtype==sid_user and lp.user_id==30111 then
local lq = node_next(lp)
- head = node_remove(head, lp); lp = lq; ihb_flag = true
+ head = node_remove(head, lp); node_free(lp); lp = lq; ihb_flag = true
else
set_attr_icflag_processed(lp); lp = node_next(lp)
end
Np.size= z.size
Np.met = ltjf_metrics[z.jfm]
Np.var = z.var
- Np.pre = ltjs_get_penalty_table('pre', c, 0, ltjp.box_stack_level)
- Np.post = ltjs_get_penalty_table('post', c, 0, ltjp.box_stack_level)
+ Np.pre = ltjs_get_penalty_table('pre', c, 0, box_stack_level)
+ Np.post = ltjs_get_penalty_table('post', c, 0, box_stack_level)
z = find_char_class('lineend', Np.met)
local y = Np.met.size_cache[Np.size].char_type[Np.class]
if y.kern and y.kern[z] then
else
Np.lend = 0
end
- y = ltjs_get_penalty_table('xsp', c, 3, ltjp.box_stack_level)
+ y = ltjs_get_penalty_table('xsp', c, 3, box_stack_level)
Np.xspc_before = (y>=2)
Np.xspc_after = (y%2==1)
Np.auto_kspc = (has_attr(x, attr_autospc)==1)
x = node_tail(x.components); c = x.char
end
end
- Np.pre = ltjs_get_penalty_table('pre', c, 0, ltjp.box_stack_level)
- Np.post = ltjs_get_penalty_table('post', c, 0, ltjp.box_stack_level)
+ Np.pre = ltjs_get_penalty_table('pre', c, 0, box_stack_level)
+ Np.post = ltjs_get_penalty_table('post', c, 0, box_stack_level)
else
Np.pre = 0; Np.post = 0
end
Np.met = nil
- local y = ltjs_get_penalty_table('xsp', c, 3, ltjp.box_stack_level)
+ local y = ltjs_get_penalty_table('xsp', c, 3, box_stack_level)
Np.xspc_before = (y%2==1)
Np.xspc_after = (y>=2)
Np.auto_xspc = (has_attr(x, attr_autoxspc)==1)
end
elseif ak then
gx.width = ak[1]; gx.stretch = ak[2]; gx.shrink = ak[3]
- else gx = get_zero_glue() -- fallback
+ else node_free(gx); gx = get_zero_glue() -- fallback
end
g.spec = gx
- else g.spec=node_copy(kanji_skip) end
+ else g.spec=node_copy(kanji_skip); node_free(gx) end
else
- g.spec = get_zero_glue()
+ g.spec = get_zero_glue(); node_free(gx)
end
set_attr(g, attr_icflag, KANJI_SKIP)
return g
local bk = get_xkanji_skip_from_jfm(Nn)
if bk then
gx.width = bk[1]; gx.stretch = bk[2]; gx.shrink = bk[3]
- else gx = get_zero_glue() -- fallback
+ else node_free(gx); gx = get_zero_glue() -- fallback
end
g.spec = gx
else g.spec=node_copy(xkanji_skip) end
local function get_OA_skip()
if not ihb_flag then
- return new_jfm_glue(Np, find_char_class('jcharbdd',Np.met), Np.class)
+ local c
+ if Nq.id == id_math then c = -1 else c = 'jcharbdd' end
+ return new_jfm_glue(Np, find_char_class(c,Np.met), Np.class)
else return nil
end
end
local function get_OB_skip()
if not ihb_flag then
- return new_jfm_glue(Nq, Nq.class, find_char_class('jcharbdd',Nq.met))
+ local c
+ if Np.id == id_math then c = -1 else c = 'jcharbdd' end
+ return new_jfm_glue(Nq, Nq.class, find_char_class(c,Nq.met))
else return nil
end
end
real_insert(0, g)
end
-- \jcharwidowpenalty 挿入予定箇所更新
- if mode and ltjs_get_penalty_table('kcat', Np.char, 0, ltjp.box_stack_level)%2~=1 then
+ if mode and ltjs_get_penalty_table('kcat', Np.char, 0, box_stack_level)%2~=1 then
widow_Np.first = Np.first;
local Bpr = widow_Bp; widow_Bp = Bp; Bp = Bpr
end
Bp = widow_Bp; Np = widow_Np; Nq.lend = 0
if Np.first then
handle_penalty_normal(0,
- ltjs_get_penalty_table('jwp', 0, 0, ltjp.box_stack_level))
+ ltjs_get_penalty_table('jwp', 0, 0, box_stack_level))
end
else
-- the current list is the contents of a hbox
head = node_insert_after(head, Np.last, g)
end
end
- head = node_remove(head, last) -- remove the sentinel
+ head = node_remove(head, last); node_free(last);-- remove the sentinel
end
+ node_free(kanji_skip); node_free(xkanji_skip)
end
-- リスト先頭の処理
local function handle_list_head()
if Np.id == id_jglyph or (Np.id==id_pbox and Np.met) then
- local g = new_jfm_glue(Np, find_char_class('boxbdd',Np.met), Np.class)
- if g then
- set_attr(g, attr_icflag, BOXBDD)
- if g.id==id_glue and #Bp==0 then
- local h = node_new(id_penalty)
- h.penalty = 10000; set_attr(h, attr_icflag, BOXBDD)
+ if not ihb_flag then
+ local g
+ if par_indented then
+ g = new_jfm_glue(Np, find_char_class('parbdd',Np.met), Np.class)
+ else
+ g = new_jfm_glue(Np, find_char_class('boxbdd',Np.met), Np.class)
+ end
+ if g then
+ set_attr(g, attr_icflag, BOXBDD)
+ if g.id==id_glue and #Bp==0 then
+ local h = node_new(id_penalty)
+ h.penalty = 10000; set_attr(h, attr_icflag, BOXBDD)
+ end
+ head = node_insert_before(head, Np.first, g)
end
- head = node_insert_before(head, Np.first, g)
end
end
end
-- initialize
local function init_var()
lp = head; Bp = {}; widow_Bp = {}; widow_Np = {first = nil}
+ par_indented = false
+ box_stack_level = ltjp.box_stack_level
kanji_skip=skip_table_to_spec('kanjiskip')
xkanji_skip=skip_table_to_spec('xkanjiskip')
Np = {
if mode then
-- the current list is to be line-breaked:
-- hbox from \parindent is skipped.
- while lp and (lp.id==id_whatsit or ((lp.id==id_hlist) and (lp.subtype==3))) do
+ while lp and ((lp.id==id_whatsit and lp.subtype~=sid_user)
+ or ((lp.id==id_hlist) and (lp.subtype==3))) do
+ if (lp.id==id_hlist) and (lp.subtype==3) then par_indented = true end
lp=node_next(lp) end
last=node.tail(head)
else
elseif Np.id==id_hlist or Np.id==id_pbox or Np.id==id_disc then after_hlist()
end
else
- if not mode then head = node_remove(head, last) end
+ if not mode then head = node_remove(head, last); node_free(last) end
return head
end
calc_np()
metrics={} -- this table stores all metric informations
font_metric_table={} -- [font number] -> jfm_name, jfm_var, size
+luatexbase.create_callback("luatexja.load_jfm", "data", function (ft, jn) return ft end)
+
local jfm_file_name, jfm_var
local defjfm_res
t[i] = nil
end
end
+ t = luatexbase.call_callback("luatexja.load_jfm", t, jfm_file_name)
t.size_cache = {}
- defjfm_res= t
+ defjfm_res = t
end
local function mult_table(old,scale) -- modified from table.fastcopy
metrics[j].size_cache[sz].zh = round(metrics[j].zh*sz)
end
-luatexbase.create_callback("ltj.find_char_class", "data",
+luatexbase.create_callback("luatexja.find_char_class", "data",
function (arg, fmtable, char)
return 0
end)
-- c: character code, m: index in font_metric table
if not metrics[m.jfm] then return 0 end
return metrics[m.jfm].chars[c] or
- luatexbase.call_callback("ltj.find_char_class", 0, m, c)
+ luatexbase.call_callback("luatexja.find_char_class", 0, m, c)
end
local function load_jfont_metric()
tex.sprint(cat_lp, '\\expandafter\\font\\csname ' .. cstemp .. '\\endcsname')
end
--- EXT
-luatexbase.create_callback("ltj.define_jfont", "data", function (ft, fn) return ft end)
+luatexbase.create_callback("luatexja.define_jfont", "data", function (ft, fn) return ft end)
+-- EXT
function jfontdefY() -- for horizontal font
local j = load_jfont_metric()
local fn = font.id(cstemp)
end
update_jfm_cache(j, f.size)
local fmtable = { jfm = j, size = f.size, var = jfm_var }
- fmtable = luatexbase.call_callback("ltj.define_jfont", fmtable, fn)
+ fmtable = luatexbase.call_callback("luatexja.define_jfont", fmtable, fn)
font_metric_table[fn]=fmtable
tex.sprint(cat_lp, ltj.is_global .. '\\protected\\expandafter\\def\\csname '
.. cstemp .. '\\endcsname{\\ltj@curjfnt=' .. fn .. '\\relax}')
g.kern = font.fonts[f].characters[p.char].italic
end
node.write(g)
+ tex.attribute[attr_icflag] = -(0x7FFFFFFF)
end
end
end
return fmtable
end
-luatexbase.add_to_callback("ltj.define_jfont",
+luatexbase.add_to_callback("luatexja.define_jfont",
cid_to_char, "ltj.otf.define_jfont", 1)
-- 既に読み込まれているフォントに対しても,同じことをやらないといけない
for fn, v in pairs(ltjf_font_metric_table) do
else return 0
end
end
-luatexbase.add_to_callback("ltj.find_char_class",
+luatexbase.add_to_callback("luatexja.find_char_class",
cid_set_char_class, "ltj.otf.find_char_class", 1)
-------------------- all done
local unset_attr = node.unset_attribute
local node_remove = node.remove
local node_next = node.next
+local node_free = node.free
local id_glyph = node.id('glyph')
local id_whatsit = node.id('whatsit')
if p.subtype==sid_user and p.user_id==30112 then
local g = p
if mode and g.value==cl then box_set = true end
- head, p = node_remove(head, g); break
+ head, p = node_remove(head, g); node_free(g); break
end
end
if box_set then
chars = { 'あ' },
align = 'left', left = 0.0, down = 0.0,
width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
- glue = { [3] = { 1.41, 0, 0} },
+ glue = { [3] = { 1.41, 0, 0}, [399] = {1.25, 0.43, 0.87} },
kern = { [8] = -1.41 , [2] = 2.0, [99] = 1.21 }
},
[11] = {
align = 'left', left = 0.0, down = 0.0,
width = 1.0, height = 0.88, depth = 0.12, italic=0.0
},
+ [4] = {
+ chars = { 'エ' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = { [199] = { 0.78, 0, 0} },
+ },
[99] = {
chars = { 'jcharbdd' },
glue = { [11] = { 1.41, 0, 0} },
chars = { 'boxbdd' },
glue = { [51] = { 1.03, 0, 0} , [1] = { 0.94, 0.23, 0.45 }},
},
+ [299] = {
+ chars = { 'parbdd' },
+ glue = { [51] = { 0.68, 0.02, 0.04} },
+ },
+ [399] = {
+ chars = { -1 }, -- math
+ glue = { [0] = { 0.68, 0.02, 0.04} },
+ },
[8] = {
chars = { 'lineend' },
}
[1] = { -- 開き括弧類
chars = {
- 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
- 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
},
align = 'right', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.16,
[2] = { -- 閉じ括弧類
chars = {
- 0x2019, 0x201D, 0x3001, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
- 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60
+ '’', '”', '、', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ',', ']', '}', '⦆'
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.16,
[1] = { 0.5 , 0.0, 0.5 },
[3] = { 0.25, 0.0, 0.25 },
[5] = { 0.5 , 0.0, 0.5 },
+ [6] = { 0.5 , 0.0, 0.5 },
[7] = { 0.5 , 0.0, 0.5 }
}
},
[3] = { -- 中点類
- chars = {0x30FB, 0xFF1A, 0xFF1B},
+ chars = {'・', ':', ';'},
align = 'middle', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.16,
glue = {
[3] = { 0.5 , 0.0, 0.5 },
[4] = { 0.25, 0.0, 0.25 },
[5] = { 0.25, 0.0, 0.25 },
+ [6] = { 0.25, 0.0, 0.25 },
[7] = { 0.25, 0.0, 0.25 }
}
},
[4] = { -- 句点類
- chars = {0x3002, 0xFF0E},
+ chars = {'。', '.'},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.16,
glue = {
[1] = { 0.5 , 0.0, 0.0 },
[3] = { 0.75, 0.0, 0.25 },
[5] = { 0.5 , 0.0, 0.0 },
+ [6] = { 0.5 , 0.0, 0.0 },
[7] = { 0.5 , 0.0, 0.0 }
}
},
[5] = { -- ダッシュ
- chars = { 0x2015, 0x2025, 0x2026 },
+ chars = { '―', '‥', '…' },
align = 'left', left = 0.0, down = 0.0,
width = 1.0, height = 0.88, depth = 0.12, italic=0.88*0.16,
glue = {
}
},
- [6] = { -- box末尾
- chars = {'boxbdd'},
+ [6] = { -- 感嘆符・疑問符
+ chars = { '?', '!' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.88*0.16,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.5 },
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [7] = { 0.5 , 0.0, 0.5 },
+ },
+ kern = {
+ [5] = 0.0
+ }
},
[7] = { -- 半角カナ
chars = {
- 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69,
- 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72,
- 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B,
- 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84,
- 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
- 0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96,
- 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F
+ '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
+ 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
+ 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
+ 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
+ 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
+ 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
+ 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
+ "AJ1-516", "AJ1-517", "AJ1-518", "AJ1-519", "AJ1-520", "AJ1-521", "AJ1-522",
+ "AJ1-523", "AJ1-524", "AJ1-525", "AJ1-526", "AJ1-527", "AJ1-528", "AJ1-529",
+ "AJ1-530", "AJ1-531", "AJ1-532", "AJ1-533", "AJ1-534", "AJ1-535", "AJ1-536",
+ "AJ1-537", "AJ1-538", "AJ1-539", "AJ1-540", "AJ1-541", "AJ1-542", "AJ1-543",
+ "AJ1-544", "AJ1-545", "AJ1-546", "AJ1-547", "AJ1-548", "AJ1-549", "AJ1-550",
+ "AJ1-551", "AJ1-552", "AJ1-553", "AJ1-554", "AJ1-555", "AJ1-556", "AJ1-557",
+ "AJ1-558", "AJ1-559", "AJ1-560", "AJ1-561", "AJ1-562", "AJ1-563", "AJ1-564",
+ "AJ1-565", "AJ1-566", "AJ1-567", "AJ1-568", "AJ1-569", "AJ1-570", "AJ1-571",
+ "AJ1-572", "AJ1-573", "AJ1-574", "AJ1-575", "AJ1-576", "AJ1-577", "AJ1-578",
+ "AJ1-579", "AJ1-580", "AJ1-581", "AJ1-582", "AJ1-583", "AJ1-584", "AJ1-585",
+ "AJ1-586", "AJ1-587", "AJ1-588", "AJ1-589", "AJ1-590", "AJ1-591", "AJ1-592",
+ "AJ1-593", "AJ1-594", "AJ1-595", "AJ1-596", "AJ1-597", "AJ1-598",
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.16,
[3] = { 0.25, 0.0, 0.25 }
}
},
-}
\ No newline at end of file
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+
+}
[1] = { -- 開き括弧類
chars = {
- 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3025,
- 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
},
align = 'right', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.25,
[2] = { -- 閉じ括弧類
chars = {
- 0x2019, 0x201D, 0x3001, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
- 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60
+ '’', '”', '、', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ',', ']', '}', '⦆'
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.25,
[1] = { 0.5 , 0.0, 0.5 },
[3] = { 0.25, 0.0, 0.25 },
[5] = { 0.5 , 0.0, 0.5 },
+ [6] = { 0.5 , 0.0, 0.5 },
[7] = { 0.5 , 0.0, 0.5 }
}
},
[3] = { -- 中点類
- chars = {0x30FB, 0xFF1A, 0xFF1B},
+ chars = {'・', ':', ';'},
align = 'middle', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.25,
glue = {
[3] = { 0.5 , 0.0, 0.5 },
[4] = { 0.25, 0.0, 0.25 },
[5] = { 0.25, 0.0, 0.25 },
+ [6] = { 0.25, 0.0, 0.25 },
[7] = { 0.25, 0.0, 0.25 }
}
},
[4] = { -- 句点類
- chars = {0x3002, 0xFF0E},
+ chars = {'。', '.'},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.25,
glue = {
[1] = { 0.5 , 0.0, 0.0 },
[3] = { 0.75, 0.0, 0.25 },
[5] = { 0.5 , 0.0, 0.0 },
+ [6] = { 0.5 , 0.0, 0.0 },
[7] = { 0.5 , 0.0, 0.0 }
}
},
[5] = { -- ダッシュ
- chars = { 0x2015, 0x2025, 0x2026 },
+ chars = { '―', '‥', '…' },
align = 'left', left = 0.0, down = 0.0,
width = 1.0, height = 0.88, depth = 0.12, italic=0.88*0.25,
glue = {
}
},
- [6] = { -- box末尾
- chars = {'boxbdd'},
+ [6] = { -- 感嘆符・疑問符
+ chars = { '?', '!' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.88*0.25,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.5 },
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [7] = { 0.5 , 0.0, 0.5 },
+ },
+ kern = {
+ [5] = 0.0
+ }
},
[7] = { -- 半角カナ
chars = {
- 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69,
- 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72,
- 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B,
- 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84,
- 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
- 0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96,
- 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F
+ '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
+ 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
+ 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
+ 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
+ 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
+ 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
+ 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
+ "AJ1-516", "AJ1-517", "AJ1-518", "AJ1-519", "AJ1-520", "AJ1-521", "AJ1-522",
+ "AJ1-523", "AJ1-524", "AJ1-525", "AJ1-526", "AJ1-527", "AJ1-528", "AJ1-529",
+ "AJ1-530", "AJ1-531", "AJ1-532", "AJ1-533", "AJ1-534", "AJ1-535", "AJ1-536",
+ "AJ1-537", "AJ1-538", "AJ1-539", "AJ1-540", "AJ1-541", "AJ1-542", "AJ1-543",
+ "AJ1-544", "AJ1-545", "AJ1-546", "AJ1-547", "AJ1-548", "AJ1-549", "AJ1-550",
+ "AJ1-551", "AJ1-552", "AJ1-553", "AJ1-554", "AJ1-555", "AJ1-556", "AJ1-557",
+ "AJ1-558", "AJ1-559", "AJ1-560", "AJ1-561", "AJ1-562", "AJ1-563", "AJ1-564",
+ "AJ1-565", "AJ1-566", "AJ1-567", "AJ1-568", "AJ1-569", "AJ1-570", "AJ1-571",
+ "AJ1-572", "AJ1-573", "AJ1-574", "AJ1-575", "AJ1-576", "AJ1-577", "AJ1-578",
+ "AJ1-579", "AJ1-580", "AJ1-581", "AJ1-582", "AJ1-583", "AJ1-584", "AJ1-585",
+ "AJ1-586", "AJ1-587", "AJ1-588", "AJ1-589", "AJ1-590", "AJ1-591", "AJ1-592",
+ "AJ1-593", "AJ1-594", "AJ1-595", "AJ1-596", "AJ1-597", "AJ1-598",
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5, height = 0.88, depth = 0.12, italic=0.88*0.25,
[3] = { 0.25, 0.0, 0.25 }
}
},
-}
\ No newline at end of file
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+
+}
[1] = { -- 開き括弧類
chars = {
- 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3025,
- 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
},
align = 'right', left = 0.0, down = 0.0,
width = 0.5*1.5, height = 0.88, depth = 0.12, italic=0.0,
[2] = { -- 閉じ括弧類
chars = {
- 0x2019, 0x201D, 0x3001, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
- 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60
+ '’', '”', '、', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ',', ']', '}', '⦆'
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5*1.5, height = 0.88, depth = 0.12, italic=0.0,
[1] = { 0.5*1.5 , 0.0, 0.5 },
[3] = { 0.25*1.5, 0.0, 0.25 },
[5] = { 0.5*1.5 , 0.0, 0.5 },
+ [6] = { 0.5*1.5 , 0.0, 0.5 },
[7] = { 0.5*1.5 , 0.0, 0.5 }
}
},
[3] = { -- 中点類
- chars = {0x30FB, 0xFF1A, 0xFF1B},
+ chars = {'・', ':', ';'},
align = 'middle', left = 0.0, down = 0.0,
width = 0.5*1.5, height = 0.88, depth = 0.12, italic=0.0,
glue = {
[3] = { 0.5*1.5 , 0.0, 0.5 },
[4] = { 0.25*1.5, 0.0, 0.25 },
[5] = { 0.25*1.5, 0.0, 0.25 },
+ [6] = { 0.25*1.5, 0.0, 0.25 },
[7] = { 0.25*1.5, 0.0, 0.25 }
}
},
[4] = { -- 句点類
- chars = {0x3002, 0xFF0E},
+ chars = {'。', '.'},
align = 'left', left = 0.0, down = 0.0,
width = 0.5*1.5, height = 0.88, depth = 0.12, italic=0.0,
glue = {
[1] = { 0.5*1.5 , 0.0, 0.0 },
[3] = { 0.75*1.5, 0.0, 0.25 },
[5] = { 0.5*1.5 , 0.0, 0.0 },
+ [6] = { 0.5*1.5 , 0.0, 0.0 },
[7] = { 0.5*1.5 , 0.0, 0.0 }
}
},
[5] = { -- ダッシュ
- chars = { 0x2015, 0x2025, 0x2026 },
+ chars = { '―', '‥', '…' },
align = 'left', left = 0.0, down = 0.0,
width = 1.0*1.5, height = 0.88, depth = 0.12, italic=0.0,
glue = {
}
},
- [6] = { -- box末尾
- chars = {'boxbdd'},
+ [6] = { -- 感嘆符・疑問符
+ chars = { '?', '!' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5*1.5 , 0.0, 0.5 },
+ [1] = { 0.5*1.5 , 0.0, 0.5 },
+ [3] = { 0.25*1.5, 0.0, 0.25 },
+ [7] = { 0.5*1.5 , 0.0, 0.5 },
+ },
+ kern = {
+ [5] = 0.0
+ }
},
[7] = { -- 半角カナ
chars = {
- 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69,
- 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72,
- 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B,
- 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84,
- 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
- 0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96,
- 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F
+ '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
+ 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
+ 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
+ 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
+ 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
+ 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
+ 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
+ "AJ1-516", "AJ1-517", "AJ1-518", "AJ1-519", "AJ1-520", "AJ1-521", "AJ1-522",
+ "AJ1-523", "AJ1-524", "AJ1-525", "AJ1-526", "AJ1-527", "AJ1-528", "AJ1-529",
+ "AJ1-530", "AJ1-531", "AJ1-532", "AJ1-533", "AJ1-534", "AJ1-535", "AJ1-536",
+ "AJ1-537", "AJ1-538", "AJ1-539", "AJ1-540", "AJ1-541", "AJ1-542", "AJ1-543",
+ "AJ1-544", "AJ1-545", "AJ1-546", "AJ1-547", "AJ1-548", "AJ1-549", "AJ1-550",
+ "AJ1-551", "AJ1-552", "AJ1-553", "AJ1-554", "AJ1-555", "AJ1-556", "AJ1-557",
+ "AJ1-558", "AJ1-559", "AJ1-560", "AJ1-561", "AJ1-562", "AJ1-563", "AJ1-564",
+ "AJ1-565", "AJ1-566", "AJ1-567", "AJ1-568", "AJ1-569", "AJ1-570", "AJ1-571",
+ "AJ1-572", "AJ1-573", "AJ1-574", "AJ1-575", "AJ1-576", "AJ1-577", "AJ1-578",
+ "AJ1-579", "AJ1-580", "AJ1-581", "AJ1-582", "AJ1-583", "AJ1-584", "AJ1-585",
+ "AJ1-586", "AJ1-587", "AJ1-588", "AJ1-589", "AJ1-590", "AJ1-591", "AJ1-592",
+ "AJ1-593", "AJ1-594", "AJ1-595", "AJ1-596", "AJ1-597", "AJ1-598",
},
align = 'left', left = 0.0, down = 0.0,
width = 0.5*1.5, height = 0.88, depth = 0.12, italic=0.0,
[3] = { 0.25*1.5, 0.0, 0.25 }
}
},
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+
}
\ No newline at end of file
% for test
\DeclareTextFontCommand{\textix}{\fontshape{ix}\selectfont}
+\DeclareFontFamily{OT1}{hoge}{}\DeclareFontShape{OT1}{hoge}{m}{n}{<-> pagk7t}{}
+\DeclareKanjiFamily{JY3}{hoge}{}
+\DeclareFontShape{JY3}{hoge}{m}{n}{<-> file:ipaexg.ttf:jfm=ujis}{}
+
+\DeclareFontSubstitution{OT1}{cmss}{m}{n}
\makeatother
\begin{document}
正しい補正量:$0.962216\times 10 \times 0.88\times 0.25 \simeq
\directlua{tex.print(0.962216*10*0.88*0.25)}\,\textrm{pt}$
+\paragraph{fontfamily}\
+\makeatletter
+\def\TEST#1{\par{\fontfamily{#1}\selectfont あいうabc: font\hfill(#1: \k@family, \f@family)}}
+
+\gt
+\TEST{mc}
+\TEST{fuga}
+\TEST{fuga}
+\TEST{mc}
+
+{\fontfamily{hoge}\selectfont あいうabc: font\hfill(\k@family, \f@family)}
+
+{\romanfamily{hoge}\selectfont あいうabc: roman\hfill(\k@family, \f@family)}
+
+{\kanjifamily{hoge}\selectfont あいうabc: kanji\hfill(\k@family, \f@family)}
+
+\TEST{mc}
+\TEST{ptm}
+\TEST{ptm}
+
+\makeatletter
+\let\@@fontfamily=\fontfamily
+\def\fontfamily#1{(\k@family, \f@family)\@@fontfamily{#1}(\k@family, \f@family)}
+
+あい{うえお\texttt{abc}\globaldefs1あ\/い}うえお
+
+あいうえお{\tt abc}あいうえお
\end{document}
\setbox0=\hbox{あ\hbox{(}あ\setbox3=\hbox{(}\unhbox3あ}
\dumplist0}
+\vfill\eject
+\noindent{\gt\bf paragraph, hbox and math boundary}
+
+\setbox1=\vbox{\parindent19.2pt \rmlh\hsize=100pt\parfillskip=30pt
+かエ\par\global\setbox0=\lastbox}
+\dumplist0
+
+\setbox1=\vbox{\noindent\rmlh\hsize=100pt\parfillskip=30pt
+かエ\par\global\setbox0=\lastbox}
+\dumplist0
+
+\setbox0=\hbox{\rmlh かエ}
+\dumplist0
+\setbox0=\hbox{\rmlh あ$a$さ$a$か}
+\dumplist0
\end
--- /dev/null
+%#!lualatex
+\documentclass{ltjarticle}
+\begin{document}
+\noindent 漢字漢字ちょっと\textgt{チェック}
+
+「漢字←全角二分下がり?\\
+「あいうえお」\textgt{「かきくけこ」}{\Large 「}
+
+次の例は「\texttt{min10}フォントについて」(乙部厳己)中のp.~8から拝借.
+
+\def\g#1#2#3{\leavevmode\vbox{\hsize=100pt%
+\hrule height 1pt depth 0pt
+\vskip#3pt\hbox{\jfont\e=file:#1:jfm=#2 at 20pt\e あいうえお}\vskip-#3pt
+\hrule height 0pt depth 1pt}: #1, jfm=#2, yjabaselineshift=#3pt\par\bigskip}
+
+\g{KozGoPr6N-Medium.otf}{ujis}{0}
+\g{KozGoPr6N-Medium.otf}{jis}{0.7563636}
+\g{KozGoPr6N-Medium.otf}{jis}{0}
+\g{ipaexg.ttf}{ujis}{0}
+\g{ipaexg.ttf}{jis}{0.7563636}
+\g{ipaexg.ttf}{jis}{0}
+\g{hgrgm.ttc}{ujis}{0}
+\g{hgrgm.ttc}{jis}{0}
+\g{hgrgm.ttc}{jis}{0.7563636}
+
+\end{document}
\ No newline at end of file