MENU

溶けかけてるうさぎ HP BLOG TOP RECENT ARTICLES POPULAR ARTICLES ABOUT THIS BLOG

CATEGORY

大学 (85) 航空宇宙 (55) 写真 (25) 旅行 (14) 飯・酒 (11) コンピュータ (88) その他 (13)

TAG

ARCHIVE

2018 (92) 2017 (80) 2016 (0)

RECENT

【駅メモ】4年目に突入して,ようやく3000駅突破 【WebRTC】Raspberry Pi搭載ロボットをWebRTCで遠隔操作しようとして失敗した 【航空宇宙】航空宇宙アドベントカレンダー 始まります! 【Perl】YAPC::Tokyo 2019 のチケットを確保しました! 【カメラ】Canonから富士フイルムに乗り換えました

【LuaTeX】upLaTeXからLuaTeXへの乗り換え

2017-06-11

LaTeXでもMS Wordのように自由にフォントを使い分けたい! と長年思っていたのだが,なかなか実現できなかった.

いろいろ調べてみると,upLaTeXでフォントを変えるのは難易度が高いことがわかり,フォントを変えやすいLuaTeXを導入しようと決心した.

1.LaTeXにおけるフォント利用の問題

によると,

TeX あるいは LaTeX におけるフォントの利用については、なかなか思うようにいかなかったり、使いたいフォントがあってもどうしたらよいのか分からなかったりして、困った経験がある方も多いと思われます。

 

これは、TeX 以外の多くのアプリケーションソフトが OS にインストールされたフォントを OS の機能を通じて利用しているのに対して、TeX の場合はそうではないからです。TeX が開発されたころには、現在のように TrueType のようなフォント形式が一般に広まっているという状況ではなく、TeX での高度な数式組版に使えるだけの組版情報を持ったフォントもなかったので、TeX での組版に使えるフォントの規格までもを含めて開発する必要がありました。ところがその後、TeX 用のフォント規格は一般に普及せず、TrueType や PostScript などのフォント規格が普及するに至りました。その結果、TeX のフォントの扱いのほうが特殊なものになってしまって、OS にインストールされたフォントの利用の仕方についての知識が生かせずに、新たに TeX におけるフォントの利用の仕方を身につけなければいけないという不便な面が目立つようになったというわけです。

 

TeX が組版処理を行う際には、フォントごとに個々の文字の大きさやデザイン上の文字詰めの幅などの情報を TeX が理解できる形式で記されたファイル(TFM ファイル)が必要です。TeX と一緒に開発されたフォント群(Computer Modern ファミリなど)においては当然ながら TFM ファイルが準備されていますので、TeX での利用に問題はありません。ところが現在ユーザーの手元にあるフォントの多くは TeX の後で普及した形式であって、TeX での利用を意図しておらず、対応する TFM ファイルが準備されていません。したがって、それらのフォントを TeX で利用するためには、フォントから個々の文字の大きさなどの情報を抽出して TeX が理解できる形式の TFM ファイルに仕立て上げなければならないわけです。

 

うまく TFM ファイルを用意できて TeX による組版処理が済んだとすると、その TeX の処理結果(DVI ファイル)を表示したり、印刷用フォーマットに変換したりするのはデバイスドライバと呼ばれるプログラムです。DVI ファイルにはフォントに含まれる個々の文字の字形(グリフ)データは含まれていませんから、グリフデータを OS から引き出して利用するために、どの TFM ファイルにどの OS フォントを対応させるのかといったことをデバイスドライバに指示する必要があります。しかし、その指定の仕方や、どの形式のフォントを扱えるかといったこともドライバごとに異なっています。

 

さらに日本語に対応した pTeX については、ソースファイル中の半角文字と全角文字を自動で振り分けて、半角文字には欧文フォントを、全角文字には和文フォントを使うようになっているので、和文フォントに含まれる半角文字(従属欧文)はそのままでは使えないという問題もあります。

 

これまでに行われてきた TeX の拡張で、OS のフォントを直接使えるようにした XeTeX などは縦書きも含めた日本語組版には対応しておらず、逆に日本語組版に対応した pTeX は OS フォントの直接利用には対応していないといった状況です。

 

以上のような状況は、例えば LaTeX の出力で TrueType や PostScript などのフォントを利用可能にする際に、かなりの手間と不思議なファイル群の導入や各種設定の必要性をもたらします。LaTeX で TrueType フォントを利用して出力を得る際のおおまかな流れは、

 

