マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

般若心経 LuaTeX

「LuaLaTeX で fontspec する件」が無事に動作したので、集いの発表でもネタに使った「般若心経」を組版してみる。ソースはこんな感じである。なお、強制改行や改段落を多用して行分割や分綴の問題を避けていることに注意されたい。


\documentclass[a4paper]{article}
\usepackage[scale=0.86]{geometry}
\pagestyle{empty}
\setlength{\parindent}{0pt}
% フォント定義
\usepackage{fontspec}
\newfontfamily\ipaexm[CJKShape=Traditional]{IPAexMincho} % 漢字
\newfontfamily\chandas[Script=Devanagari,Scale=1.2]{Chandas} % デーヴァナーガリー文字
\newfontfamily\tgpagella{TeX Gyre Pagella} % サンスクリット、ラテン翻字
\newfontfamily\charis{Charis SIL} % ロシア語、キリル文字
\newcommand*{\zs}{\hspace{1em}} % 全角幅空白
\begin{document}
%--------------------------------------- 漢文
\begin{flushleft}\ipaexm
仏説摩訶般若波羅蜜多心経\par
観自在菩薩\zs 行深般若波羅蜜多時\zs 照見五蘊皆空\zs 度一切苦厄\par
\end{flushleft}
%--------------------------------------- サンスクリットデーヴァナーガリー文字表記
\begin{flushleft}\chandas\linespread{1.5}\normalsize
प्रज्ञापारमिताहृदयसूत्रम्।\par
नमः सर्वज्ञाय॥\par
आर्यावलोकितेश्वरो बोधिसत्त्वो गंभीरायां प्रज्ञापारमितायां चर्यां चरमाणो\\
व्यवलोकयति स्म । पंचस्कन्धाः । तांश्च स्वभावशून्यान्पश्यति स्म ॥
\end{flushleft}
%--------------------------------------- サンスクリットラテン文字表示
\begin{flushleft}\tgpagella\itshape
prajñā-pāramitā-hṛdaya-sūtram\par
namaḥ sarvajñāya.\par
āryāvalokiteśvaro bodhisattvo gaṃbhīrāyāṃ prajñā-pāramitāyāṃ caryāṃ caramāṇo\\
vyavalokayati sma: paṃca-skandhāḥ: tāṃś ca svabhāva-śūnyānpaśyati sma.
\end{flushleft}
%--------------------------------------- ロシア語
\begin{flushleft}\charis
Сутра сердца праджня-парамиты\par
Бодхисаттва Авалокитешвара во время осуществления глубокой
праджня-парамиты ясно увидел, что все пять скандх пусты.
Тогда он избавился от всех страданий, перейдя на другой берег.
\end{flushleft}
\end{document}

「集い」での例では、ロシア語のフォントを「TeX Gyre Schola」にしていたが、昨日述べた事情があるので、「Charis SIL」に変更した。

XeLaTeX での組版結果はこんな感じ。想定通りの結果になっている。

一方、LuaLaTeX ではデーヴァナーガリー文字が残念なことになってしまった…。

先頭の行で、冒頭の pra(प्र)はもしかしたらこれでもいいのかも知れないが、最後の -m(म्)が半形なのはありえないだろう。さらに、mi(मि)で母音文字が子音文字の左に書かれるという処理ができていない。要するに全然使い物にならない結果である。

OpenType の理屈でいえば、少なくとも「デーヴァナーガリー文字では母音 i のグリフは子音の左に置く」といった規則はレンダリングする側が理解している必要があったはずだが、そうすると、LuaLaTeX で正しい結果を得るためには、該当の処理を Lua で「実装」する必要があるということになりそうである。まあ、仮にそうだとしても、そのうち誰かが実装するような気がする。恐らく日本語よりも先に。

※ 「般若心経」の全文を入力した LaTeX 文書とそれの XeLaTeX/LuaLaTeX での組版結果(PDF)からなるアーカイブを以下の場所に置いた。