複数のxeCJKフォント

複数のxeCJKフォント

私は xeCJK のメインフォントを HanWangMingMedium に設定し、古いスタイルの文字にアクセスできるようにしました。しかし、その結果、日本語のカナにアクセスできなくなりました。MWE では、カタカナは空白として表示されます。

ここに画像の説明を入力してください

デフォルトの xeCJK フォントではこの問題は発生しませんが、必要な特定の文字 (烝 など) が表示されません。文書の本文内で xeCJK フォントを変更するにはどうすればよいでしょうか。また、デフォルトの xeCJK フォントの名前は何ですか。

回答に関連する可能性があります: 書記体系について書いています。したがって、必要なのは孤立した文字だけです。中国語のテキストの長いセクションはありません。

% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
   \setCJKmainfont{HanWangMingMedium}
\begin{document}

東風フォント

\end{document}

更新。これはハックです。代替フォントをサンセリフのバリエーションとして想定します。しかし、適切な解決策がまだ必要です。

% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
   \setCJKmainfont{HanWangMingMedium}
   \setCJKsansfont{AozoraMinchoRegular}

\begin{document}

東風\sf フォント.

\end{document}

答え1

ではbabel、日本語や繁体字中国語など、さまざまな表意文字を切り替えることができます。

\documentclass{standalone} % Replace with the real class.
\usepackage[english]{babel}
\usepackage{fontspec}

% A bug in Babel 3.22 requires setting the script= option to CJK and Kana,
% respectively.
\babelprovide{chinese-traditional}
\babelprovide{japanese}

\defaultfontfeatures{Scale = MatchUppercase}
\babelfont{rm}[Scale = 1.0,
               Ligatures = {Common, TeX},
               Language = Default
              ]{Latin Modern Roman}
\babelfont{sf}[Ligatures = {Common, TeX},
               Language = Default]{Latin Modern Sans}
\babelfont[chinese-traditional]{rm}{NotoSerifCJKtc-Regular}
\babelfont[chinese-traditional]{sf}{NotoSansCJKtc-Regular}
\babelfont[japanese]{rm}{NotoSerifCJKjp-Regular}
\babelfont[japanese]{sf}{NotoSansCJKjp-Regular}

\begin{document}

\otherlanguage{chinese-traditional}{東風}
\otherlanguage{japanese}{フォント}

\end{document}

Noto フォントサンプル

これにはXeLaTeXとbabel3.27以上が必要です。(babel3.22では、バグを回避するために手動で設定する必要があります。Script=CJKScript=KanaNoto CJKフォント

\otherlanguageあちこちに記述する必要がない、Babel よりも簡単なオプションはですucharclasses。 を宣言し\newfontfamily、それに[Script = Kana, Language = Japanese]オプションを指定して、それを選択することもできます。

アップデート

2021 年現在、LuaLaTeX 1.12 以降では複数の表意文字を使用できます。理論的には、タグ付けせずに文書を言語間で切り替えるように設定できます。実際には、これは中国語と日本語では確実に機能しません。これは、Unicode コンソーシアムが漢字と中国語に同じコードポイントを使用することを選択したためです。(Unicode の原罪は、すべてを 16 ビットに収めることができると考えたことです。)

babelこの特定の例では、必要な日本語がひらがなとカタカナだけであり、表意文字がすべて中国語である場合、日本語、中国語、英語を正しく検出できます。

\documentclass{standalone} % Replace with the real class.
\usepackage[english]{babel}
\usepackage[svgnames, HTML]{xcolor}
\usepackage{fontspec}

% A bug in Babel 3.22 requires setting the script= option to CJK and Kana,
% respectively.
\babelprovide[import, onchar=ids fonts]{japanese}
\babelprovide[import, onchar=ids fonts]{chinese-traditional}

\defaultfontfeatures{ Scale = MatchUppercase,
                      Ligatures=TeX }
\babelfont{rm}
          [Scale = 1.0,
           Ligatures = Common,
           Language = Default
          ]{Latin Modern Roman}
\babelfont{sf}
          [Ligatures = Common,
           Language = Default
          ]{Latin Modern Sans}
\babelfont[chinese-traditional]{rm}
          [Renderer=HarfBuzz, Color=DarkGreen]{NotoSerifCJKtc-Regular}
\babelfont[chinese-traditional]{sf}
          [Renderer=HarfBuzz, Color=DarkGreen]{NotoSansCJKtc-Regular}
\babelfont[japanese]{rm}
          [Renderer=HarfBuzz, Color=NavyBlue]{NotoSerifCJKjp-Regular}
\babelfont[japanese]{sf}
          [Renderer=HarfBuzz, Color=NavyBlue]{NotoSansCJKjp-Regular}

\begin{document}

東風
\textsf{フォント}

\end{document}

能登CJKサンプル

ここでは、言語の切り替えがより明確になるように、各言語を異なる色に設定しています。

関連情報