易の六十四卦がCode2000や花園明朝Aでも出力されません

易の六十四卦がCode2000や花園明朝Aでも出力されません

- 光田 エディー の投稿
返信数: 7
連続の質問でとても心苦しいのですが、またどうぞよろしくお願い致します。

先日、易の八卦の文字(Unicode で2630~2637)はお陰さまで
LuaLaTeXとCode2000を使うことで出力できるようになりましたが、
そのまま易の六十四卦(八卦と八卦を上下に重ねた形で全部で64個ある)も
出力できるものと思い、トライしたのですが、こちらが何故か出力されません。(下のようなソースで試して見ました。)

六十四卦のUnicodeブロックは4DC0~4DFFまでの64文字になります。
花園明朝Aなどいくつかのフォントでも試したのですが、どれも上手く行きませんでした。

TeXworksのエディタ上では六十四卦がうまく表示されていますのに、LuaLaTeXで処理すると、その部分が空白になってしまいます。

Code2000のスペックでは、4DC0~4DFFまでフォントが揃っているように説明されているのですが、なぜか出ません。

なにか解決法があればご教授をよろしくお願い致します。

そもそも、ある特定のフォントが、どのコードブロックをカバーしているのか知る方法はあるのでしょうか?

どうしても六十四卦が出力できなければ、八卦と八卦を重ねて一文字にして出力する方法をトライしようかとも思っております。

どうぞよろしくお願い致します。

----------------------------------------

\documentclass{jlreq}

\usepackage{luatexja-preset}

\begin{document}


吾輩は文字である。



%\jfontspec{Arial Unicode MS}

%\jfontspec{Code2000}

\jfontspec{HanaMinA}


☀☁☂☃★☆☇☈☉☊☐☠☰☱☲☳☴☵☶☷♀♁♂♃♄♅


\begin{tabular}{l|l}

\hline

Unicode & 出力\\

\hline

2630→ & ☰☱☲☳☴☵☶☷\\

2640 & ♀\\

2650 & ♐\\

2660 & ♠\\

2770 & ✀\\

2D80 & ⶀ\\

2FF0 & ⿰\\

32D0 & ㋐\\

3800 & 㠀\\

3900 & 㤀\\

3A00 & 㨀\\

4DB0 & 䶰\\

4DC0→ & ䷀䷁䷂䷃䷄䷅䷆䷇\\

4DD0→ & ䷐䷑䷒䷓䷔䷕䷖䷗\\

4DE0→ & ䷠䷡䷢䷣䷤䷥䷦䷧\\

4DFF→ & ䷿䷱䷲䷳䷴䷵䷶䷷\\

4E00 & 一\\

4E10 & 丐\\

\hline

\end{tabular}



\end{document}



光田 エディー への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 光田 エディー の投稿
自己レスです^^;

いろいろ調べていたら、DejaVu Sansというフォントだと六十四卦が揃っていることが分かりました。

そして、\jfontspec{DejaVuSans}ではなく、\fontspec{DejaVuSans}とすれば六十四卦がちゃんと表示されるようになりました。

お騒がせ致しました。

光田 エディー への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 北川 弘典 の投稿
八卦の Unicode ブロック (U+2630--U+2637) の文字は標準では「和文文字扱い」で,
六十四卦の Unicode ブロック (U+4DC0--U+4DFF) の文字は標準では「欧文文字扱い」という違いがあります
(なぜ標準設定がそのようになっているのかは思い出せません……).
例えば次のような方針が考えられるでしょうか:

【方針1】八卦・六十四卦について「欧文扱い」「和文扱い」を統一させてしまう
----
\documentclass{jlreq}
\usepackage{luatexja-preset}
\ltjdefcharrange{100}{"2630-"2637,"4DC0-"4DFF} % 八卦・六十四卦の「文字範囲」
\ltjsetparameter{jacharrange={+100}} % +100 なら和文文字,-100 なら欧文文字
\begin{document}
{\jfontspec{HanaMinA.ttf} % 八卦・六十四卦に使うフォント.ここでは花園明朝A
☰.䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏}
\end{document}
----

【方針2】八卦・六十四卦の文字を「アクティブ化」してしまう
----
\documentclass{jlreq}
\usepackage{luatexja-preset}
\newfontfamily\HAKKEFONT{HanaMinA.ttf}
  % 八卦・六十四卦に使うフォント.ここでは花園明朝A
