diff options
author | Norbert Preining <norbert@preining.info> | 2019-10-20 03:00:50 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-10-20 03:00:50 +0000 |
commit | 8fa38617045e3aa88b163fdc2fd683d72559b6d5 (patch) | |
tree | a0cf4b4ab921796fdd274f691910733d4dfb97d3 /info/ptex-manual/ptex-manual.tex | |
parent | 13a044b932f3f8d72791ca88eda528bdcbadcacc (diff) |
CTAN sync 201910200300
Diffstat (limited to 'info/ptex-manual/ptex-manual.tex')
-rw-r--r-- | info/ptex-manual/ptex-manual.tex | 608 |
1 files changed, 384 insertions, 224 deletions
diff --git a/info/ptex-manual/ptex-manual.tex b/info/ptex-manual/ptex-manual.tex index f48e8bc825..176624be85 100644 --- a/info/ptex-manual/ptex-manual.tex +++ b/info/ptex-manual/ptex-manual.tex @@ -1,6 +1,9 @@ %#!make ptex-manual.pdf \documentclass[a4paper,11pt,nomag]{jsarticle} \usepackage[textwidth=42zw,lines=40,truedimen,centering]{geometry} + +%%%%%%%%%%%%%%%% +% additional packages \usepackage{amsmath} \usepackage{array}\usepackage[all]{xy} \SelectTips{cm}{} @@ -15,89 +18,21 @@ \usepackage{hologo} \usepackage{makeidx}\makeindex +% common +\usepackage{ptex-manual} + +\def\code#1{\texttt{#1}} + %%%%%%%%%%%%%%%% -% preamble copied from eptexdoc.tex \makeatletter -\def\epTeX{$\varepsilon$-\pTeX}\def\eTeX{$\varepsilon$-\TeX} -\def\eupTeX{$\varepsilon$-\upTeX}\def\upTeX{u\pTeX} -\def\pTeX{p\kern-.10em\TeX} -\def\headfont{\normalfont\mathversion{bold}\sffamily} -\def\.#1{\texorpdfstring{% - \leavevmode\hbox{\texttt{\textbackslash#1}}\ifmmode\else\textcompwordmark\fi}{\textbackslash #1}} -\let\orig@cs=\. -\def\ind@cs#1{\orig@cs{#1}\indcs{#1}} -\def\indcs#1{\index{{\texttt{\textbackslash #1}}}} -\newlist{cslist}{description}1 -\setlist[cslist]{% - itemsep=\medskipamount,listparindent=1zw, - font=\normalfont\mdseries, leftmargin=2zw, - before=\advance\@listdepth\@ne, - after=\advance\@listdepth\m@ne -} -\def\csitem[#1]{\item[\llap{$\blacktriangleright$~}\let\.=\ind@cs#1] - \leavevmode\par\nopagebreak} -\def\emph#1{{\bfseries\sffamily\gtfamily\mathversion{bold}#1}} \setlist{leftmargin=2zw} -\setlist[description]{labelwidth=2zw,labelindent=1zw} +\setlist[description]{labelwidth=2zw,labelindent=1zw,topsep=\medskipamount} -\catcode`\<=13 -\xspcode`\\=3 -\xspcode`\*=3 -\xspcode`\-=3 -\xspcode23=3 % \textcompwordmark -\def<#1>{\ensuremath{\langle\hbox{\normalfont\textit{#1}}\rangle}} -\def\hex#1{\ifmmode\mbox\fi{\texttt{"#1}}}%" - -\font\man=manfnt at 10pt -\def\dbend{\raise0pt\hbox{\man\char'177}} -\AtBeginDvi{\special{pdf:mapfile otf-ipaex.map}} \def\>{\ifhmode\hskip\xkanjiskip\fi} -\normalsize -\bigskipamount=\baselineskip -\medskipamount=.5\baselineskip -\smallskipamount=.25\baselineskip - -\usepackage{etoolbox} -\patchcmd\@verbatim\@totalleftmargin{\dimexpr\@totalleftmargin+2zw\relax}{}{} -\patchcmd\quote{\list{}}{\par\list{\topsep\medskipamount}}{}{} -\patchcmd\@verbatim{\trivlist}{\trivlist\addvspace\medskipamount\noautoxspacing}{}{} -\patchcmd\endverbatim{\endtrivlist}{\endtrivlist\addvspace\medskipamount}{}{} -\expandafter\let\csname endverbatim*\endcsname =\endverbatim -\patchcmd\verb{\ifmmode\hbox\else\leavevmode\vadjust{}\fi\bgroup} - {\ifmmode\else\leavevmode\vadjust{}\fi\hbox - \bgroup\textcompwordmark\noautoxspacing\noautospacing}{}{} -\patchcmd\verb@egroup{\egroup}{\egroup\textcompwordmark}{}{} -\newenvironment{dangerous}{% - \ifnum\@listdepth>\z@ - \GenericError{}{Do not use `dangerous' environment inside any list}{}{} - \fi - \par\addvspace\medskipamount - \@tempdima=\dimexpr\textwidth-2zw\relax\small - \bigskipamount=\baselineskip - \medskipamount=.5\baselineskip - \smallskipamount=.25\baselineskip - \divide\@tempdima by\dimexpr1zw\relax\@tempcnta=\@tempdima - \leftskip=\dimexpr\textwidth-\@tempcnta zw\relax - \@totalleftmargin\dimexpr\leftskip+0zw - \linewidth=\dimexpr\@tempcnta zw-0zw - \parindent1zw\noindent\kern-\leftskip\hbox to\leftskip{\dbend\hss}% - \everypar{\everypar{}}\ignorespaces -}{\par\addvspace\medskipamount} - -\renewenvironment{theindex}{% - \def\presectionname{}\def\postsectionname{}% - \section*{\indexname} - \@mkboth{\indexname}{\indexname}% - \plainifnotempty % \thispagestyle{plain} - \parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem - \raggedright - \begin{multicols}{2} - }{ - \end{multicols} - \clearpage - } + +\def\tsp{_{\mbox{\fontsize\sf@size\z@\ttfamily \char32}}} +\def\tpar{_{\mbox{\fontsize\sf@size\z@\ttfamily \string\par}}} +\def\tign{_{\mbox{\fontsize\sf@size\z@\selectfont --}}} \def\tableautorefname{表} \def\figureautorefname{図} @@ -107,59 +42,35 @@ \expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}% \endgroup\textcompwordmark %欧文ゴースト } - -\long\def\@footnotetext{% - \insert\footins\bgroup - \normalfont\footnotesize - \interlinepenalty\interfootnotelinepenalty - \splittopskip\footnotesep - \splitmaxdepth \dp\strutbox \floatingpenalty \@MM - \hsize\columnwidth \@parboxrestore - \protected@edef\@currentlabel{% - \csname p@footnote\endcsname\@thefnmark - }% - \color@begingroup - \@makefntext{% - \rule\z@\footnotesep\ignorespaces}% - \futurelet\next\fo@t} -\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t - \else \let\next\f@t\fi \next} -\def\f@@t{\bgroup\aftergroup\@foot\let\next} -\def\f@t#1{#1\@foot} -\def\@foot{\@finalstrut\strutbox\color@endgroup\egroup - \ifx\pltx@foot@penalty\@undefined\else - \ifhmode\null\fi - \ifnum\pltx@foot@penalty=\z@\else - \penalty\pltx@foot@penalty - \pltx@foot@penalty\z@ - \fi - \fi} - -\def\tsp{_{\mbox{\fontsize\sf@size\z@\ttfamily \char32}}} -\def\tpar{_{\mbox{\fontsize\sf@size\z@\ttfamily \string\par}}} -\def\tign{_{\mbox{\fontsize\sf@size\z@\selectfont --}}} - +\makeatother \usepackage{shortvrb} \MakeShortVerb*{|} -%%%%%%%% macros for index (simplified from doc.sty) -\newif\ifscan@allowed -\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus1fill}% -\def\pfill{\unskip~\dotfill\nobreak} -\makeatother %%%%%%%%%%%%%%%% +% logos +\def\epTeX{$\varepsilon$-\pTeX}\def\eTeX{$\varepsilon$-\TeX} +\def\eupTeX{$\varepsilon$-\upTeX}\def\upTeX{u\pTeX} +\def\pTeX{p\kern-.10em\TeX} + \def\_{\leavevmode\vrule width .45em height -.2ex depth .3ex\relax} + \frenchspacing \begin{document} \catcode`\<=13 \title{\emph{\pTeX マニュアル}} \author{日本語\TeX 開発コミュニティ\null -\thanks{\url{https://texjp.org},\ -e-mail: \texttt{issue(at)texjp.org}}} +\thanks{\url{https://texjp.org},\ e-mail: \texttt{issue(at)texjp.org}}} \date{version p\the\ptexversion.\the\ptexminorversion\ptexrevision,\today} \maketitle +本ドキュメントは,日本語\TeX 開発コミュニティ版の\pTeX% +~p\the\ptexversion.\the\ptexminorversion\ptexrevision +についてまとめたものである. +オリジナルのASCII~\pTeX\footnote{最新版はp3.1.11 (2009/08/17). + \url{https://asciidwango.github.io/ptex/}}とは +動作が異なる点もあるので注意されたい. + \emph{\large 本ドキュメントはまだまだ未完成です.} \tableofcontents @@ -173,6 +84,7 @@ e-mail: \texttt{issue(at)texjp.org}}} プリミティブを説明する. \section{\pTeX で利用可能な文字} +\label{sec:ptexchar} \TeX82で扱える文字コードの範囲は0--255であった. \pTeX ではこれに加えてJIS X 0208の文字も利用可能であり, @@ -197,18 +109,18 @@ e-mail: \texttt{issue(at)texjp.org}}} $C_1=\{\hex{81},\dots,\hex{9f}\}\cup\{\hex{e0},\dots,\hex{fc}\}$,\\ $C_2=\{\hex{40},\dots,\hex{7e}\}\cup\{\hex{80},\dots,\hex{fc}\}$. \end{description} -である. +である.この内部コードのパターンに合えば和文文字として扱われ, +合わなければ欧文文字として扱われる. +% 参考:kanji.c の |is_char_kanji| の実装 -% この内部コードのパターンに合えば和文文字として扱われ, -% 合わなければ欧文文字として扱われる,でよい? +入力ファイルの文字コードがUTF-8の場合,JIS X 0208にない文字は +UTF-8のバイト列として読み込まれる. +% このマニュアルを英語化する際は以下も参照. % http://tutimura.ath.cx/ptexlive/?ptexenc%2FDetails % http://ajt.ktug.org/assets/2008/5/1/0201tsuchimura_kuroki.pdf % https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=460 -入力ファイルの文字コードがUTF-8の場合,JIS X 0208にない文字は -UTF-8のバイト列として読み込まれる. - \pTeX の入力ファイルの文字コードは,起動時のオプション|-kanji|によって 変更できる(可能な値は|utf8|,|euc|,|sjis|,|jis|). 同様に,内部コードは|-kanji-internal|オプションによって変更できる @@ -252,6 +164,28 @@ virtual modeでは,起動直後にバナーを表示してから,フォー [TODO] \pTeX の内部コードはEUC-JPかShift-JISのいずれかであるが, DVIファイル内の和文文字コードとしてはJISコードを出力する. +ただし,|\special|命令の文字列は内部コードで符号化されたバイト列として書き出される. + +\begin{dangerous} + 以上で述べた「内部コードの範囲」はJIS~X~0213の漢字集合1面(Shift-JISの場合は2面も)を + まるまる含んでいるが,\emph{\pTeX はJIS~X~0213には対応していない.} + + JIS~X~0213で規定された「85区1点」の位置の文字を入力ファイル中に書いた場合, + \begin{description} + \item[文字コードがEUC,~Shift-JISの場合] DVIには29985~(\texttt{"7521})%" + 番の文字として出力される. + \item[文字コードがJISの場合] 「\verb+! Missing $ inserted.+」というエラーが発生する. + これは,\pTeX がJIS~X~0213の1面を指示するエスケープシーケンス + \texttt{1B 24 28 4F} (JIS2000), \texttt{1B 24 28 51} (JIS2004)を認識せず, + \texttt{24}~(\texttt{\$})を数式モード区切りと解釈してしまうためである. + \item[文字コードがUTF-8の場合] UTF-8のバイト列\texttt{E6 93 84}として読み込まれる. + \end{description} + なお,\.{char}により「\verb+\char\kuten"5521+」%" + のようにして区点コードを指定した場合は,DVIには29985~(\texttt{"7521})%" + 番の文字として出力される. + また,DVIに文字として出力されたからといって,それをPostScriptやPDFに変換したときに + 意図通りに出力されるかは全くの別問題である. +\end{dangerous} \section{文字コードの取得と指定} @@ -294,7 +228,6 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \emph{和文文字直後の改行は何も発生しない}.和文文字の直後にグループ開始・終了が来て 行が終わった場合も同様である. - \begin{figure}[b] \small \[ @@ -325,11 +258,14 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \ar@(d,r)[]_{1,2,9\tign,J} \ar[d]_-{5,14} &*\txt{}\\ - *\txt{}&*\txt{}&*\txt{}&*\txt{} -% + *\txt{}&*\txt{}&*\txt{}&*\txt{} +% } \] \begin{itemize} + \item 状態\textit{N} (new line),状態\textit{M} (middle of line), + 状態\textit{S} (skipping spaces)は\TeX82と同じであるが, + 新たに状態\textit{K} (middle of kanji)が追加されている. \item 矢印の上下に書いた数字はカテゴリーコードを表す. \item ``E''はカテゴリーコード3, 4, 6, 8, 11, 12の文字達を, ``J''は和文文字を表す. @@ -338,10 +274,10 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \item 図中央の「制御綴読み取り」の後で$S$,~$M$どちらの状態になるかは, 次のように決まっている: \begin{itemize} - \item 制御綴が「|\ |」のようなカテゴリーコード10の文字 - からなるコントロールシンボルのときは状態$S$に遷移する. - \item 制御綴が「|\#|」「|\】|」のようなその他のコントロールシンボルのときは状態$M$に遷移する. - \item 制御綴がコントロールワードのときは状態$S$に遷移する. + \item 制御綴が「|\ |」のようなカテゴリーコード10の文字 + からなるコントロールシンボルのときは状態$S$に遷移する. + \item 制御綴が「|\#|」「|\】|」のようなその他のコントロールシンボルのときは状態$M$に遷移する. + \item 制御綴がコントロールワードのときは状態$S$に遷移する. \end{itemize} \end{itemize} \caption{\pTeX の入力プロセッサの状態遷移図} @@ -352,19 +288,13 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \begin{itemize} \item \TeX82では,「複数文字からなる命令」(コントロールワード)には カテゴリーコードが11~($\mathit{letter}$)の文字しか使用できないことになっていたが, - \pTeX では16,~17の和文文字も合わせて使用することができる. + \pTeX ではカテゴリーコードが16,~17の和文文字も合わせて使用することができる. \item 一方,カテゴリーコードが18の和文文字はコントロールワード中には使用できない. 「|\】|」のように一文字命令(コントロールシンボル)に使用することはできる - \footnote{「|\】|」のように和文文字からなるコントロールシンボルを文字列化する際に, - バージョンp3.7.2以前の\pTeX では「|\】 |」と後ろに余計な空白文字を補ってしまうという問題があった. - \TeX~Live 2018の\pTeX~p3.8.1でこの問題は修正された(\cite{build37}). - - また,バージョンp3.8.1以前では - 「|\】|」のような和文のコントロールシンボルで行が終わった場合,「|\!|」のような - 欧文コントロールシンボルと同様に改行由来の空白が追加されてしまい, - 和文文字直後の改行は何も発生しないという原則に反していたが, - こちらは\TeX~Live 2019の\pTeX~p3.8.2で修正された(\cite{build37}). - }. + \footnote{「|\】|」のような和文のコントロールシンボルで行が終わった場合, + 「|\!|」のような欧文コントロールシンボルと同様に改行由来の空白が追加されてしまい, + 和文文字直後の改行は何も発生しないという原則に反していたが, + これは\TeX~Live 2019の\pTeX~p3.8.2で修正された(\cite{build37}).}. \item 後で説明する|\jcharwidowpenalty|は,カテゴリーコードが16,~17の和文文字の前にのみ 挿入されうるもので,カテゴリーコードが18の和文文字の前には挿入されない. \item 欧文文字は\TeX82と同様に1つの文字トークンはカテゴリーコード$c$と文字コード$s$の組 @@ -376,20 +306,68 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \begin{cslist} \csitem[\.{kcatcode} <character code>=<16--18>] - |\kcatcode|はDVI中の上位バイト(すなわち,JISコードでいう区ごと)に値が設定可能である. - 初期状態では1,~2, 7--15, 85--94区の文字が18,3--6区の文字が17,16--84区の文字が16である. + 日本語\TeX 開発コミュニティ版の\pTeX では,和文文字のカテゴリーコード(|\kcatcode|)は + DVI中の上位バイトごと(すなわち,JISコードでいう区ごと)に値が設定可能である + \footnote{% + オリジナルのASCII~\pTeX では,内部コードの上位バイトごとに値が設定可能であった. + すなわち,内部コードがEUC-JPのときは区ごとに設定可能であったが, + 内部コードがShift-JISのときは + $2n-1$区・$2n$区($1\leq n\leq 47$)は同一のカテゴリーコードを持つことになる. + }.初期状態では, + 1,~2, 7--15, 85--94区の文字の|\kcatcode|は18,3--6区の文字は17, + 16--84区の文字は16に設定されている. + + \pTeX においては,|\kcatcode|を上記の初期状態から変更することは想定されていない. + また,変更したとしても,(先に述べた通り)和文文字トークンにカテゴリーコードの情報は + 保存されず,和文文字が処理対象となるたびにその度に値が取得される. + + なお,\upTeX においては,|\kcatcode|は大きく仕様変更されている. \end{cslist} \begin{dangerous} - |\kcatcode|では欧文文字の文字コード(0--255)も指定することができるが, - その場合「0区扱い」として扱われる - \footnote{\pTeX の処理でこの「0区」の|\kcatcode|が使われることはないので, - 事実上は「16--18のどれかを格納可能な追加レジスタ」程度の使い方しかない.}. + 例えば,以下のコードで定義される|\X|, |\Y|で引数終端をしめす「あ」には + カテゴリーコードの情報は格納されない.そのため,|\X|,~|\Y|は全く同じ動作となる. + \begin{verbatim} + \kcatcode`あ=16 + \def\X#1あ{\message{X: #1}} + \kcatcode`あ=17 + \def\Y#1あ{\message{X: #1}} + \end{verbatim} +\end{dangerous} - なお,\upTeX においては,|\kcatcode|は大きく仕様変更されている. +\begin{dangerous} + |\kcatcode|では欧文文字の文字コード(0--255)も指定することができるが, + その場合「0区扱い」として扱われる. + \pTeX の処理でこの「0区」の|\kcatcode|が使われることはないので, + 事実上は「16--18のどれかを格納可能な追加レジスタ」程度の使い方しかない. \end{dangerous} +% [TODO] 和文文字を含む文字列化の挙動 +% "kanji character " になることも明文化したい +% どの \section に含めるかわからないのでとりあえずここに置く +|\string|や|\meaning|などの文字トークン列生成については以下の通り: +\begin{itemize} + \item 欧文文字は\TeX82と同様で,(文字コード32の空白を除き) + すべてカテゴリーコード12の文字トークンになるが, + 和文文字は16--18のいずれかのカテゴリーコードを持つ. + \item 「コントロールワードの文字列化では後ろに空白文字を補い, + コントロールシンボルの文字列化では空白文字を補わない」という点は, + 和文文字を含む場合も同様である + \footnote{「|\】|」のように和文文字からなるコントロールシンボルを文字列化する際に, + バージョンp3.7.2以前の\pTeX では「|\】 |」と後ろに余計な空白文字を補ってしまう + という問題があった. + \TeX~Live 2018の\pTeX~p3.8.1でこの問題は修正された(\cite{build37}).}. + \item 和文文字はそのカテゴリーコードによらず,|\meaning|すると + \begin{itemize} + \item \the\kcatcode`漢:\quad \texttt{\meaning 漢} + \item \the\kcatcode`あ:\quad \texttt{\meaning あ} + \item \the\kcatcode`):\quad \texttt{\meaning )} + \end{itemize} + となる. +\end{itemize} + % jtex.tex の「ラインブレーク」を簡略化 \section{禁則} +\label{sec:kinsoku} 欧文と和文の処理で見かけ上最も大きな違いは,行分割処理であろう. \begin{itemize} \item 欧文中での行分割は,ハイフネーション処理等の @@ -437,17 +415,68 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \end{cslist} |\prebreakpenalty|, |\postbreakpenalty|は -和文文字,欧文文字の区別無しに指定できるが,同一の文字に対して -両方のペナルティを同時に与えるような指定はできない +和文文字,欧文文字の区別無しに指定できる. +ただし,欧文文字に設定されたこれらのペナルティが実際に挿入されるのは +以下の場合に限られる(つまり,欧文組版だけの範囲では挿入されない). +\begin{itemize} + \item 当該の欧文文字の直後が和文文字(前方に禁則ペナルティを伴っても構わない)の + 場合に限り,その欧文文字に設定された|\postbreakpenalty|を挿入する. + \item 当該の欧文文字の直前が和文文字(後方に禁則ペナルティを伴っても構わない)の + 場合に限り,その欧文文字に設定された|\prebreakpenalty|を挿入する. +\end{itemize} +\iffalse %%%%% TL2019-hack +\begin{dangerous} +上記の「欧文文字に設定された禁則ペナルティが挿入される状況」は +欧文文字と和文文字の境界であり, +ベースライン補正(\ref{sec:baselineshift}節を参照)を実現する +|disp_node|の挿入箇所でもある. +ベースライン補正がゼロでないとき,|penalty_node|と|disp_node|の +挿入順序は以下のようにしている. % tex-jp-build@2c83eb0 +\begin{itemize} + \item 欧文→和文文字間: |disp_node| → |penalty_node| (\.{postbreakpenalty}) の順 + \item 和文→欧文文字間: |penalty_node| (\.{prebreakpenalty}) → |disp_node| の順 +\end{itemize} +\end{dangerous} +\fi %%%%% TL2019-hack + +\begin{dangerous} +禁則ペナルティはリスト構築中に自動的に挿入されるので,\.{showlists}で +\begin{verbatim} +\penalty 10000(for kinsoku) +\end{verbatim} +のように表示される. + +また,和文文字の後方に挿入された\.{postbreakpenalty}は +\.{lastpenalty}で取得できるし,\.{unpenalty}で取り除くこともできる +\footnote{以前の\pTeX では,\.{unpenalty}したはずの +和文文字の後方の\.{postbreakpenalty}が復活してしまう場合があったが, +2017-04-06のコミット(r43707)で修正された\cite{build11}.}. +% ただ,JFMグルーが後方に挿入される和文文字では上手くいかない. +% https://github.com/texjporg/tex-jp-build/issues/67 +しかし,上述のとおり,欧文文字に設定された\.{postbreakpenalty}は +後に和文文字が連続して初めて挿入されるため, +\.{lastpenalty}で取得できないし,\.{unpenalty}で取り除くこともできない. + +\.{prebreakpenalty}は和文・欧文によらず,その直後に文字ノードを伴うため, +原理的に\.{lastpenalty}で取得できないし,\.{unpenalty}で取り除くこともできない. +\end{dangerous} + +同一の文字に対して|\prebreakpenalty|と|\postbreakpenalty|の両方を +同時に与えるような指定はできない (もし両方指定された場合,後から指定されたものに置き換えられる). 禁則テーブルには256文字分の領域しかないので, 禁則ペナルティを指定できる文字数は最大で256文字までである. -禁則テーブルからの登録の削除はペナルティ値0をグローバルに(つまり,|\global|を用いて) -設定することによって行われる\footnote{0をローカルに設定した場合でも,その設定が最も外側のグループ -(\eTeX 拡張でいう|\currentgrouplevel|が0のとき)には削除される. -「ローカルで削除された場所に別の禁則ペナルティ設定がグローバルで行われる」ことが -おこらないようにするため,最外グループ以外での0設定ではテーブルから削除されない.}. +禁則テーブルからの登録の削除は以下の時に行われる\cite{build26,build57}: +\begin{itemize} + \item ペナルティ値0をグローバルに(つまり,|\global|を用いて) + 設定した場合. + \item ペナルティ値0をローカルに設定した場合でも,その設定が + 最も外側のグループ(\eTeX 拡張でいう|\currentgrouplevel|が0)の場合 + \footnote{禁則テーブルのある場所がローカルで0に設定されても,その場所に + 別の禁則ペナルティ設定がグローバルで行われることのないように, + 最外グループ以外での0設定ではテーブルから削除されない.}. +\end{itemize} \begin{cslist} \csitem[\.{jcharwidowpenalty}=<number>] @@ -484,7 +513,7 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \begin{enumerate} \item 連続する和文文字間に自動的にグルー(伸縮する空白)を挿入\label{kanjiskip} \item 和欧文間に(ソース中に空白文字を含めずとも)自動的にグルーを挿入\label{xkanjiskip} -\item 和文の約物類にグルーを設定\label{jfmglue} +\item 和文の約物類にグルーもしくはカーンを設定\label{jfmglue} \end{enumerate} 上記のうち,\ref{kanjiskip}と\ref{xkanjiskip}についてはそれぞれ \.{kanjiskip}, \.{xkanjiskip}というパラメータを設けている. @@ -495,6 +524,25 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \begin{itemize} \item メトリック由来空白の挿入処理は展開不能トークンが来たら中断 \item 展開不能トークンや欧文文字は「文字クラス0」扱い.「\verb+)\relax(+」の例 + \item 禁則ペナルティ(\.{prebreakpenalty}や\.{postbreakpenalty})と + が同じ箇所に発行される場合は + 「禁則ペナルティ→JFM由来空白」の順に発行される. +\iffalse %%%%% TL2019-hack + \item より一般に,禁則ペナルティ,JFM由来空白,ベースライン補正, + 欧文TFM由来カーンが同じ箇所に発行される場合は + 次の順になる(\ref{sec:kinsoku}節の注意の一般化).% tex-jp-build/f6f500d or 9e7e21aa + \begin{itemize} + \item 和文→欧文:禁則ペナルティ→JFM由来空白→ベースライン補正→% + 欧文TFM由来カーン + \item 欧文→和文:ベースライン補正→禁則ペナルティ→JFM由来空白 + \footnote{[TODO] \TeX~Live~2019の\pTeX~3.8.2では,欧文TFM由来カーンは欧文→和文の + 切替時には挿入されない.}% tex-jp-build/78c8605 で解決 + \end{itemize} +\fi %%%%% TL2019-hack + \item もし水平ボックス(\.{hbox})や\.{noindent}で開始された段落がJFM由来グルーで始まった + 場合は,そのグルーは取り除かれる(カーンは除かれない). + また水平ボックスがJFM由来グルーで終了した場合は,そのグルーは自然長・伸び量・縮み量の + すべてが0となる. \end{itemize} \begin{cslist} @@ -552,7 +600,7 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \csitem[\.{xkanjiskip}=<skip>] 和文文字と欧文文字の間に標準で入るグルーを設定する. 段落途中でこの値を変えても影響はなく, - 段落終了時の値が段落全体にわたって用いられる. + 段落終了時の値が段落全体にわたって用いられる. \end{cslist} \begin{dangerous} |\kanjiskip|と異なり,|\xkanjiskip|はノードの形で挿入される. @@ -585,10 +633,11 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \end{description} この|\inhibitxspcode|の設定値の情報は256文字分のテーブルに格納されている, 未登録時は3(両側許可)であるとみなされ,またグローバルに3を代入するか,あるいは - 最も外側のグループで3を代入するとテーブルからの削除が行われる. + 最も外側のグループで3を代入するとテーブルからの削除が行われる + (禁則テーブルからの削除と同様の規則). \end{cslist} \begin{dangerous} - |\xspmode|と|\inhibitxspmode|では,一見すると + |\xspcode|と|\inhibitxspcode|では,一見すると 設定値1と2の意味が反対のように感じるかもしれない.しかし,実は両者とも \begin{quote} 1: 「和文文字→欧文文字」の場合のみ許可.「欧文文字→和文文字」の場合は禁止.\\ @@ -644,10 +693,10 @@ DVIファイル内の和文文字コードとしてはJISコードを出力す \TeX~Live 2019の\pTeX~p3.8.2以降では,明確に\emph{新たなノードが追加されない限り},と 定めた(\cite{build28,forum_2566}).すなわち, \begin{enumerate} - \item |\inhibitglue|は,ノード挿入処理を行う命令 - (|\null|,~|\hskip|, |\kern|, |\vrule|,~\dots)が後ろに来た場合は無効化される. - \item 一方,|\relax|やレジスタへの代入などのノードを作らない処理では無効化されない. - \item |\inhibitglue|の効果は別レベルのリストには波及しない. + \item |\inhibitglue|は,ノード挿入処理を行う命令 + (|\null|,~|\hskip|, |\kern|, |\vrule|,~\dots)が後ろに来た場合は無効化される. + \item 一方,|\relax|やレジスタへの代入などのノードを作らない処理では無効化されない. + \item |\inhibitglue|の効果は別レベルのリストには波及しない. \end{enumerate} \end{cslist} \begin{dangerous} @@ -769,15 +818,15 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と での実行は禁止. \item 外部垂直モードの場合は,次の2点が同時に満たされる場合のみ実行可能である - \footnote{% - \TeX は,外部垂直モードでボックスその他のノードを追加する際に,まず - そのノードをrecent contributionsというリストの末尾に追加し, - その後recent contributionsの中身が徐々にcurrent pageという別のリストに移される - という処理を行っている. - - そのため,単純にcurrent pageまたはrecent contributionsという1つのリストを - 調べるだけでは「ページが空」か正しく判断できない. - }. + \footnote{% + \TeX は,外部垂直モードでボックスその他のノードを追加する際に,まず + そのノードをrecent contributionsというリストの末尾に追加し, + その後recent contributionsの中身が徐々にcurrent pageという別のリストに移される + という処理を行っている. + + そのため,単純にcurrent pageまたはrecent contributionsという1つのリストを + 調べるだけでは「ページが空」か正しく判断できない. + }. \begin{itemize} \item current pageの中身にはボックス,罫線(|\hrule|), insertion~(|\insert|)はない. @@ -830,7 +879,7 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と (DtoU方向) \fi \end{verbatim} - + \csitem[\.{iftbox} <number>, \.{ifybox} <number>, \.{ifdbox} <number>, \.{ifmbox} <number>] <number>番のボックスの組方向を判定する.<number>は有効なboxレジスタでなければならない. @@ -842,6 +891,7 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と \end{cslist} \section{ベースライン補正} +\label{sec:baselineshift} 和文文字のベースラインと欧文文字のベースラインが一致した状態で組むと, 行がずれて見えてしまう場合がある.特に縦組の状況が典型的である @@ -854,11 +904,11 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と \csitem[\.{tbaselineshift}=<dimen>, \.{ybaselineshift}=<dimen>] 指定した箇所以降の欧文文字のベースラインシフト量を格納する.両者の使い分けは \begin{description} - \item[\texttt{\string\tbaselineshift}] - 縦組用和文フォントが使われるとき(つまり組方向が縦組のとき), - \item[\texttt{\string\ybaselineshift}] - 横組用和文フォントが使われるとき(横組,DtoU方向,縦数式ディレクション) - \end{description} + \item[\texttt{\string\tbaselineshift}] + 縦組用和文フォントが使われるとき(つまり組方向が縦組のとき), + \item[\texttt{\string\ybaselineshift}] + 横組用和文フォントが使われるとき(横組,DtoU方向,縦数式ディレクション) + \end{description} となっている. どちらの命令においても, 正の値を指定すると行送り方向(横組ならば下,縦組ならば左)にずらすことになる. @@ -879,18 +929,17 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と \pTeX~p3.7\footnote{\TeX~Live 2016,厳密には2016-03-05のコミット(r39938).}で追加された. \begin{cslist} \csitem[\.{textbaselineshiftfactor}=<number>, - \.{scriptbaselineshiftfactor}=<number>] -\vspace{-\itemsep} + \.{scriptbaselineshiftfactor}=<number>]\vspace{-\itemsep} \csitem[\.{scriptscriptbaselineshiftfactor}=<number>] - 文中数式全体にかかるベースライン補正量に対し, - 文中数式内の明示的なボックスを逆方向に移動させる割合を指定する. - 1000が1倍(ベースライン補正をちょうど打ち消す)に相当する. - - プリミティブが3つあるのは,数式のスタイルが - |\textstyle|以上(|\displaystyle|含む),|\scriptstyle|, - |\scriptscriptstyle|のときにそれぞれ - 適用される値を変えられるようにするためである. - 既定値はそれぞれ1000(1倍),700(0.7倍),500(0.5倍)である. + 文中数式全体にかかるベースライン補正量に対し, + 文中数式内の明示的なボックスを逆方向に移動させる割合を指定する. + 1000が1倍(ベースライン補正をちょうど打ち消す)に相当する. + + プリミティブが3つあるのは,数式のスタイルが + |\textstyle|以上(|\displaystyle|含む),|\scriptstyle|, + |\scriptscriptstyle|のときにそれぞれ + 適用される値を変えられるようにするためである. + 既定値はそれぞれ1000(1倍),700(0.7倍),500(0.5倍)である. \end{cslist} \TeX~Live 2015以前の動作に戻すには,上記の3プリミティブに全て0を指定すれば良い. @@ -907,7 +956,6 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と }$か%$ \end{verbatim} 組版結果は以下のようになる: -\medskip \begin{quote} \ybaselineshift=10pt\scriptbaselineshiftfactor=700 漢字pqr$a\hbox{xあ}^{% @@ -915,7 +963,6 @@ DtoU方向での数式ディレクションはそれぞれ非数式の場合と \hbox{\scriptsize\ybaselineshift=7pt zえ} }$か%$ \end{quote} -\medskip この例で,ボックス|\hbox{\scriptsize yう}|内ではベースライン補正量は10\,ptのままである \footnote{|\scriptsize|などのフォントサイズ変更命令では,標準では|\ybaselineshift|の値は @@ -933,6 +980,67 @@ $10\,\mathrm{pt}-7\,\mathrm{pt}=3\,\mathrm{pt}$だけ上に配置されてしま \end{dangerous} \section{和文フォント} +\label{sec:ptexfont} + +\TeX は組版を行うとき,文字の情報をTFMファイルから参照する. +\pTeX も同様で,欧文文字についてはTFMファイルを参照するが, +和文文字についてはJFMファイルを参照する. +ファイル名はどちらも\code{フォント名.tfm}である. + +TFMファイルには,大別すると +\begin{itemize} + \item それぞれの文字に関する事柄 + (各文字の幅,高さ,深さなど) + \item そのTFMファイルに収められている文字に共通する事柄 + (文字の傾き,デザインサイズ,そのフォントの基準値(em, ex)など) + \item 特定の文字の組み合わせのときの事柄 + (合字やカーニングなど) +\end{itemize} +の3種類の情報が設定されている. +JFMファイルもTFMファイルと同様の情報を持つが, +\begin{itemize} + \item 日本語の文字は数が多いので, + 文字を単位とするのではなく,共通する性質を持つ文字を + 一つにまとめてタイプ別の設定を行う + \item 横組み用と縦組み用の区別がある +\end{itemize} +という点が異なる.JFMフォーマットの詳細は, +この文書と同じディレクトリにある\cite{jfm}を参照されたい. + +% [TODO] 一つの文書で用いることができるフォント数の上限は? + +\begin{cslist} +\csitem[\.{jfont}, \.{tfont}] + 欧文フォントを定義したり,現在の欧文フォントを取得したりする|\font|の和文版である. + 一応|\jfont|が「和文の横組用フォント」の,|\tfont|が「和文の縦組用フォント」のために + 用いる命令である. +\begin{itemize} + \item フォントを定義する際は,欧文フォント・和文の横組用フォント・ + 和文の縦組用のフォントのいずれも + |\font|, |\jfont|, |\tfont|のどれを用いても定義できる. + \item |\the|等で「現在のフォント」を取得する際には, + |\jfont|で「和文の横組用フォント」を, + |\tfont|で「和文の縦組用フォント」を返す. + \item |\nullfont|は全ての文字が未定義な「空フォント」を指すが, + これは欧文フォントであり,和文版|\nullfont|という概念は存在しない. + これは,\pTeX では「全ての和文フォントには,和文文字コードとして有効な + 全ての文字が存在する」という扱いになっているためである. +\end{itemize} +\end{cslist} + +\begin{dangerous} + 細かい話をすれば,\pTeX のフォーマット作成時に和文フォントを + 何も選択しなければ,|\fontname\jfont|が|\nullfont|となり, + また和文文字を入力してもノードは作られないので, + 「和文版|\nullfont|が選択されている」と言えなくもない. + ただ,いったん実際の和文フォントを選択した後に + 「和文版|\nullfont|を選択する」という制御綴は作れないと思われる. + % つまり,tikzpicture 環境のように|\selectfont|を|\nullfont|に + % 再定義した状態では,和文文字だけ消えずに残る. + % https://tex.stackexchange.com/questions/18602/ + % https://twitter.com/doraTeX/status/1098584763277824000 + % https://twitter.com/zr_tex8r/status/1098594165573722112 +\end{dangerous} \begin{cslist} \csitem[\.{jfam}=<number>] @@ -954,19 +1062,6 @@ $10\,\mathrm{pt}-7\,\mathrm{pt}=3\,\mathrm{pt}$だけ上に配置されてしま ! Not one-byte family. \end{verbatim} というエラーが発生する. - -\csitem[\.{jfont}, \.{tfont}] - 欧文フォントを定義したり,現在の欧文フォントを取得する|\font|の和文版である. - 一応|\jfont|が「和文の横組用フォント」の,|\tfont|が「和文の縦組用フォント」のために - 用いる命令である. -\begin{itemize} - \item フォントを定義する際は,欧文フォント・和文の横組用フォント・ - 和文の縦組用のフォントのいずれも - |\font|, |\jfont|, |\tfont|のどれを用いても定義できる. - \item |\the|等で「現在のフォント」を取得する際には, - |\jfont|で「和文の横組用フォント」を, - |\tfont|で「和文の縦組用フォント」を返す. -\end{itemize} \end{cslist} \section{文字コード変換,漢数字} @@ -985,10 +1080,19 @@ p3.1.2で復活したという経緯がある.}. たとえば,|\char\kuten"253C|は,「\char\kuten"253C」(37区60点)である. \csitem[\.{jis} <16-bit number>, \.{euc} <16-bit number>, \.{sjis} <16-bit number>] - それぞれJISコード,EUCコード,Shift\_JISコードから内部コードへの変換を行う. + それぞれJISコード,EUCコード,Shift-JISコードから内部コードへの変換を行う. たとえば,|\char\jis"346E|,|\char\euc"B0A5|,|\char\sjis"8A79|は, それぞれ「\char\jis"346E」,「\char\euc"B0A5」,「\char\sjis"8A79」である. +\end{cslist} + +\begin{dangerous} + \ref{sec:ptexchar}節でも述べたように, + \emph{\pTeX はJIS X 0213には対応せず,JIS X 0208の範囲のみ扱える}. + [TODO] \.{kuten}, \.{jis}, \.{sjis}, \.{euc}が$-1$とならない範囲はどこ? +\end{dangerous} + +\begin{cslist} \csitem[\.{kansuji} <number>, \.{kansujichar} <0--9>=<kanji code>] |\kansuji|は,続く数値<number>を漢数字の文字列で出力する. 出力される文字は|\kansujichar|で指定できる(デフォルトは「〇一二三四五六七八九」). @@ -1020,13 +1124,23 @@ p3.1.2で復活したという経緯がある.}. 基本的にこのエラーは発生しない.}. \end{cslist} +\begin{dangerous} + |\kansujichar|は整数値パラメータであるが,p3.8.2までは + 「代入できるが取得はできない」という挙動であった + (例えば|\count255=\kansujichar1|はエラー). +\iffalse %%%%% TL2019-hack + \pTeX~p3.8.3で取得もできるように修正された(\cite{build93})が, + 以前の\pTeX も考慮すると,値の取得は以下のようにするのが安全である: + |\count255=\expandafter`\kansuji1| +\fi %%%%% TL2019-hack +\end{dangerous} + % luatexja.dtx より pTeX 用に移植 \begin{dangerous} 以上に挙げたプリミティブ(|\kuten|, |\jis|, |\euc|, |\sjis|, |\kansuji|)は 展開可能(expandable)であり, 内部整数を引数にとるが,実行結果は\emph{文字列}であることに注意 (\TeX82の|\number|, |\romannumeral|と同様). - また,\pTeX はJIS X 0213には対応せず,JIS X 0208の範囲のみ扱える. \medskip\noindent \begin{minipage}{.6\linewidth} @@ -1040,7 +1154,7 @@ p3.1.2で復活したという経緯がある.}. \end{minipage} \begin{minipage}{.3\linewidth} \newcount\hoge - \hoge="2423 + \hoge="2423 \the\hoge, \kansuji\hoge\\ \jis\hoge, \char\jis\hoge\\ \kansuji1701 @@ -1138,9 +1252,13 @@ p3.1.2で復活したという経緯がある.}. |\lccode|, |\uccode| \end{quote} - +違反すると +\begin{verbatim} +! Bad character code (42146). +\end{verbatim} +というエラーが発生する. \begin{dangerous} -以前の\pTeX では, +以前の\pTeX では, これらの命令の文字コード部分に和文文字の内部コードを指定することもでき, その場合は「引数の上位バイトの値に対する操作」として扱われていた: \begin{verbatim} @@ -1149,34 +1267,52 @@ p3.1.2で復活したという経緯がある.}. しかしこの挙動は2016-09-06のコミット(r41998)により禁止され, \TeX~Live 2017の\pTeX~(p3.7.1)で反映されている. \end{dangerous} + +また,下記のプリミティブは名称が|\...char|であるが,値は0--255の範囲のみ +有効であり,256以上あるいは負の値を指定すると無効である +(オリジナルの\TeX 同様,エラーにはならない). +\begin{quote} + |\endlinechar|, + |\newlinechar|, + |\escapechar|,\\ + |\defaulthyphenchar|, + |\defaultskewchar| +\end{quote} + % 他にもあるか? \section{和文に対応したプリミティブ} \begin{cslist} - \csitem[\.{char} <character code>, + \csitem[\.{char} <character code>, \.{chardef} <control sequence>=<character code>] 引数として0--255に加えて和文文字の内部コードも指定できる. 和文文字の内部コードを指定した場合は和文文字を出力する. + + \csitem[\.{font}, \.{fontname}, \.{fontdimen}] + |\font|については\ref{sec:ptexfont}節を参照. + |\fontname|は和文フォントからもフォント名を取得でき, + |\fontdimen|は和文フォントのパラメータ表(JFMで定義される\node{param}テーブル)からも + 値を取得できる. + % [TODO] pTeX が内部処理で param テーブルを使うことはある? + % 少なくとも,zw と zh は使われていないんですよね? + \csitem[\.{accent} <character code>=<character>] |\accent|プリミティブにおいても,アクセントの部分に和文文字の内部コードを指定できるほか, アクセントのつく親文字を和文文字にすることもできる. -\end{cslist} - \begin{itemize} \item 和文文字をアクセントにした場合,その上下位置が期待されない結果になる - 可能性が大きい. - これは,アクセントの上下位置補正で用いる|\fontdimen5|の値が和文フォントでは - 特に意味を持たない\footnote{欧文フォントではx-heightである.}ためである. + 可能性が大きい. + これは,アクセントの上下位置補正で用いる|\fontdimen5|の値が和文フォントでは + 特に意味を持たない\footnote{欧文フォントではx-heightである.}ためである. \item 和文文字にアクセントをつけた場合, - \begin{itemize} - \item 前側にはJFMグルーや|\kanjiskip|は挿入されない - (ただし|\xkanjiskip|は挿入されうる). - \item 後側にはJFMグルーは挿入されない - (ただし|\kanjiskip|, |\xkanjiskip|は挿入されうる). - \end{itemize} + \begin{itemize} + \item 前側にはJFMグルーや|\kanjiskip|は挿入されない + (ただし|\xkanjiskip|は挿入されうる). + \item 後側にはJFMグルーは挿入されない + (ただし|\kanjiskip|, |\xkanjiskip|は挿入されうる). + \end{itemize} \end{itemize} -\begin{cslist} \csitem[\.{if} <token$_1$> <token$_2$>, \.{ifcat} <token$_1$> <token$_2$>] 文字トークンを指定する場合,その文字コードは\TeX82では0--255のみが許されるが, \pTeX では和文文字トークンも指定することができる. @@ -1211,30 +1347,54 @@ has been |\let| equal to a non-active character token. コントロールシークエンスをカテゴリーコード0とみなしている. そのため,\pTeX 系列において和文文字トークンの|\kcatcode|の値が 16である場合も,|\ifcat|判定でコントロールシークエンスと混同されることはない. + +一方,文字コードについては,確かにtex.webは|\if|判定において +コントロールシークエンスを256とみなしている.しかし,\upTeX では +文字コード256の和文文字と衝突するので,2019-05-06のコミット(r51021)で +「原理的に文字コードが取り得ない値」に変更した(\cite{build68}). \end{dangerous} \begin{thebibliography}{99} \bibitem{topic} Victor Eijkhout, \textit{\TeX\ by Topic, A \TeX nician's Reference}, Addison-Wesley, 1992.\\ \url{https://www.eijkhout.net/texbytopic/texbytopic.html} + \bibitem{jfm} ASCII Corporation \& Japanese \TeX\ Development Community, 「JFMファイルフォーマット」, + \texttt{./jfm.pdf} \bibitem{tatemath} aminophen, 「縦数式ディレクションとベースライン補正」, 2016/09/05,\\ \url{https://github.com/texjporg/platex/issues/22} + \bibitem{build26} h-kitagawa, 「禁則テーブル,|\inhibitxspcode| 情報テーブルからのエントリ削除」, + 2017/09/10,\\ + \url{https://github.com/texjporg/tex-jp-build/pull/26} + \bibitem{build57} Man-Ting-Fang, \textit{[upTeX] Unexpected behaviour in kinsoku processing}, + 2018/04/13,\\ + \url{https://github.com/texjporg/tex-jp-build/issues/57} + \bibitem{build11} aminophen, 「pTeX の後禁則ペナルティ」, + 2017/04/05,\\ + \url{https://github.com/texjporg/tex-jp-build/issues/11} \bibitem{build28} h-kitagawa, 「[ptex] |\inhibitglue|の効力」, 2017/09/20,\\ \url{https://github.com/texjporg/tex-jp-build/issues/28} \bibitem{build36} aminophen, 「欧文文字の|\kansujichar|,|\inhibitxspcode|」, 2017/11/26,\\ \url{https://github.com/texjporg/tex-jp-build/issues/36} - \bibitem{build37} aminophen,「和文のコントロールシンボル」, +\iffalse %%%%% TL2019-hack + \bibitem{build93} aminophen, 「[ptex] reading |\kansujichar|」, + 2019/10/14,\\ + \url{https://github.com/texjporg/tex-jp-build/issues/93} +\fi %%%%% TL2019-hack + \bibitem{build37} aminophen, 「和文のコントロールシンボル」, 2017/11/29,\\ \url{https://github.com/texjporg/tex-jp-build/issues/37} - \bibitem{build55} aminophen,「[(u)pTeX] 内部コードの -kanji-internal オプション」, + \bibitem{build55} aminophen, 「[(u)pTeX] 内部コードの -kanji-internal オプション」, 2018/04/03,\\ \url{https://github.com/texjporg/tex-jp-build/issues/55} \bibitem{forum_2566} aminophen, 「\TeX~Live 2019 での |\inhibitglue| の挙動変更【予定】」, 2019/02/06,\\ \url{https://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=2566} + \bibitem{build68} aminophen, 「upTeX の |\if| と |\ifcat|」, + 2019/01/17,\\ + \url{https://github.com/texjporg/tex-jp-build/issues/68} \end{thebibliography} \newpage |