コードドキュメント内の日本語に日本語フォントを当てる方法

コードドキュメント内の日本語に日本語フォントを当てる方法

- ya ra の投稿
返信数: 0

zref-clever の日本語対応について意見を募りたい」に関連する質問です。

zref-clever に日本語を対応させる過程で zref-clever.dtx に日本語が入っていると、フォントが無いためコードドキュメント (zref-clever-code.pdf) では豆腐になってしまいます。

これに対応するため babel を利用して日本語フォントを与えることで、日本語を表示させることが出来るようになりました。

しかし、他の CJK フォントを追加すると日本語フォントと重複する文字に関して正しくフォントが当たらないことがあります。 日本語の言語構成をしている箇所で日本語フォントを当てる方法はあるでしょうか。

以下の要件を満たしたものを得たいと考えています。

  • 日本語には日本語フォント、韓国語には韓国語フォントが当たっている
  • ラテン文字やそのほかの記号は主となるフォント(今回は CMU Typewriter Text)が当たっている

現在 zref-clever には他の CJK 言語が含まれていないため杞憂であることは分かっていますが、出来ればそれぞれの言語に対応するフォントが当たるようになっていると良いなぁと考えています。


[お願い]

zref-clever の日本語対応について意見を募りたい」で zref-clever の日本語対応について意見を募っています。重ねてよろしくお願いします。

問題点の再現

babel を使って次のように日本語フォントと韓国語フォントを構成すると、\babelprovide による構成の順序によって漢字に当てられるフォントが変わってしまいます。 (以下の例は添付ファイルと同じもの)

%#! lualatex
\documentclass{l3doc}

\usepackage[main=english]{babel}
\usepackage{fontspec}

\babelfont{rm}{CMU Serif}
\babelfont{sf}{CMU Sans Serif}
\babelfont{tt}{CMU Typewriter Text}

%% babelprovide の順序を
%%    japanese > korean にすると漢字が korean フォントになる
%% 逆にすると漢字が japanese フォントになる
\babelprovide[onchar=ids fonts]{japanese}
\babelprovide[onchar=ids fonts]{korean}
%%

\babelfont[japanese]{rm}{Harano Aji Mincho}
\babelfont[japanese]{sf}[Scale=0.9]{Harano Aji Gothic}
\babelfont[japanese]{tt}[Scale=0.8]{Harano Aji Gothic}
%% CMU Typewriter Text に対して大きいのでScaleを調整

\babelfont[korean]{rm}{baekmukbatang}
\babelfont[korean]{sf}[Scale=0.9]{baekmukdotum}
\babelfont[korean]{tt}[Scale=0.85]{baekmukgulim}

\begin{document}

\DocInput{test.dtx}

\end{document}

%% test.dtx
%    \begin{macrocode}
Hello New World.
%    \end{macrocode}

%    \begin{macrocode}
こんにちは New 世界。
%    \end{macrocode}

%    \begin{macrocode}
안녕하세요 New 세계.
%    \end{macrocode}

zref-clever での実際の再現方法

上の例で MWE となっていると考えていますが、間違っていると嫌なので実際に想定されている状況も並記しておきます。

l3build の実行

リポジトリ から git clone してファイルをダウンロードし、zref-clever/ ディレクトリ内で以下のように l3build を実行すると、必要な sty ファイルやドキュメントファイルを取得できるようになります。

l3build doc

再現方法

2 つのファイルを変更します。

  • zref-clever.dtx
  • zref-clever-code.tex
zref-clever.dtx

zref-clever.dtx の 12043 行目 以降に以下のような日本語のための言語構成を追加します。

zref-clever.dtx のみを変更した状態で l3build を実行すると、PDF が正常に生成されますが、日本語の部分は豆腐になってしまいます。

% \subsection{Japanese}
%
%
%    \begin{macrocode}
%<*package>
\zcDeclareLanguage[ allcaps ]{ japanese }
%</package>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*lang-japanese>
%    \end{macrocode}
%
%    \begin{macrocode}
namesep   = {\nobreak} ,
pairsep   = {と} ,
listsep   = {、} ,
lastsep   = {、および} ,
tpairsep  = {および} ,
tlistsep  = {、} ,
tlastsep  = {、および} ,
notesep   = {:} ,
rangesep  = {から} ,