\makeatletter %%% TeX on LaTeX,注意!
\count@="2630
\loop\ifnum\count@<"2638
  \catcode\count@=13
  {\lccode`\~=\count@ \lowercase{\gdef~{{\HAKKEFONT\ltjalchar`~}}}}%
  \advance\count@1
\repeat
\count@="4DC0
\loop\ifnum\count@<"4E00
  \catcode\count@=13
  {\lccode`\~=\count@ \lowercase{\gdef~{{\HAKKEFONT\ltjalchar`~}}}}%
  \advance\count@1
\repeat
\makeatother %%% ここまで
\begin{document}
\textgt{あいう☰.䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏}
\end{document}
北川 弘典 への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 光田 エディー の投稿
北川さま

高度なテクニックで、私の理解を超えておりますが、
書き留めて、勉強させていただきます。

ありがとうございます。
光田 エディー への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 北川 弘典 の投稿
> そもそも、ある特定のフォントが、どのコードブロックをカバーしているのか知る方法はあるのでしょうか?

たとえば次のようにすると良いでしょうか:
{\fontspec{HanaMinA.ttf} % 例えば花園明朝Aについて,
\iffontchar\font"2367 Y\else N\fi}% U+2367 に対応するグリフがあれば「Y」,なければ「N」

北川 弘典 への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 和田 勇 の投稿

Table of Contents

  1. ある特定のフォントが、どのコードブロックをカバーしているのか知る方法
  2. 以上の作業結果+北川さんの案を合体させたものを添付します
  3. 添付ファイル … 8ka-64ka.zip

北川さんの回答で良いと思いますが ....

ある特定のフォントが、どのコードブロックをカバーしているのか知る方法

まだ確固たる手順は確立できいませんが … 「ⶀ」(2D80 エチオピア文字 • ラテン文字) のようなものが私のところではなかなか取り込めないので、その 顛末の備忘録です

  • TeXLive には otfinfo というコマンドがあり -g あるいは –glyphs オプ ションで指定したフォントのグリフの状況がわかるらしい
  • otf ファイルはほぼ大丈夫だが ttc ttf なものはエラーになってしまう
  • fontforge (homebrew install fontforge) には showttf というのがあり、 otfinfo の代わりに使える
  • ターミナルや Safari で表示できているのでそれらのプロセスが掴んでいる フォントを調べる

    • lsof というコマンドを使う(linux/freebsd でも使えると思うが未確認)
    • lsof | grep -e 'Safari' -e 'iTerm2' | grep -i -e '.otf' -e '.ttf' -e '.ttc' の結果からフォントのパスを取り出す
  • 取り出したフォントのパスを showttf の引数に与えて、フォント名+.txt のようなそれぞれ別ファイルに書き込む

  • 書き込んだファイルを以下のようなコマンドで検索
    • grep -w 2D80 *.txt
    • 結果として Kefa.ttc に記録されているのがわかる
  • FontBook で Kefa を検索しグリフを丹念に調べる
  • showttf だけでは調べきれないので「ある文字」を「あるフォント」で表 示できるか確認するスクリプトを以下を参考に作成(添付ファイル参照)

    • Dump characters (glyphs) from TrueType font (TTF) into bitmaps

    • 必要なもの

      • python3
      • pip install Pillow
    • 使い方

             python glyph-check.py フォントパス1 [フォントパス2 ... ]
      
    • 実行すると フォント名.png のようなイメージファイルが出来上がる

    • preview 等で期待したグリフがあるフォント名を調べる

以上の作業結果+北川さんの案を合体させたものを添付します

添付ファイル … 8ka-64ka.zip

ファイル名   記事
8ka-64ka/8ka-64ka.log   Missing フォントが無いこと
8ka-64ka/8ka-64ka.pdf    
8ka-64ka/8ka-64ka.tex    
8ka-64ka/glyph-check.py   今回使用文字のグリフ画像化スクリプト
8ka-64ka/Kefa.ttc.png   上記スクリプト使用例
北川 弘典 への返信

Re: 易の六十四卦がCode2000や花園明朝Aでも出力されません

- 林 かぐら の投稿
私は,たまにですが,持っているグリフの確認に
GlyphTable.jar を使うことがあります。

フォントに入っているグリフを調べる
https://www.hos.co.jp/blog/20160725/

ただし
・Java が必要
・調べられるのはシステムにインストールされているフォントのみ
です。