TeX Alchemist Online

TeX のこと,フォントのこと,Mac のこと

xfakebold.sty を (u)pLaTeX + dvipdfmx に対応させてみた

f:id:doraTeX:20191206033631p:plain

現在,TeX & LaTeX Advent Calendar 2019 が開催中です。

adventar.org

その2日目の記事が,t_kemmochi さんによる xfakebold.sty の紹介でした。

qiita.com

この記事で紹介されている xfakebold.sty は,LuaLaTeX または pdfLaTeXのみで利用可能 とされています。つまり,(u)pLaTeX + dvipdfmx のワークフローはサポートされていません。

ですが,xfakebold.sty の中身を読んでみると,\setBold\unsetBold という命令は,単にPDFに 2 Tr 0.5 w といったオペレータを埋め込んでいるだけです。以前の記事で紹介したように,(x)dvipdfmx を使っている場合は,\special{pdf:literal direct ...} とすることでこれらのオペレータを埋め込むことが可能です。 doratex.hatenablog.jp

よって,定義をちょっと変更して場合分けを増やせば,xfakebold.sty を (x)dvipdfmx に対応させることは容易なはずです。

そもそも,xfakebold.sty は,XeLaTeX, LuaLaTeX, pdfLaTeX 以外のエンジンのことは全く考慮されていないようです(XeLaTeX の場合は fontspec に任せる旨の警告を出して終わり)。

というわけで,これらの欠点を解決すべく,xfakebold.sty にさくっと手を入れて,(u)pLaTeX + dvipdfmx に対応させてみました。

仕様

  • iftex.sty を用いてエンジンを判定。
  • XeLaTeX の場合は fontspec に任せるのではなく自力で \special を発行。
  • ドキュメントクラスオプション,または xfakebold パッケージのパッケージオプションとして dvipdfmx が指定されている場合((u)pLaTeX + dvipdfmx のワークフローを想定)も,自力で \special を発行。
  • LuaLaTeX / pdfLaTeX の場合は原作通りの挙動。
  • 以上のいずれにも当てはまらない場合は非サポートエンジンのエラーを出す。

サンプル

t_kemmochi さんのサンプルを,upLaTeX + dvipdfmx + Beamer + 改造版xfakebold で動かした例を作ってみました。

www.overleaf.com