フォントファイルから組版に必要な情報を抽出する。(TFM ファイルの生成)
上記で抽出した情報に、ある一定の規則でアクセスする設定を行う。(.fd ファイルの作成)
フォントファミリとエンコーディングやフォント属性のセットを指定することでフォント情報にアクセスできるようにします。
フォント情報と実際のフォントファイルとの対応付けを行う。(.mapファイルの編集)

 

といった感じです。今ではこれらの作業を行う便利なツールがありますが、それでもなれない人にとっては未だ大変な作業で、うまくいかないこともあるでしょう。何か使ってみたいフォントがあったら、とにかくCTAN をあたって既にパッケージが用意されていないか調べましょう。

とあり,さらに

LaTeX の細かい知識に関心がなく、フォント設定の煩わしさを少しでも軽減したければ、この文書は読まずに XeLaTeX や LuaLaTeX への移行を考えましょう。

と言っている.

 

また,upLaTeXでフォントをカスタマイズした記事として,があるが,なかなかつらそうである.さらにこの記事では和文フォントにしか言及しておらず,欧文フォントについては有益な情報が見つからなかった.

2.fontspec パッケージ

fontspecという,OSにインストールされているフォントを比較的楽に使用できるパッケージがあることを知った.

ただし,これはXeLaTeX,LuaLaTeXでのみしか利用できない.

 

そこで,upLaTeXを捨て,LuaTeXを導入しようと決心した.

 

にfontspecについて以下のような記載がある.

LuaTeX ではフォントの扱いも従来の TeX より拡張されており,TrueType/OpenType フォントを直接扱うことができます. LaTeX でフォントの設定を行うためのパッケージが fontspec であり,これを用いることでソース中に使用する(=埋め込む)フォントの指定を書くことができます.

さらにには,

fontspec パッケージは,LuaTeX・XeTeX において TrueType・OpenType フォントを容易に扱うためのパッケージであり,このパッケージを読み込んでおけば Unicode による各種記号の直接入力もできるようになる.LuaTeX-ja では和文と欧文を区別しているため,fontspec パッケージの機能は欧文フォントに対してのみ有効なものとなっている.

LuaTeX-ja 上において,fontspec パッケージと同様の機能を和文フォントに対しても用いる場合はluatexja-fontspec パッケージを読み込む.

とあるので,LuaTeXを導入し,luatexja-fontspecパッケージを使えばよさそうである.

 

fontspecの提供する命令について,にとても詳しく解説されている.

fontspecを使用するにあたって,“属性リスト”なるものに頭を悩まされたのだが,それについても解説がある.

以下に抜粋しておく.

fontspec の提供する命令のうち、必要最低限のものを挙げる。

 

\fontspec[<属性リスト>]{<ファミリ名>} : その場でファミリを変更する。 使い方は \rmfamily 等の総称ファミリ命令と同じである (もちろんこの命令は総称ファミリではないが)。
\newfontfamily\命令[<属性リスト>]{<ファミリ名>} : \命令 を指定のファミリに切り替える命令として定義する。
\setmainfont[<属性リスト>]{<ファミリ名>} : 総称ファミリの \rmfamily(セリフ)に割り当てるファミリを指定する。
\setsansfont[<属性リスト>]{<ファミリ名>} : 総称ファミリの \sffamily(サンセリフ)に割り当てるファミリを指定する。
\setmonofont[<属性リスト>]{<ファミリ名>} : 総称ファミリの \ttfamily(等幅)に割り当てるファミリを指定する。

ここで、「ファミリ名」には、先述した通りの実際のフォントファミリ名、 すなわち「IPA明朝」(あるいは「IPAMincho」)「Tahoma」等を指定する。

 

「属性リスト」の部分には「<属性名>=<値>」 の形式の属性指定をコンマ区切りで書き並べる。 指定できる属性の種類は極めて多いのであるが、 日本人が普通に使う場合に絞って、最低限必要になりそうなものを紹介する。 (専ら欧文用の設定については省略している。 全体が知りたい場合は fontspec パッケージの説明書を参照してほしい。)

 

BoldFont=<フォント名>
ItalicFont=<フォント名>
BoldItalicFont=<フォント名>: 通常、上述の命令を用いてフォントファミリを定義した場合は、 太字やイタリックのフォントは自動的に適当なものが割り当てられる。 例えば、
      \fontspec{Tahoma}
