まとめてみた。
なぜ和文を斜体しにくいのか
ほとんどの場合、日本語用のフォントには「斜体」の変種は用意されていない1。従って、和文を斜体で出力しようとすると「合成斜体」(直立体のグリフを変形して出力する)を使うことになる。TeXを利用したワークフローにおいても合成斜体は十分にサポートされているのであるが、あまり好まれていないこともあり、LaTeXユーザが簡単に使えるようにはなっていない。特に、「通常のフォント切り替え命令(\textit
や\slshape
等)で和文に斜体が適用される」ような設定はほとんど行われないようである。
“図”として斜体する
斜体の使われ方に関する欧文と和文の間の大きな違いとして「和文の斜体は本文の段落を組むのに使われることが原則的にない」ということがある。つまり和文の斜体の用法の大部分は「図に類するもの(装飾性の高いもの)」ということになるだろう。そういう用法の場合、「フォントとしての斜体」ではなく「図の装飾としての斜体変形」を利用するのが妥当である。
TikZで図を作成する場合、テキストを配置するためにノード(node
命令)を使うことになる。ここでnode
命令のオプションとしてxslant=<割合>
を指定すると、そのノードに斜体変形を適用できる。
例えば次のTikZの文は現在点に25%の斜体変形をかけた「テキスト」の文字を出力する。
\node[xslant=0.25] {テキスト};
※もちろん、ノードのテキストの内容は和文文字に限らない。
「斜体変形をかけた文字を含む図」の実例を挙げておく。
% upLaTeX+dvipdfmx \documentclass[dvipdfmx]{article} %↓単体の図を出力するための準備 \usepackage[papersize={400bp,320bp}, margin=0pt,noheadfoot]{geometry} \usepackage[svgnames]{xcolor} \usepackage{tikz,scsnowman,tikzducks} \setlength{\parindent}{0pt} %↓既定のフォントを"原ノ味ゴシックHeavy"にする \usepackage{lmodern,pxchfon} \setminchofont{HaranoAjiGothic-Heavy.otf} \newcommand{\myPeace}{\fontsize{64}{0}\rmfamily} \begin{document} \begin{tikzpicture}[x=1bp,y=1bp] %↓この辺はいつものやつ☃ \useasboundingbox (0,0) rectangle (400,320); \node at (100,100) {\scsnowman[scale=20, muffler=Red,hat=Green,buttons=RoyalBlue, arms=Brown,snow=SkyBlue]}; \node at (300,92) {\tikz[scale=60]{\duck[ hat=Brown,cape=Orange]}}; % %↓斜体変形をかけた文字を出力する \node[text=Green,font=\myPeace,xslant=0.25] at (200,250) {世 界 平 和}; \end{tikzpicture} \end{document}
TikZの図は段落の中に配置できる(“インライン”の要素である)ので、「図としての斜体」を“流用”する形で文章の一部を斜体の文字で出力することも可能である。ただし元来が図のための機能であるため、そういう使い方には少しコツが要る。詳しい説明は別の記事に譲ることにして、ここでは「斜体変形をかけたテキスト」を出力するマクロを挙げておく。
%% \mySlanted{テキスト}: テキストを25%斜体変形付で出力する. \newcommand*{\mySlanted}[1]{\tikz[baseline=(T.base)]{% \node[inner sep=0pt,outer sep=0pt,xslant=0.25](T){#1}}}
この\mySlanted
を使ったupLaTeX文書の例を挙げておく。
% upLaTeX+dvipdfmx \documentclass[uplatex,dvipdfmx,a4paper]{jsarticle} %↓ゴシック体を"原ノ味ゴシックBold"にする \usepackage[haranoaji]{pxchfon} \setgothicfont{HaranoAjiGothic-Bold.otf} \usepackage{tikz} \newcommand*{\mySlanted}[1]{\tikz[baseline=(T.base)]{% \node[inner sep=0pt,outer sep=0pt,xslant=0.25](T){#1}}} \begin{document} 毎年9月21日は\mySlanted{\gtfamily 世界平和}の日☃です。 \end{document}
ただし、この方法には重大な欠点がある。単に「図を文章内に出力している」に過ぎないので、テキストを途中で改行することができないのである。従って、例えば「段落全体を斜体文字で出力したい」という場合2にはこの方法は使えず、きちんと「フォントとしての斜体」を用意する必要がある。
LuaLaTeXでフォントとして斜体する
LuaLaTeX(やXeLaTeX)ではfontspecの機能が使えるため、合成斜体のフォントを利用するのはそれほど難しくない。
fontspecの機能(\setmainfont
や\fontspec
等)でフォントを定義する際に、パラメタにFakeSlant=割合
を指定すると合成斜体が適用される。例えば、以下のコードは欧文フォントを25%斜体の「Comic Sans MS」に変更する。
% 欧文を25%斜体の"Comic Sans MS"にする \fontspec{Comic Sans MS}[FakeSlant=0.25]
LuaTeX-jaで和文を扱っている場合は、luatexja-fontspecの命令(\setmainjfont
や\jfontspec
等)を使って同様にFakeSlant
を指定すれば合成斜体の和文フォントが利用できる。
% 和文を25%斜体の"HGS創英角ポップ体"にする \jfontspec{HGSSoeiKakupoptai}[FakeSlant=0.25]
\newjfontfamily
を使って斜体の和文フォントを定義する例を挙げる。
% LuaLaTeX分署; UTF-8 \documentclass[a6paper]{ltjsarticle} \usepackage{luatexja-fontspec} % 斜体の"HGS創英角ポップ体"の和文フォント定義 \newjfontfamily{\myPoptai}{HGSSoeiKakupoptai}[FakeSlant=0.25] \begin{document} \myPoptai 日本國民は、正義と秩序を基調とする國際平和を誠實に希求し、 國權の發動たる戰爭と、武力による威嚇又は武力の行使は、 國際紛爭を解決する手段としては、永久にこれを放棄する。 \end{document}
「フォントをイタリック(\itshape
)に変更した場合に和文に合成斜体が適用されるようにしたい」という場合は、ItalicFeatures
というパラメタを使って次のように指定できる。
% ItalicFeaturesの中に書いたパラメタはitshapeの時だけ % 適用される \newjfontfamily{\myPoptai}{HGSSoeiKakupoptai} [ItalicFeatures={FakeSlant=0.25}]
あるいは、この指定と等価になるAutoFakeSlant
というパラメタも用意されている。
% itshapeを合成斜体にする \newjfontfamily{\myPoptai}{HGSSoeiKakupoptai}[AutoFakeSlant=0.25]
AutoFakeSlant
を指定して和文で合成斜体を有効にする例を挙げておく。
% LuaLaTeX分署; UTF-8 \documentclass[a6paper]{ltjsarticle} \usepackage{luatexja-fontspec} %↓itshapeを合成斜体にする \setmainjfont{Harano Aji Mincho}[AutoFakeSlant=0.25] \setsansjfont{Harano Aji Gothic}[AutoFakeSlant=0.25] \usepackage{bxjalipsum} \begin{document} 山路を登りながら、こう考えた。 智に働けば、\textit{ゆきだるま☃。} 情に棹させば、\textit{ゆきだるま☃。} 意地を通せば、\textit{ゆきだるま☃。} \sffamily とかくに人の世は、\textit{ゆきだるま☃。} \end{document}
(もしかして続くかも)