LuaLaTeX + newtxでサンセリフがフォント変更されない

LuaLaTeX + newtxでサンセリフがフォント変更されない

- mac wac の投稿
返信数: 1
こんにちは。
\documentclass{article}
\usepackage{newtx}
\begin{document}
\meaning\sfdefault % pdfLaTeXだと macro:->qhv / LuaLaTeXだと macro:->lmss
\textsf{The quick brown fox jumps over the lazy dog.}
\end{document}

上記のコードをpdfLaTeXにかけると問題ないのですが、LuaLaTeXにかけるとサンセリフのフォントが変更されなくなってしまいました。

確かTL2020では問題なかったはずですが、TL2021(Ubuntu 22.04版)に更新してからこの現象が発生したように思われます。

バージョンは、

$ lualatex --version
This is LuaHBTeX, Version 1.14.0 (TeX Live 2022/dev/Debian)

です。newtxは1.704を用いていますが、1.71を用いても(正確にはstyファイルのみですが)現象は再現しました。

検索すると、どうもnewtxとLuaTeXが相性が良くないらしいという情報はわかり (Stack Exchange "How to correctly use newtxtext and newtxmath with luatex") 、
当面のところ TeX Q&A 「fontspec+newtxでエラー」 を参考に

\defaultfontfeatures{}
\setsansfont{TeX Gyre Heros}
とすればしのげそうということは見えてきましたが、若干の気持ち悪さは感じます。
先のstackexchangeではunicode-math.styの使用を薦められていますが、どうも積分記号等のデザインがあまり食指を伸ばさせてくれず、一歩立ち止まりたいところです。

やはり、なかなか抜本的な対応は現状では難しい状態でしょうか?

mac wac への返信

Re: LuaLaTeX + newtxでサンセリフがフォント変更されない

- Z. R. の投稿
確かTL2020では問題なかったはずですが

■TeX Live 2020での状況の確認

例えば、TeX Live 2020のlualatexで次のソースをコンパイルすると:

% TeX Live 2020のlualatexでコンパイル
\documentclass{article}
\usepackage{newtxtext,newtxmath}
\begin{document}
\encodingdefault% エンコーディング
/\rmdefault% rmのファミリ名
/\sfdefault% sfのファミリ名
\end{document}

“T1/ntxtlf/qhv”という出力が得られます。エンコーディングが「T1」なのでUnicodeフォントになっていないことがわかります。

実際、この時のNew TXはまだUnicode TeX(XeTeX/LuaTeX)に対応してなかったようで、もし(無理やり)読み込んだ場合は、pdfTeX用の設定(T1エンコーディングのType1形式フォント)をそのまま適用するという動作になります。

一般的に、「Unicode TeXをT1エンコーディングで使用する」ことは以下の理由で推奨されていません

  • 当然だが「Unicode TeXとして期待される」ものに反する動作をする。
  • 場合により明らかに理屈に合わない動作をする。
  • 種々のパッケージが“その状態”をサポートするとは期待できない。

ただし、LaTeXカーネルとしては一応“その状態”はサポートされているはずです。

そういうわけで、「TeX Live 2020のNew TXと同じ」状態を期待値だと考えてみます。

■TeX Live 2020での状況の再現

今のnewtxパッケージ(newtxtextではなく)には「Type1形式のフォントの使用」を明示的に指示する“type1”というオプションがあります。色々と試した結果、次のようにすると、同じ状況を得ることができました。

% TeX Live 2021のlualatexでコンパイル
\documentclass{article}
% エンコーディングを自分でT1に変える
\usepackage[T1]{fontenc}
% Type1形式を指定, fontspecの読込を抑止
\usepackage[type1,nofontspec]{newtx}
\begin{document}
\meaning\sfdefault\par
\textsf{The quick brown fox jumps over the lazy dog.}
\end{document}

※LuaTeX-ja併用でも問題なく動作するようです。


抜本的な対応

マニュアルには「サンセリフはTeX Gyre Herosになる」と書いてあるんだから、UNicode TeXでもその仕様が守られるべきだと自分は思いますけどね……。