の場合は、太字(\bfseries)のフォントは自動的に Tahoma の Bold 版(これのフォント名は「Tahoma Bold」)になる。 しかし、Tahoma にはそもそも Italic がないので、 上の指定ではイタリック(\itshape)が使えない。 ここでもし代用として Verdana の Italic (実際はイタリックでなく斜体であるが) を使いたい場合は、
      \fontspec[ItalicFont=Verdana Italic]{Tahoma}
と指定すればよい。 同様に、BoldFont は太字、 BoldItalicFont は太字イタリックのフォントを直接指定するのに用いる。
 
ExternalLocation: フォントをフォントファミリ名の代わりにフォントファイルの名前で指定する。 指定されたファイルは Kpathsearch に従って探索される。 (カレントディレクトリは常に検索される。 また W32TeX の場合、Windows にインストールされたフォントも検索対象となる。) この指定の場合、太字とイタリックのフォントの自動的割当は機能しないので、 必要であれば、BoldFont 等で指定する必要がある。
参考: fontspec 2.0 版以降では、 名前が拡張子(.otf 等) を含む場合は自動的にファイル名での指定とみなされ、 ExternalLocation は不要になっている。 また、Extension=<拡張子> で拡張子を別に指定することも可能である (名前は拡張子を除いたファイル名で指定する)。 従って、現在では ExternalLocation が必要なのは 「拡張子を省略(自動判別)してファイル名で指定する場合」 に限られる。
 
Path=<ディレクトリ名>: ExternalLocation と同様だが、探索対象ディレクトリを指定のものに限る。
参考: 2.0 版より前では ExternalLocation=<ディレクトリ名> であった。
 
Scale=<値>: そのファミリの字のサイズを標準(Scale 無指定時)の <値> 倍にする。 同じフォントサイズ(\large や \fontsize で指定するもの) でも書体によって異なる大きさに見えるという場合に調整するために用いる。
 
Scale=MatchLowercase: 現在有効なフォントと「上下の突出部のない英小文字(“x”等)の高さ(x-height)」 が一致するようにサイズを調節する。 (一般的に、異なる欧文フォントが混在している場合には、 x-height を合わせていると字の大きさが揃って見えるとされている。)
 
CJKShape=<値>: 異体字切替。<値> は JIS1978、 JIS1983、JIS1990 のいずれかで、 JIS X 0208 の各々の版の例示字体に相当する字形を選択する。 (JIS2004 はまだ用意されていないので後述の RawFeature 指定を用いる。) もちろん、フォントがこの機構に対応している必要がある。 (補足。2000JIS(JIS X 0213:2000)の例示字体は 90JIS(JIS X 0208:1990) のそれを引き継いでいるので、「2000JIS 字形」 にしたい場合に指定するのは JIS1990 である。)
 
CharacterWidth=<値>: 字幅の切替。<値> は Proportional (プロポーショナル)、Full(全角)、Half(半角)、 Third(三分角)、Quarter(四分角)で、 その幅のグリフを優先的に用いるようになる。 AlternateHalf は約物のみを半角幅にする設定、 AlternateProportional は約物のメトリックをプロポーショナルにする設定。
 
Vertical=RotatedGlyphs: 縦書き用のグリフを横転した形で出力する(書字方向は変わらない)。 graphicx パッケージの \rotatebox 命令と組み合わせることで部分的な縦書きが実現できる。
 
Ligatures=TeX: 従来の LaTeX でリガチャによって実現していた特殊 文字入力―例えば 「?` → ¿」 「--- → —」等―を有効にする。 またリガチャではないが「` → ‘」 「' → ’」(引用符) の変換もここに含まれる。
参考: 全く同じ設定を Mapping=tex-text でも行えるが、 こちらは XeLaTeX 専用で LuaLaTeX では使えない。 Ligatures=TeX は XeLaTeX と LuaLaTeX で共通して使えるように fontspec 2.0 版以降で用意されたものである。 (つまり、XeLaTeX では「Mapping」の機能を用いるが、 LuaLaTeX では全く別の機構を用いて同じ機能を実現している。)
 
