トップページ | 全エントリー一覧 | RSS購読

アーカイブ

豊聡耳 神子

加護()

(自動α) 〔このブログ〕は〔Google Analytics及びfc2アクセス解析〕を用いて〔あなた〕のアクセスを解析している。
(自動α) 〔あなたのIPアドレスなど〕一部情報は〔Googleまたはfc2〕に送付される可能性がある。
(自動β) 〔このブログ〕は〔Cookie〕を利用している。〔このブログ〕を利用することで、〔あなた〕はCookieの利用に同意したとみなされる。
(自動β) 〔このブログ〕は表示するフォントに〔にしき的フォント〕を利用している。

Twitter

アクセスランキング

[ジャンルランキング]
サブカル
230位
アクセスランキングを見る>>

[サブジャンルランキング]
その他
63位
アクセスランキングを見る>>

最新トラックバック

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

[TeX] fontspec について。

この記事は、 TeX & LaTeX Advent Calendar 2019 の、5 日目の記事です。4 日目は ToshioCP さんの Linux, LaTeX, Beamer and Tikz で、6 日目は uwabami さんの TeX on Debian 10 (Buster) です。

さて、今回の重点テーマは「やっぱりLua(La)TeXしよう」とのことですが。 みなさん、LuaLaTeX つかってますか? そして、使っている方は、なぜ LuaLaTeX を使っていますか?

私も LuaLaTeX を使っているタイプの人間なのですが、LuaLaTeX を使い始めたきっかけは、 システムにインストールしてあるフォントを比較的自由に使える ということが 理由として大きかったです。せっかく LETS のライセンス契約したんだから、使ってゆかないと損じゃん?

ということで、LuaLaTeX でフォントを自在に使うため、 fontspec パッケージの使い方について、 すこし説明します。 私は TeX 芸人ではないので、間違いなどがあったらコメントやツイッターで教えていただけると幸いです。

以下、いろいろと述べますが、結局ソースコードを見たほうが早いので、 epgit/epgit.tex [GitHub] あたりのプリアンブルも参考にしてください。また、日本語で fontspec するのであれば、 LuaLaTeX-ja を使うのが普通だと思うので、 その前提で話をします。XeLaTeX は知らないですね……。

読み込む

とりあえずパッケージを読み込まなければ始まりません。 fontspec パッケージを読み込むためには、\usepackage{fontspec} とすればよい、 わけではなく、\usepackage[⟨options⟩]{luatexja-fontspec} とします。 LuaTeX-ja が欧文文字と和文文字を区別しているため、和文文字に対しても fontspec の機能を使うために、 luatexja-fontspec パッケージを読み込むことが必要です。

luatexja-fontspec も fontspec と基本的な使い方は変わりません。 fontspec で定義されている \ナントカfontナントカ という命令を和文文字に対して使いたい場合は、 \ナントカjfontナントカ とすればいいだけです(luatex-ja のマニュアル 3.2 節)。 \setmonojfont(規定の等幅フォントを設定するためのコマンド) を使いたい場合は、luatexja-fontspec のオプションに、 match を渡す必要があります。渡さない理由はあまりないので、いつも渡すことにしても良いでしょう。

規定のフォントを変える

和文の規定フォントを変えたい場合、luatexja-preset パッケージを使うと便利です。 普通の人はこれで事足りていると思います。詳しくは、ターミナルで % texdoc luatex-ja として出てくるマニュアルの、3.3 節あたりを参照してください。

ただ、このプリセットだけでは満足できないと言う人がいるでしょう。 このようなときには、\setmainfont の出番です。 プリアンブルで、\setmainfont{⟨フォント⟩}[⟨オプション⟩] としましょう (先に述べたとおり、これは欧文にしか効かないので、和文フォントを変更するには、\setmainjfont です)。

規定のサンセリフフォントや、等幅フォントを変更したい場合は、 main の代わりに sans mono とします。

フォント変更の命令

規定のフォントではなく、一時的にフォントを変更するような命令を作るためには、 \newfontfamily⟨\命令⟩{⟨フォント⟩}[⟨オプション⟩] とします。{\命令 ほげほげ} でフォントが変わります。

例によって、和文のフォントを変えるためには、 \newjfontfamily⟨\命令⟩{⟨フォント⟩}[⟨オプション⟩] なのですが……。 例えば、欧文と和文両方のフォントを font1 に変更するための命令 \textfontAを作るとします。 愚直にやれば、 \newfontfamily\tempa{font1} \newjfontfamily\tempj{font1} \newcommand{\textfontA}{\tempa\tempj} となります。が、面倒です。なんか、もっとスマートなやり方ないですかね。

フォントの選択