type = book ,
  Name-sg = 第 ,
  Name-pl = 第 ,
  refbounds = {,,,編} ,

type = part ,
  Name-sg = 第 ,
  Name-pl = 第 ,
  refbounds = {,,,部} ,

type = chapter ,
  Name-sg = 第 ,
  Name-pl = 第 ,
  refbounds = {,,,章} ,

type = section ,
  Name-sg = 第 ,
  Name-pl = 第 ,
  refbounds = {,,,節} ,

type = paragraph ,
  Name-sg = 第 ,
  Name-pl = 第 ,
  refbounds = {,,,段落} ,

type = appendix ,
  Name-sg = 付録 ,
  Name-pl = 付録 ,

type = page ,
  Name-sg = p. ,
  Name-pl = pp. ,
  namesep = ~ ,
  rangesep = \textendash ,
  rangetopair = false ,

type = line ,
  Name-sg = l. ,
  Name-pl = l. ,
  namesep = ~ ,
  rangesep = \textendash ,
  rangetopair = false ,

type = figure ,
  Name-sg = 図 ,
  Name-pl = 図 ,

type = table ,
  Name-sg = 表 ,
  Name-pl = 表 ,

type = item ,
  Name-sg = 項目 ,
  Name-pl = 項目 ,

type = footnote ,
  Name-sg = 脚注 ,
  Name-pl = 脚注 ,

type = endnote ,
  Name-sg = 後注 ,
  Name-pl = 後注 ,

type = note ,
  Name-sg = 注記 ,
  Name-pl = 注記 ,

type = equation ,
  Name-sg = 式 ,
  Name-pl = 式 ,
  refbounds-first-sg = {,(,),} ,
  refbounds = {(,,,)} ,

type = theorem ,
  Name-sg = 定理 ,
  Name-pl = 定理 ,

type = lemma ,
  Name-sg = 補題 ,
  Name-pl = 補題 ,

type = corollary ,
  Name-sg = 系 ,
  Name-pl = 系 ,

type = proposition ,
  Name-sg = 命題 ,
  Name-pl = 命題 ,

type = definition ,
  Name-sg = 定義 ,
  Name-pl = 定義 ,

type = proof ,
  Name-sg = 証明 ,
  Name-pl = 証明 ,

type = result ,
  Name-sg = 結果 ,
  Name-pl = 結果 ,

type = remark ,
  Name-sg = 注意 ,
  Name-pl = 注意 ,

type = example ,
  Name-sg = 例 ,
  Name-pl = 例 ,

type = algorithm ,
  Name-sg = アルゴリズム ,
  Name-pl = アルゴリズム ,

type = listing ,
  Name-sg = コード ,
  Name-pl = コード ,

type = exercise ,
  Name-sg = 演習 ,
  Name-pl = 演習 ,

type = solution ,
  Name-sg = 解法 ,
  Name-pl = 解法 ,
%    \end{macrocode}
%
%    \begin{macrocode}
%</lang-japanese>
%    \end{macrocode}
zref-clever-code.tex

zref-clever-code.tex の 42~47 行目 を次のように変更して l3build を実行すると、日本語が上手く表示されるようになります。

\documentclass{l3doc}

\usepackage[english]{babel}
\usepackage{fontspec}
% \setmainfont{CMU Serif}
% \setsansfont{CMU Sans Serif}
% \setmonofont{CMU Typewriter Text}

\babelfont{rm}{CMU Serif}
\babelfont{sf}{CMU Sans Serif}
\babelfont{tt}{CMU Typewriter Text}

\babelprovide[onchar=ids fonts]{japanese}
\babelfont[japanese]{rm}[Scale=0.9]{Harano Aji Mincho}
\babelfont[japanese]{sf}[Scale=0.9]{Harano Aji Gothic}
\babelfont[japanese]{tt}[Scale=0.8]{Harano Aji Gothic}