%<*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
%</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`\}}
+ \def\item[##1]{\par\smallskip\par\hskip-\leftskip\makelabel{##1}\par}
+}{}
\makeatletter
\long\def\@makecaption#1#2{%
%</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}
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} -- 挿入するならここ
%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}
+
+%<*ja>
+ここで,\verb+\fontencoding{<encoding>}+は,引数により和文側か欧文側かの
+ どちらかが切り替わる.例えば,次の入力で最初の\verb+\fontencoding+
+ の呼び出しは和文フォントのエンコーディングを\texttt{JT3}に変更し,
+ 2回目の呼びだしでは欧文フォント側を\texttt{T1}へと変更する.
+\begin{verbatim}
+\fontencoding{JY3}\fontencoding{T1}
+\end{verbatim}
+%</ja>
+
\item For defining a Japanese font family, use \verb+\DeclareKanjiFamily+
instead of \verb+\DeclareFontFamily+.
\end{itemize}
\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&
"FB00--"FB4F&Alphabetic Presentation Forms
\end{tabular}
\end{center}
\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}
\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
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
\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 \texttt{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.
(see the description of \textsf{jcharwidowpenalty} above).
-\item[\textsf{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]
+\item[\textsf{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[\textsf{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{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{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 \textsf{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 \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 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.
\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 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 l.~4 of above example.
+ kernings, as shown in line~4 of above example.
\item The call of \verb+\inhibitglue+ in math mode is just ignored.
\end{itemize}
\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.
+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]
+...
+\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'}
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@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.
+\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 \textsf{kanjiskip}.
+\item[\textit{xkanji\_skip} (7)] Glues for \textsf{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.
\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}
+この仕様は,前節で述べた\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>
+
+
\section{Insertion of JFM glues, \textsf{kanjiskip} and \textsf{xkanjiskip}}
-This is the longest section of the document.
+\subsection{Overview}
+%<*en>
+NOT COMPLETED
+%</en>
+
+%<*ja>
+\LuaTeX-ja における和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる.
+\pTeX では次のような仕様であった:
+\begin{itemize}
+\item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
+追加する過程で行われる.
+\item \textsf{xkanjiskip}の挿入は,hboxへのパッケージングや行分割前に行われる.
+\item \textsf{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に
+「和文文字を表す2つの<char\_node>の間には\textsf{kanjiskip}がある」ものとみなされる.
+\end{itemize}
+しかし,\LuaTeX-jaでは,hboxへのパッケージングや行分割前に全ての
+\textbf{JAglue},即ちJFMグルー・\textsf{xkanjiskip}・\textsf{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.
-jfmglue.tex の内容をここに入れる
+\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
\@tempcnta\hour \multiply\@tempcnta 60\relax
\minute\time \advance\minute-\@tempcnta
\newif\if@stysize \@stysizefalse
-\newif\if@enablejfam \@enablejfamtrue
\newif\if@mathrmmc \@mathrmmcfalse
\DeclareOption{a4paper}{\setcounter{@paper}{1}%
\setlength\paperheight {297mm}%
\if@compatibility
\@mathrmmctrue
\else
- \DeclareOption{disablejfam}{\@enablejfamfalse}
+ \DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\DeclareOption{mathrmmc}{\@mathrmmctrue}
\fi
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\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
\@tempcnta\hour \multiply\@tempcnta 60\relax
\minute\time \advance\minute-\@tempcnta
\newif\if@stysize \@stysizefalse
-\newif\if@enablejfam \@enablejfamtrue
\newif\if@mathrmmc \@mathrmmcfalse
\DeclareOption{a4paper}{\setcounter{@paper}{1}%
\setlength\paperheight {297mm}%
\if@compatibility
\@mathrmmctrue
\else
- \DeclareOption{disablejfam}{\@enablejfamfalse}
+ \DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\DeclareOption{mathrmmc}{\@mathrmmctrue}
\fi
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\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{4465}
+% \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
% 全ての変更点を知りたい場合は、|jclasses.dtx| と |ltjclasses.dtx| で |diff| を
% とって下さい。
% \begin{itemize}
-% \item |disablejfam| オプションが効かなくしてあります。互換性のためにオプション
-% 自体は残してあります.
+% \item |disablejfam| オプションを無効化。もし
+% \begin{quotation}
+% |! LaTeX Error: Too many math alphabets used in version ****.|
+% \end{quotation}
+% のエラーが起こった場合は、|lualatex-math| パッケージを読み込んでみて下さい。
% \item 出力 PDF の用紙サイズが自動的に設定されるようにしてあります。
% \item \cs{if西暦}、\cs{西暦}、\cs{和暦}をそれぞれ\cs{ifSeireki}, \cs{Seireki},
% \cs{Wareki} に変更してあります。これはデフォルトの漢字のカテゴリコードが12で
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\if@enablejfam}
-% \changes{v1.1b}{1997/01/28}{Add \cs{if@enablejfam}}
-% 日本語ファミリを宣言するために用いるフラグです。
-% 互換性のために残してあるもので、実際には用いられません。
-% \begin{macrocode}
-\newif\if@enablejfam \@enablejfamtrue
-% \end{macrocode}
+% \begin{macro}{\if@mathrmmc}
% 和欧文両対応の数式文字コマンドを有効にするときに用いるフラグです。
% マクロの展開順序が複雑になるのを避けるため、
% デフォルトではfalseとしてあります。
% p\TeX では数式ファミリの数が16個だったので日本語ファミリ宣言を抑制する
% |disablejfam| オプションが用意されていましたが、Lua\TeX では Omega 拡張が
% 取り込まれて数式ファミリは256個まで使用できるため、このオプションは必要ありません。
-% しかし、互換性のために残しておきます。
+% ただし、\LaTeXe カーネルでは未だに数式ファミリの数は16個に制限されているので、
+% 実際に使用可能な数式ファミリの数を増やすためには |lualatex-math| パッケージを
+% 読み込む必要があることに注意が必要です。
%
% |mathrmmc|オプションは、
% |\mathrm|と|\mathbf|を和欧文両対応にするためのクラスオプションです。
\if@compatibility
\@mathrmmctrue
\else
- \DeclareOption{disablejfam}{\@enablejfamfalse}
+ \DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\DeclareOption{mathrmmc}{\@mathrmmctrue}
\fi
% \end{macrocode}
%
% \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{}のフォントサイズコマンドの定義をしています。
% フォントサイズコマンドの定義は、次のコマンドを用います。
%
\@tempcnta\hour \multiply\@tempcnta 60\relax
\minute\time \advance\minute-\@tempcnta
\newif\if@stysize \@stysizefalse
-\newif\if@enablejfam \@enablejfamtrue
\newif\if@mathrmmc \@mathrmmcfalse
\DeclareOption{a4paper}{\setcounter{@paper}{1}%
\setlength\paperheight {297mm}%
\if@compatibility
\@mathrmmctrue
\else
- \DeclareOption{disablejfam}{\@enablejfamfalse}
+ \DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\DeclareOption{mathrmmc}{\@mathrmmctrue}
\fi
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\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
&\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
\tabskip\z@skip\cr
}}
-\DeclareOption{disablejfam}{\@enablejfamfalse}
+\DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\newif\ifdraft
\DeclareOption{draft}{\drafttrue \setlength\overfullrule{5pt}}
\DeclareOption{final}{\draftfalse \setlength\overfullrule{0pt}}
\jisfontfalse
\newif\ifptexjis
\ptexjisfalse
-\DeclareOption{winjis}{}\DeclareOption{uplatex}{} % These 2 options are ignored.
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\@currname}{The class option 'winjis' is obsolete}}
+\DeclareOption{uplatex}{%
+ \ClassWarningNoLine{\@currname}{The class option 'uplatex' is obsolete}}
\DeclareOption{mingoth}{\mingothtrue}
\DeclareOption{ptexjis}{\ptexjistrue}
\DeclareOption{jis}{\jisfonttrue}
\hskip -\@tempskipa
\else
\clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
+ \everypar{}%
+ \fi}%
\else
\par \nobreak
\vskip \@tempskipa
\parindent 1\zw
\noindent
\llap{\@makefnmark\hskip0.3\zw}#1}
-\def\@inhibitglue{%
- \futurelet\@let@token\@@inhibitglue}
-\def\@@inhibitglue{%
- \ifx\@let@token「
- \inhibitglue
- \else
- \ifx\@let@token(
- \inhibitglue
- \else
- \ifx\@let@token『
- \inhibitglue
- \else
- \ifx\@let@token[
- \inhibitglue
- \fi
- \fi
- \fi
- \fi}
-\let\everyparhook=\@inhibitglue
-\AtBeginDocument{\everypar{\everyparhook}}
-\def\@doendpe{%
- \@endpetrue
- \def\par{%
- \@restorepar\everypar{\everyparhook}\par\@endpefalse}%
- \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
-\def\@item[#1]{%
- \if@noparitem
- \@donoparitem
- \else
- \if@inlabel
- \indent \par
- \fi
- \ifhmode
- \unskip\unskip \par
- \fi
- \if@newlist
- \if@nobreak
- \@nbitem
- \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep
- \addvspace{-\parskip}%
- \fi
- \else
- \addpenalty\@itempenalty
- \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{%
- \@minipagefalse
- \global\@newlistfalse
- \if@inlabel
- \global\@inlabelfalse
- {\setbox\z@\lastbox
- \ifvoid\z@
- \kern-\itemindent
- \fi}%
- \box\@labels
- \penalty\z@
- \fi
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
- \if@noitemarg
- \@noitemargfalse
- \if@nmbrlist
- \refstepcounter\@listctr
- \fi
- \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels\hbox{%
- \unhbox\@labels
- \hskip \itemindent
- \hskip -\labelwidth
- \hskip -\labelsep
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else
- \hbox to\labelwidth {\unhbox\@tempboxa}%
- \fi
- \hskip \labelsep}%
- \ignorespaces}
-\def\@afterheading{%
- \@nobreaktrue
- \everypar{%
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}}
-\def\@gnewline #1{%
- \ifvmode
- \@nolnerr
- \else
- \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
- \inhibitglue \ignorespaces
- \fi}
\def\Shou#1{\hbox{$\m@th$%
\csname S@\f@size\endcsname
\fontsize\sf@size\z@
&\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
\tabskip\z@skip\cr
}}
-\DeclareOption{disablejfam}{\@enablejfamfalse}
+\DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\newif\ifdraft
\DeclareOption{draft}{\drafttrue \setlength\overfullrule{5pt}}
\DeclareOption{final}{\draftfalse \setlength\overfullrule{0pt}}
\jisfontfalse
\newif\ifptexjis
\ptexjisfalse
-\DeclareOption{winjis}{}\DeclareOption{uplatex}{} % These 2 options are ignored.
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\@currname}{The class option 'winjis' is obsolete}}
+\DeclareOption{uplatex}{%
+ \ClassWarningNoLine{\@currname}{The class option 'uplatex' is obsolete}}
\DeclareOption{mingoth}{\mingothtrue}
\DeclareOption{ptexjis}{\ptexjistrue}
\DeclareOption{jis}{\jisfonttrue}
\hskip -\@tempskipa
\else
\clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
+ \everypar{}%
+ \fi}%
\else
\par \nobreak
\vskip \@tempskipa
\parindent 1\zw
\noindent
\llap{\@makefnmark\hskip0.3\zw}#1}
-\def\@inhibitglue{%
- \futurelet\@let@token\@@inhibitglue}
-\def\@@inhibitglue{%
- \ifx\@let@token「
- \inhibitglue
- \else
- \ifx\@let@token(
- \inhibitglue
- \else
- \ifx\@let@token『
- \inhibitglue
- \else
- \ifx\@let@token[
- \inhibitglue
- \fi
- \fi
- \fi
- \fi}
-\let\everyparhook=\@inhibitglue
-\AtBeginDocument{\everypar{\everyparhook}}
-\def\@doendpe{%
- \@endpetrue
- \def\par{%
- \@restorepar\everypar{\everyparhook}\par\@endpefalse}%
- \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
-\def\@item[#1]{%
- \if@noparitem
- \@donoparitem
- \else
- \if@inlabel
- \indent \par
- \fi
- \ifhmode
- \unskip\unskip \par
- \fi
- \if@newlist
- \if@nobreak
- \@nbitem
- \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep
- \addvspace{-\parskip}%
- \fi
- \else
- \addpenalty\@itempenalty
- \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{%
- \@minipagefalse
- \global\@newlistfalse
- \if@inlabel
- \global\@inlabelfalse
- {\setbox\z@\lastbox
- \ifvoid\z@
- \kern-\itemindent
- \fi}%
- \box\@labels
- \penalty\z@
- \fi
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
- \if@noitemarg
- \@noitemargfalse
- \if@nmbrlist
- \refstepcounter\@listctr
- \fi
- \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels\hbox{%
- \unhbox\@labels
- \hskip \itemindent
- \hskip -\labelwidth
- \hskip -\labelsep
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else
- \hbox to\labelwidth {\unhbox\@tempboxa}%
- \fi
- \hskip \labelsep}%
- \ignorespaces}
-\def\@afterheading{%
- \@nobreaktrue
- \everypar{%
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}}
-\def\@gnewline #1{%
- \ifvmode
- \@nolnerr
- \else
- \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
- \inhibitglue \ignorespaces
- \fi}
\def\Shou#1{\hbox{$\m@th$%
\csname S@\f@size\endcsname
\fontsize\sf@size\z@
% -----------------------------------------
%
% \fi
-% \CheckSum{5224}
+% \CheckSum{5037}
%% \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
% \end{tabular}
% \end{quote}
%
-% |ltjclasses| と大きく違うのは以下の点です。
+% |ltjclasses| と違うのは以下の点です。
%
% \paragraph{サイズオプションの扱いが違う}
%
% 43ポイント,12Q,14Qの指定を可能にしています。
%
% \subsection{\texttt{jsclasses.dtx} からの主な変更点}
-% 全ての変更点を知りたい場合は、|jsclasses.dtx| と |ltjsclasses.dtx| で |diff| を
+% 全ての変更点を知りたい場合は,|jsclasses.dtx| と |ltjsclasses.dtx| で |diff| を
% とって下さい。
-% なお,オプションで無効にしたものがいくつかありますが,互換性のために
-% オプション自体は残してあります(つまり,削除されたオプションが指定されていても
-% コンパイルは通る)。
% \begin{itemize}
-% \item フォントメトリック関係のオプション |winjis| は単に無視されます.
-% \item 標準では|jfm-ujis.lua|(Lua\TeX-ja標準のメトリック,OTFパッケージのものがベース)を使用します.
-% \item up\TeX 関係のオプションを削除してあります。
-% \item |disablejfam| オプションが無効になっています。
-% ←本当にそれでいい? \LaTeX カーネルレベルではまだ16個のままのような気がします.
+% \item フォントメトリック関係のオプション |winjis| は単に無視されます。
+% \item 標準では |jfm-ujis.lua|(Lua\TeX-ja標準のメトリック,OTFパッケージのものがベース)を使用します。
+% \item |uplatex| オプションを削除してあります。
+% \item |disablejfam| オプションが無効になっています。もし
+% \begin{quotation}
+% |! LaTeX Error: Too many math alphabets used in version ****.|
+% \end{quotation}
+% のエラーが起こった場合は,|lualatex-math| パッケージを読み込んでみて下さい。
% \item |papersize| オプションの指定に関わらず PDF のページサイズは適切に
% 設定されます。
-% \item 「\texttt{amsmath} との衝突の回避」のコードは,上流で既に対処されている上に
+% \item Lua\TeX-ja 同梱のメトリックを用いる限りは,段落の頭にグルーは挿入されません。
+% そのため,オリジナルの |jsclasses.dtx| 内にあったhack(|\everyparhook|)は不要になったので,
+% 削除しました。
+% \item 「\texttt{amsmath} との衝突の回避」のコードは,上流で既に対処されているうえ,
% これがあると |grfext.sty| を読み込んだ際にエラーを引き起こすので削除しました。
% \item |\小|,|\上小|,|\if西暦|,|\西暦|,|\和暦|をそれぞれ
% |\Shou|, |\UeShou|, |\ifSeireki|, |\Seireki|, |\Wareki| に変更してあります。
%
% p\TeX では数式中では16通りのフォントしか使えませんでしたが,Lua\TeX では
% Omega 拡張が取り込まれていて256通りのフォントが使えます。
-% そのためこのオプションは無効にしてありますが,互換性のためにオプション自体は
-% 残しておきます。
+% ただし,\LaTeXe カーネルでは未だに数式ファミリの数は16個に制限されているので,
+% 実際に使用可能な数式ファミリの数を増やすためには |lualatex-math| パッケージを
+% 読み込む必要があることに注意が必要です。
%
% \begin{macrocode}
-\DeclareOption{disablejfam}{\@enablejfamfalse}
+\DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
% \end{macrocode}
%
% \paragraph{ドラフト}
% というオプションを指定します。
% p\TeX でよく利用される \texttt{jis} フォントメトリックと互換のメトリックを使いたい場合は,
% \texttt{ptexjis} というオプションを指定します。
-% \texttt{winjis} メトリックは用済みのため,\texttt{winjis} オプションは無視されます.
+% \texttt{winjis} メトリックは用済みのため,\texttt{winjis} オプションは無視されます。
%
% \begin{macrocode}
\newif\ifmingoth
\jisfontfalse
\newif\ifptexjis
\ptexjisfalse
-\DeclareOption{winjis}{}\DeclareOption{uplatex}{} % These 2 options are ignored.
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\@currname}{The class option 'winjis' is obsolete}}
+\DeclareOption{uplatex}{%
+ \ClassWarningNoLine{\@currname}{The class option 'uplatex' is obsolete}}
\DeclareOption{mingoth}{\mingothtrue}
\DeclareOption{ptexjis}{\ptexjistrue}
\DeclareOption{jis}{\jisfonttrue}
% \pTeX (アスキーが日本語化した\TeX )では,例えば従来のフォントメトリック
% \texttt{min10} やJISフォントメトリックでは「公称10ポイントの和文フォントは,
% 実際には9.62216ptで出力される(メトリック側で0.962216倍される)」という
-% 仕様になっています.
-% 一方,Lua\TeX-jaの提供するメトリックでは,そのようなことはありません.
-% 公称10ポイントの和文フォントは,10ポイントで出力されます.
+% 仕様になっています。
+% 一方,Lua\TeX-jaの提供するメトリックでは,そのようなことはありません。
+% 公称10ポイントの和文フォントは,10ポイントで出力されます。
%
% この|ltjsclasses|でも,派生元の|jsclasses|と同じように,
% この公称10ポイントのフォントをここでは13級に縮小して
% \end{macrocode}
%%
% Lua\TeX-jaでは和文組版に伴うグルーはノードベースで挿入するようになり,また
-% 欧文・和文間のグルーとイタリック補正は干渉しないようになりました.
+% 欧文・和文間のグルーとイタリック補正は干渉しないようになりました。
% まだ「和文の斜体」についてはLua\LaTeX カーネル側でまともな対応がされていませんが,
-% |jsclasses.dtx|で行われていた|\textmc|, |\textgt|の再定義は不要のように思われます.
+% |jsclasses.dtx|で行われていた|\textmc|, |\textgt|の再定義は不要のように思われます。
%
% 新クラスでも数式内で日本語が使えるようにしました。
%
\@tempskipa -\@tempskipa \@afterindentfalse
\fi
\if@nobreak
-% \everypar{\everyparhook}% これは間違い
\everypar{}%
\else
\addpenalty\@secpenalty
%
% |\@sect| と |\@xsect| は,
% 前のアキがちょうどゼロの場合にもうまくいくように,多少変えてあります。
-% |\everyparhook| も挿入しています。
%
% \begin{macrocode}
\def\@sect#1#2#3#4#5#6[#7]#8{%
% 二つ挿入した |\everyparhook| のうち後者が |\paragraph| 類の後で2回実行され,
% それ以降は前者が実行されます。
%
+% [2011-10-05] Lua\TeX-jaでは|\everyparhook|は不要なので削除。
+%
% \begin{macrocode}
\def\@xsect#1{%
% 見出しの後ろの空きを \@tempskipa にセット
\hskip -\@tempskipa
\else
\clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
+ \everypar{}%
+ \fi}%
\else
\par \nobreak
\vskip \@tempskipa
% \end{macrocode}
% \end{macro}
%
-% \section{段落の頭へのグルー挿入禁止}
-%
-% 段落頭のかぎかっこなどを見かけ1字半下げから全角1字下げに直します。
-%
-% \begin{macrocode}
-\def\@inhibitglue{%
- \futurelet\@let@token\@@inhibitglue}
-\def\@@inhibitglue{%
- \ifx\@let@token「
- \inhibitglue
- \else
- \ifx\@let@token(
- \inhibitglue
- \else
- \ifx\@let@token『
- \inhibitglue
- \else
- \ifx\@let@token[
- \inhibitglue
- \fi
- \fi
- \fi
- \fi}
-\let\everyparhook=\@inhibitglue
-\AtBeginDocument{\everypar{\everyparhook}}
-% \end{macrocode}
-%
-% これだけではいけないようです。あちこちに |\everypar| を初期化するコマンドが
-% 隠されていました。
-%
-% まず,環境の直後の段落です。
-%
-% \begin{macrocode}
-\def\@doendpe{%
- \@endpetrue
- \def\par{%
- \@restorepar\everypar{\everyparhook}\par\@endpefalse}%
- \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
-% \end{macrocode}
-%
-% |\item| 命令の直後です。
-%
-% \begin{macrocode}
-\def\@item[#1]{%
- \if@noparitem
- \@donoparitem
- \else
- \if@inlabel
- \indent \par
- \fi
- \ifhmode
- \unskip\unskip \par
- \fi
- \if@newlist
- \if@nobreak
- \@nbitem
- \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep
- \addvspace{-\parskip}%
- \fi
- \else
- \addpenalty\@itempenalty
- \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{%
- \@minipagefalse
- \global\@newlistfalse
- \if@inlabel
- \global\@inlabelfalse
- {\setbox\z@\lastbox
- \ifvoid\z@
- \kern-\itemindent
- \fi}%
- \box\@labels
- \penalty\z@
- \fi
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
- \if@noitemarg
- \@noitemargfalse
- \if@nmbrlist
- \refstepcounter\@listctr
- \fi
- \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels\hbox{%
- \unhbox\@labels
- \hskip \itemindent
- \hskip -\labelwidth
- \hskip -\labelsep
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else
- \hbox to\labelwidth {\unhbox\@tempboxa}%
- \fi
- \hskip \labelsep}%
- \ignorespaces}
-% \end{macrocode}
-%
-% 二つ挿入した |\everyparhook| のうち後者が |\section| 類の直後に2回,
-% 前者が3回目以降に実行されます。
-%
-% \begin{macrocode}
-\def\@afterheading{%
- \@nobreaktrue
- \everypar{%
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}}
-% \end{macrocode}
-%
-% |\@gnewline| についてはちょっと複雑な心境です。
-% もともとのp\LaTeXe は段落の頭にグルーが入る方で統一されていました。
-% しかし |\\| の直後にはグルーが入らず,不統一でした。
-% そこで |\\| の直後にもグルーを入れるように直していただいた経緯があります。
-% しかし,ここでは逆にグルーを入れない方で統一したいので,
-% また元に戻してしまいました。
-%
-% しかし単に戻すだけでも駄目みたいなので,ここでも最後にグルーを消しておきます。
-%
-% \begin{macrocode}
-\def\@gnewline #1{%
- \ifvmode
- \@nolnerr
- \else
- \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
- \inhibitglue \ignorespaces
- \fi}
-% \end{macrocode}
-%
% \section{いろいろなロゴ}
%
% \LaTeX 関連のロゴを作り直します。
&\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
\tabskip\z@skip\cr
}}
-\DeclareOption{disablejfam}{\@enablejfamfalse}
+\DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\newif\ifdraft
\DeclareOption{draft}{\drafttrue \setlength\overfullrule{5pt}}
\DeclareOption{final}{\draftfalse \setlength\overfullrule{0pt}}
\jisfontfalse
\newif\ifptexjis
\ptexjisfalse
-\DeclareOption{winjis}{}\DeclareOption{uplatex}{} % These 2 options are ignored.
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\@currname}{The class option 'winjis' is obsolete}}
+\DeclareOption{uplatex}{%
+ \ClassWarningNoLine{\@currname}{The class option 'uplatex' is obsolete}}
\DeclareOption{mingoth}{\mingothtrue}
\DeclareOption{ptexjis}{\ptexjistrue}
\DeclareOption{jis}{\jisfonttrue}
\hskip -\@tempskipa
\else
\clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
+ \everypar{}%
+ \fi}%
\else
\par \nobreak
\vskip \@tempskipa
\parindent 1\zw
\noindent
\llap{\@makefnmark\hskip0.3\zw}#1}
-\def\@inhibitglue{%
- \futurelet\@let@token\@@inhibitglue}
-\def\@@inhibitglue{%
- \ifx\@let@token「
- \inhibitglue
- \else
- \ifx\@let@token(
- \inhibitglue
- \else
- \ifx\@let@token『
- \inhibitglue
- \else
- \ifx\@let@token[
- \inhibitglue
- \fi
- \fi
- \fi
- \fi}
-\let\everyparhook=\@inhibitglue
-\AtBeginDocument{\everypar{\everyparhook}}
-\def\@doendpe{%
- \@endpetrue
- \def\par{%
- \@restorepar\everypar{\everyparhook}\par\@endpefalse}%
- \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
-\def\@item[#1]{%
- \if@noparitem
- \@donoparitem
- \else
- \if@inlabel
- \indent \par
- \fi
- \ifhmode
- \unskip\unskip \par
- \fi
- \if@newlist
- \if@nobreak
- \@nbitem
- \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep
- \addvspace{-\parskip}%
- \fi
- \else
- \addpenalty\@itempenalty
- \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{%
- \@minipagefalse
- \global\@newlistfalse
- \if@inlabel
- \global\@inlabelfalse
- {\setbox\z@\lastbox
- \ifvoid\z@
- \kern-\itemindent
- \fi}%
- \box\@labels
- \penalty\z@
- \fi
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
- \if@noitemarg
- \@noitemargfalse
- \if@nmbrlist
- \refstepcounter\@listctr
- \fi
- \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels\hbox{%
- \unhbox\@labels
- \hskip \itemindent
- \hskip -\labelwidth
- \hskip -\labelsep
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else
- \hbox to\labelwidth {\unhbox\@tempboxa}%
- \fi
- \hskip \labelsep}%
- \ignorespaces}
-\def\@afterheading{%
- \@nobreaktrue
- \everypar{%
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}}
-\def\@gnewline #1{%
- \ifvmode
- \@nolnerr
- \else
- \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
- \inhibitglue \ignorespaces
- \fi}
\def\Shou#1{\hbox{$\m@th$%
\csname S@\f@size\endcsname
\fontsize\sf@size\z@
&\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
\tabskip\z@skip\cr
}}
-\DeclareOption{disablejfam}{\@enablejfamfalse}
+\DeclareOption{disablejfam}{%
+ \ClassWarningNoLine{\@currname}{The class option 'disablejfam' is obsolete}}
\newif\ifdraft
\DeclareOption{draft}{\drafttrue \setlength\overfullrule{5pt}}
\DeclareOption{final}{\draftfalse \setlength\overfullrule{0pt}}
\jisfontfalse
\newif\ifptexjis
\ptexjisfalse
-\DeclareOption{winjis}{}\DeclareOption{uplatex}{} % These 2 options are ignored.
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\@currname}{The class option 'winjis' is obsolete}}
+\DeclareOption{uplatex}{%
+ \ClassWarningNoLine{\@currname}{The class option 'uplatex' is obsolete}}
\DeclareOption{mingoth}{\mingothtrue}
\DeclareOption{ptexjis}{\ptexjistrue}
\DeclareOption{jis}{\jisfonttrue}
\hskip -\@tempskipa
\else
\clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
+ \everypar{}%
+ \fi}%
\else
\par \nobreak
\vskip \@tempskipa
\parindent 1\zw
\noindent
\llap{\@makefnmark\hskip0.3\zw}#1}
-\def\@inhibitglue{%
- \futurelet\@let@token\@@inhibitglue}
-\def\@@inhibitglue{%
- \ifx\@let@token「
- \inhibitglue
- \else
- \ifx\@let@token(
- \inhibitglue
- \else
- \ifx\@let@token『
- \inhibitglue
- \else
- \ifx\@let@token[
- \inhibitglue
- \fi
- \fi
- \fi
- \fi}
-\let\everyparhook=\@inhibitglue
-\AtBeginDocument{\everypar{\everyparhook}}
-\def\@doendpe{%
- \@endpetrue
- \def\par{%
- \@restorepar\everypar{\everyparhook}\par\@endpefalse}%
- \everypar{{\setbox\z@\lastbox}\everypar{\everyparhook}\@endpefalse\everyparhook}}
-\def\@item[#1]{%
- \if@noparitem
- \@donoparitem
- \else
- \if@inlabel
- \indent \par
- \fi
- \ifhmode
- \unskip\unskip \par
- \fi
- \if@newlist
- \if@nobreak
- \@nbitem
- \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep
- \addvspace{-\parskip}%
- \fi
- \else
- \addpenalty\@itempenalty
- \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{%
- \@minipagefalse
- \global\@newlistfalse
- \if@inlabel
- \global\@inlabelfalse
- {\setbox\z@\lastbox
- \ifvoid\z@
- \kern-\itemindent
- \fi}%
- \box\@labels
- \penalty\z@
- \fi
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}%
- \if@noitemarg
- \@noitemargfalse
- \if@nmbrlist
- \refstepcounter\@listctr
- \fi
- \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels\hbox{%
- \unhbox\@labels
- \hskip \itemindent
- \hskip -\labelwidth
- \hskip -\labelsep
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else
- \hbox to\labelwidth {\unhbox\@tempboxa}%
- \fi
- \hskip \labelsep}%
- \ignorespaces}
-\def\@afterheading{%
- \@nobreaktrue
- \everypar{%
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{\everyparhook}%
- \fi\everyparhook}}
-\def\@gnewline #1{%
- \ifvmode
- \@nolnerr
- \else
- \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
- \inhibitglue \ignorespaces
- \fi}
\def\Shou#1{\hbox{$\m@th$%
\csname S@\f@size\endcsname
\fontsize\sf@size\z@
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 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
local function handle_list_head()
if Np.id == id_jglyph or (Np.id==id_pbox and Np.met) then
if not ihb_flag then
- local g = new_jfm_glue(Np, find_char_class('boxbdd',Np.met), Np.class)
+ 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
-- 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')
-- hbox from \parindent is skipped.
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
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}')
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
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
\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