RawFeature=<値>: OpenType の属性を直接指定する。 <値> は属性名(英字 4 文字)の前に +(有効化) または -(無効化)を付したものをセミコロンで区切って指定する。 例えば「RawFeature=+smco;-liga」 はスモールキャピタルを有効にしリガチャを無効にする。 以下では特に日本語文書で必要そうな値を挙げておく。
+jp04: JIS X 0213:2004 の例示字体に相当する字形 (いわゆる「2004JIS 字形」)を選択する。 CJKShape=JIS2004 がまた用意されてないのでその代わり。
-palt: XeTeX では(少なくとも一部のフォントで) CharacterWidth=AlternateProportional が既定で有効化されていて、 そのため本来等幅である「和文用の約物」 がプロポーショナル幅になることがある。 -palt 指定は AlternateProportional を無効にする。
参考: この指定法は OpenType レンダリングの時で、AAT を使用する場合は指定方法が異なる。 Mac OS X において AAT と OpenType の両方に対応するフォントを使用する時に、 OpenType ライブラリ(ICU)を用いることを明示する場合は、 Renderer=ICU を指定すればよい。 (Graphite が優先的に選ばれることってあるんですかね…?)

3.Sublime Text 3 でのビルド

」の」で構築した環境をそのまま用いる.

Ctrl + Shift + b でビルドオプション“LaTeX - Basic Builder - LuaLaTeX”でビルド可能だった.

 

BibTeXなどについては,まだ検証していない.

」の」に記事を追加した.

4.使用例

適当にコンパイルしてみた.

ソースコードとコンパイル結果を以下に示す.

注目すべきは,begin - end環境と,\fontHoge{fuga}のスコープの両方で使えることだ.

\documentclass[10pt,a4paper]{ltjsarticle}

\usepackage{luatexja-fontspec}
\newfontfamily\fontConsolas{Consolas}

\begin{document}
\section{使用メモリの変更}
DRとして使用するメモリが,SRAMからFLASHとなったことによる変更などをまとめる.

\subsection{FLASH仕様}
\begin{itemize}
	\setlength{\leftskip}{-15pt}
	\item[・] 約1GBのFLASHの2台構成

	\begin{fontConsolas}
		\noindent
		~~~~~~~~~~~~~total~~~2~130~968~576~byte\\
		~~~~~-----------------------------------\\
		~~~~~~>~~~~2~FLASH~x~1~065~484~288~byte\\
		~~~~~~>~8129~block~x~~~~~~~131~072~byte\\
		~~~~~~>~~~64~page~~x~~~~~~~~~2~048~byte\\
	\end{fontConsolas}

	\item[・] 消去はblock単位
	\item[・] 不良セクタ処理もblock単位
	\item[・] FLASH.Hの仕様
	\begin{itemize}
		\setlength{\leftskip}{-10pt}
		\item {\fontConsolas{FLASH\_erase\_async()}}は消去APIを呼び出して即returnするので,return直後はまだ消去が完了していない.
				処理を完了するためには5 msほど待つ必要がある.
		\item {\fontConsolas{FLASH\_erase\_sync()}}は消去処理を待つ.
	\end{itemize}
\end{itemize}

\subsection{追加された制約条件}
\begin{itemize}
	\setlength{\leftskip}{-15pt}
	\item[・] パーティション境界とblock境界を一致させる
	\item[・] {\fontConsolas{Cmd\_DR\_SET\_WP()}}での移動先wpはblock先頭とする
\end{itemize}

\end{document}
source.tex
source.pdf

また,ここ数日で使用しているLaTeXテンプレートは「」の」に載せた.

5.関連記事

6.出典・参考サイト

TeX Wiki. TeX とフォント. Retrieved June 10, 2017, from https://texwiki.texjp.org/?TeX%E3%81%A8%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88
TeX Alchemist Online. (u)pTeX における和文多書体の実現 〜Sierraの全和文フォント出力を例として〜. Retrieved June 10, 2017, from http://doratex.hatenablog.jp/entry/20161206/1480950097
ja.osdn.net. LuaTeX-ja の使い方. Retrieved June 10, 2017, from https://ja.osdn.net/projects/luatex-ja/wiki/LuaTeX-ja%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9
get-software.net. LuaTeX-ja パッケージ 20170505.0(2017 年 5 月 5 日). Retrieved June 10, 2017, from http://get-software.net/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf
En toi Pythmeni tes TeXnopoleos [電脳世界の奥底にて]. XeLaTeX で日本語する件について. Retrieved June 10, 2017, from http://zrbabbler.sp.land.to/xelatex.html
0番染色体. LuaTeXで使える!便利なLaTeX関連ツール. Retrieved June 10, 2017, from http://0-chromosome.hatenablog.jp/entry/2015/08/10/214938

コメントを投稿

名前

Email (※公開されることはありません)

コメント