さて、フォントを変更するには、使いたいフォントを指定しなければならないのですが、どうやって指定するかです。 が、そこらへんの話は、私はよくわかってません。(後述)

と思ったら、fontspec のマニュアルに詳しく書いてありました。 % texdoc fontspec とやって出てくるマニュアルの第 2 章です。

ただ、私は “By font name” の指定方法でうまく行かないことが多かったので、 それ以外の方法を紹介します。

「“By font name” の指定方法でうまく行」かなかったのは、おそらく指定したフォントの問題と思われます。 試しに \setsansjfont{Noto Sans CJK JP} としてみたら期待通りの挙動: 正しくフォントが変更され、 自動的にボールド体も利用できるようになっていました。

私が「“By font name” の指定方法でうまく行」かない時は、いつも FONTWORKS の LETS でインストールしたフォントを指定したときで、例えば\setsansjfont{FOT-ロダンNTLG Pro} とすると、“The font "FOT-ロダンNTLGPro" cannot be found.” と言われて止まります。 LETS でインストールしたフォントについては、TeX 以外でも他のフォントと異なる挙動を示すことがあるので、 まあ、フォント自体に何か細工してあるんだろうな、と言う感じです。

うまくフォントを指定できないときは、フォントのファイル名を調べて、 ファイル名から拡張子を除いた部分を指定してやれば大概うまくいきます。 ただ、この方法では太字やイタリック体を明示的に指定してやらなければなりません。 明示的な指定のしかたは次の節で。

12月5日午前7時追記: フォントのファイル名から指定してもうまく行かないパターンを見つけました。 macOS が利用している、ファイル名に拡張子がついていないフォント (font suitcase) です。 font suitcase の場合は、そもそも fontspec が対応していない(多分)ので、変換してやる必要があります。 変換のしかたは qiita に書いておいたので、そちらを参考に変換してください。

追記ここまで

fontspec のマニュアル 2.3 節には “By custom file name using a .fontspec file” というのがありますが、これは知らなくても大概の場合困らないでしょう。私は目を通してませんが困ったことはない。

また、私は使ったことがないのでわかりませんが(本当なら一般配布する tex ソースには使うべきですが)、 \IfFontExistsTF{⟨font name⟩}{⟨true branch⟩}{⟨false branch⟩} で、フォントが存在するかどうかで条件分岐ができるらしいです(fontspec のマニュアル 2.4 節)。

オプションにわたすもの

key-val 形式で、様々なものをオプションで渡すことができます。 というか、渡せるものが多すぎて、さらにマニュアルにも一覧的なものがないために、 何がどうなっているか把握できてないです。ということで、頻繁に使うものを。

Ligatures

リガチャの設定です。今まで通りの TeX 的に使いたければ、TeX を値に設定してください。

等幅フォントの場合は、勝手にリガチャされたら困ることがあります。 少なくとも -- が – にリガチャされるのは、 ターミナルに打ち込むコマンドを紹介する文脈ではとても困ります。 このような場合は、TeXReset を設定します。

12月6日午前1時追記: その他、多機能なリガチャを利用するためには、 fontsspec のマニュアル 3.1.8 小節を参照。追記ここまで

Bold(Italic)Font

明示的にボールド体やイタリックを指定するオプション。

フォント名でフォントを指定した時は気にしなくて良いことが多いですが、 特に、ファイル名でフォントを指定した時はここで明示的にフォントを指定しなければ、 ボールド体やイタリックを利用することができません。

CharacterWidth

Proportional を指定すれば、プロポーショナル組になる。

fontspec のマニュアル 3.2.2 小節。

luatexja-fontspec 特有のもの

私はあまり使ったことがない。縦組と横組でいろいろ変えることができるらしい。 luatex-ja のマニュアルの 11.1 節に載ってます。

12月6日正午追記: 「私はあまり使ったことがない」って書いてましたが、嘘でした。

私は jlreq クラスを用いることが多いのですが、適切に JFM (行組版のためのパラメタ) を設定してやらなければ jlreq が定めている JFM が維持されません。ということで、 jlreq を使っている場合は YokoFeatures={JFM=jlreq}, TateFeatures={JFM=jlreqv}, を設定する必要があります。詳しくは ZR さんの qiita の記事 を参考にしてください。

追記ここまで

12月6日正午追記: luatexja-fontspec を利用すれば、簡単に和漢混植できるらしいですね! ということでZR さんの や、luatex-ja の 11.1 節あたりを参考にして、 試してみました

が、うーん? 代替フォント(として設定したひらがな・カタカナ)に BoldFont のフィーチャーが効いてないな? 私の設定が悪いのか、サポートされてないのか、バグなのか。

追記ここまで

12月6日午後1時追記: 結局上の件は、私の使い方がマチガッていたからみたいですね。 BoldFeatures の中で AltFont を指定したら正しく動きました。 ソースはこのツイート から。

追記ここまで

Fakeナントカ

機械変形で太字(おそらく重ね打ち)やスラント体を作れるらしい。 この記事を書いて初めて知った。

あまり使うべきではないですが、fontspec のマニュアル 6.7 節を参照。

12月5日午前6時追記、午後3時更に編集: 古い LuaTeX だとつかえない、みたいな指摘がありましたが、手元の環境では使えたので、 多分最新版だと fontspec を新しくしていれば使えると思います。 詳しくは、 この一連のツイート を参照してください。

追記ここまで

12月5日午前6時追記

FakeBold は重ね打ちですが、PDF からコピペするときには正確なテキストの情報を保持するっぽいです。 重ね打ちをすると、重ね打っただけのテキストがクリップボードにコピーされる実装をまれに見るので油断ならない。

あと、重ね打ちよりも機械的に肉付けするほうが視覚的に美しくなる場合がほとんどです。 というわけで、フォントのライセンスが許して、気力があるならば、肉付けしたフォントを合成したほうが良いかもしれません。 グリフの量によっては時間はかかりますが、fontforge で簡単に肉付けできるので、試してみる価値はあるでしょう。 実際、このブログのフォントとして Nishiki-teki を採用した時に、ボールド体として Nishiki-teki-SBmod.ttf を作成しましたし。

追記ここまで

……多すぎませんかね? 多分、実用上は上に上げたものだけで大丈夫だと思うのですが、 他にも機能がほしいと思えば、fontspec のマニュアルを読んでください。 コメント投げてくれれば私の方で調べるかも。

結局よくわかっていないこと

12月6日追記: 12月5日も終わりましたし、自分の忘備録も兼ねて、 結局良くわかっていないことを並べておきます。

①結局 font suitcase ってなんぞや。 Mac でフォントをインストール/削除する方法 の最後に、Legacy suitcase TrueType フォントと PostScript Type 1 LWFN フォントは機能する場合もありますが、 非推奨です。と書いてあるが、「Legacy suitcase TrueType フォント」は font suitcase と同一なのか。 仕様書みたいなのがあれば目を通したいのですが。

②わかっていないことではないですが、fontforge で太字を作る方法は紹介したほうが良さそうですね。

てなわけで fontspec についてのお話でした。

トラックバック
トラックバック送信先 :
コメント

プロフィール

さーくる⑨

Author:さーくる⑨

Please email us to
circle9.mail☯gmail.com

さーくる⑨のメンバーは、

原メンバー

  • Carele Smith(代表)
  • kalna
  • Water Fall
  • Ocean@海P
  • NEO

準メンバー

  • ほたて(イラストレーター)
  • (雑用)

VISION は亡くなったんだ……!!

公式のデータベースのアーカイブとか、それと同等なものとか、 富山大会に関することとかです。

M.I.W. 公式だったもの:
頼子ドットインフォ:
さーくる⑨独自:
参加者心得は、参加者の方は必ず目を通して下さい。

検索フォーム

広告

リンク

管理画面


当ブログはリンクフリーです。これをクリックすれば、FC2 ブログの人はこのブログをリンクに追加できます。

相互リンクも募集してます。Twitter か何かで声かけてください。

East Opera 2019

http://www.circle9.work/e-banner.png

上はこのページのバナー(2019年版)です。直リンクでバナー貼ってくれると、年代わりに更新されるはずだよ! サイト名は" East Opera 20XX"でもok。 XXの部分は毎年変わります。


リンク集

以下さーくる⑨が運営/管理するサイト

以下VISION関連

以下東方関連

以下カードゲーム(トランプ)関連

その他

  • さんろ研究室
  • メールフォーム

    さーくる⑨ (circle9.mail☯gmail.com)

    名前:
    メール:
    件名:
    本文:

    乱数カード考察:課題

    VISIONのカードをランダムに選んで、それを考察しよう。忘れられたカードを再発掘しよう。新しい価値を見つけよう。
    現在の課題は
    • No.549 呪海に眠る記憶
    • No.640 地霊殿
    • No.973 萎縮
    • No.1518 八雲 藍
    エントリーはこちら
    古い記事には、最新のエラッタやテキスト修正、または最新の環境が反映されてませんので、ご注意ください。

    ブログ更新する人へ: テンプレートは下書き保存してあるので、記事の管理よりそこから記事を書いてください。その際、公開設定は「公開」保存日時は「保存した日時」にしてください。

    ブロとも申請フォーム

    ブロとも一覧