字体不适用于 Lualatex 中的文本

字体不适用于 Lualatex 中的文本

我无法让梵文字符显示在以下 MWE 中。尝试通过 lualatex 进行处理。奇怪的是,它吐出了以下与 xetex 相关的错误:

> hyph-sa.pat.txt Language sanskrit was not yet loaded; created with id
> 4 Language sanskrit already loaded; id is 4 Package polyglossia Info:
> Skipping automatic font setup for language sanskrit.
> 
> ! Undefined control sequence. l.53 \newXeTeXintercharclass
>                           \sanskrit@punctthin % ! ? ; : danda double_danda ?  ! Undefined control sequence. l.53
> \newXeTeXintercharclass\sanskrit@punctthin
>                                               % ! ? ; : danda double_danda ?  )

这是我正在使用的代码。

\documentclass[9pt,a5paper]{memoir}
\usepackage[text={4.3in,6.95in}]{geometry}
\usepackage{polyglossia}
\setmainlanguage{english}
\setdefaultlanguage[variant=british]{english}
\setotherlanguages{sanskrit}
\usepackage{fontspec}
\setmainfont{Shobhika}[Script=Devanagari]
\newfontfamily\englishfont{DejaVu Serif}
\newfontfamily\devanagarifont{Shobhika}[Script=Devanagari,Ligatures=TeX]

\begin{document}

\chapter{Hymn to Lord Vasudeva. (श्रीवासुदेवाष्टकम्)}

नमोऽस्तु नारायण कृष्णचन्द्र\\
नमोऽस्तु नारायण राघवेन्द्र।\\
नमोऽस्तु नारायण मुक्तिहेतो\\
नारायणायैव नमो नमोऽस्तु॥१।१॥\sourceatright{(adapted from~लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ८०-८१)}


1. O Krishnachandra Narayana, I bow to Thee. O Raghabendra Narayana, I
bow to Thee. O Giver of Moksha, O Narayana I bow only to Thee.


वासुदेवाय वन्द्याय वरदाय वरात्मने।\\
अभय-वर-हस्ताय वराय वररूपिणे॥१।२॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् २)}


2. I bow repeatedly to Vasudeva, Who is revered by all, Who bestows
boons and Who is Supreme absolute, from Whose hands, boon and safety
from all dangers are obtained by creatures and Who is the embodiment of
all boons.


सर्व्वारिष्ट विनाशाय सर्वसम्पत्-कराय च।\\
सर्वदुःखप्रशान्ताय सर्व्वसौभाग्यदायिने॥१।३॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४६)}


3. I bow to Thee, Who destroys all evils and bestows all that is good
for us, Who relieves us from sorrows and sufferings and gives us good
fortune.


सर्व्वैश्वर्यप्रदात्रे च सर्व्वकार्य्य-विधायिने।\\
सर्व्वज्वरविनाशाय सर्व्वरोगापहारिणे॥१।४॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४८)}


4-5. I bow repeatedly to Thee, Who gives us all wealth, bestows success
to all our works, Who drives all our diseases away, Who kills our
enemies, Rakshasas and ghosts, removes all our obstacles, and drives
away the darkness of ignorance.

शत्रुघ्नाय अविघ्नाय विघ्नकोटि-हराय च।\\
रक्षोघ्नाय तमोघ्नाय भूतघ्नाय नमो नमः॥१।५॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४३)}
अनादिस्त्व-मनन्तस्त्व-मभूतो भूत-विग्रहः।\\
स्तुति-स्तुत्य-स्तवप्रीतः स्तोता नेता नियामकः॥१।६॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ९८)}



\end{document}

答案1

您收到与 XeTeX 相关的错误,因为 中的梵语支持polyglossia需要 XeLaTeX,而不能与 LuaLaTeX 一起使用。这是因为它使用了\XeTeXintercharclass,而目前没有 LuaLaTeX 等效版本。

此外,语言之间的切换不是自动的:您需要在其自己的环境中或\text<language>较小的部分中标记任何非默认语言。

此要求扩展到memoir格式化命令,需要对其进行更改才能使用\englishfont

由于该文档具有一些常规结构,我还添加了一些宏以使事情变得更简单:

  • 使用的verse环境来自memoir
  • \begin{sanskrit}并添加\end{sanskrit}到每个verse环境中
  • 创建了一个\newverse宏来自动引入编号部分

我还删除了一些多余的行:(\setmainlanguage{english}您只需要\setdefaultlanguage\usepackage{fontspec}(由 加载polyglossia)。

使用 XeLaTeX 编译:

\documentclass[9pt,a5paper]{memoir}
\usepackage[text={4.3in,6.95in}]{geometry}
\usepackage{polyglossia}
\setdefaultlanguage[variant=british]{english}
\setotherlanguages{sanskrit}
\setmainfont{ITF Devanagari Book}[Script=Devanagari]
\newfontfamily\englishfont{DejaVu Serif}
\newfontfamily\devanagarifont{ITF Devanagari Book}[Script=Devanagari,Ligatures=TeX]
\renewcommand{\chapnamefont}{\englishfont}
\renewcommand{\chapnumfont}{\englishfont}
\renewcommand{\chaptitlefont}{\englishfont}
\newcounter{myverse}
\newcommand\newverse{\stepcounter{myverse}\noindent\themyverse.\quad}
\usepackage{etoolbox}
\AtBeginEnvironment{verse}{\begin{sanskrit}}
\AtEndEnvironment{verse}{\end{sanskrit}\par\bigskip}
\begin{document}

\chapter{Hymn to Lord Vasudeva. \textsanskrit{(श्रीवासुदेवाष्टकम्)}}
\begin{verse}
नमोऽस्तु नारायण कृष्णचन्द्र\\
नमोऽस्तु नारायण राघवेन्द्र।\\
नमोऽस्तु नारायण मुक्तिहेतो\\
नारायणायैव नमो नमोऽस्तु॥१।१॥\sourceatright{(\textenglish{adapted from}~लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ८०-८१)}
\end{verse}

\newverse O Krishnachandra Narayana, I bow to Thee. O Raghabendra Narayana, I
bow to Thee. O Giver of Moksha, O Narayana I bow only to Thee.

\begin{verse}
वासुदेवाय वन्द्याय वरदाय वरात्मने।\\
अभय-वर-हस्ताय वराय वररूपिणे॥१।२॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् २)}
\end{verse}

\newverse I bow repeatedly to Vasudeva, Who is revered by all, Who bestows
boons and Who is Supreme absolute, from Whose hands, boon and safety
from all dangers are obtained by creatures and Who is the embodiment of
all boons.

\begin{verse}
सर्व्वारिष्ट विनाशाय सर्वसम्पत्-कराय च।\\
सर्वदुःखप्रशान्ताय सर्व्वसौभाग्यदायिने॥१।३॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४६)}
\end{verse}
\end{document}

3. I bow to Thee, Who destroys all evils and bestows all that is good
for us, Who relieves us from sorrows and sufferings and gives us good
fortune.


सर्व्वैश्वर्यप्रदात्रे च सर्व्वकार्य्य-विधायिने।\\
सर्व्वज्वरविनाशाय सर्व्वरोगापहारिणे॥१।४॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४८)}


4-5. I bow repeatedly to Thee, Who gives us all wealth, bestows success
to all our works, Who drives all our diseases away, Who kills our
enemies, Rakshasas and ghosts, removes all our obstacles, and drives
away the darkness of ignorance.

शत्रुघ्नाय अविघ्नाय विघ्नकोटि-हराय च।\\
रक्षोघ्नाय तमोघ्नाय भूतघ्नाय नमो नमः॥१।५॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ४३)}
अनादिस्त्व-मनन्तस्त्व-मभूतो भूत-विग्रहः।\\
स्तुति-स्तुत्य-स्तवप्रीतः स्तोता नेता नियामकः॥१।६॥\sourceatright{(लक्ष्मीनरसिंह सहस्रनामस्तोत्रम् ९८)}



\end{document}

代码输出

答案2

我目前正在研究对babel“复杂脚本”的支持,它有点不稳定,但 Alan Munn 的帖子中带有文档主体的以下序言似乎有效。不幸的是,默认luatex字体加载器对印度脚本有问题(许多集群可能无法正确呈现),所以很可能你xetex最终必须使用它。

\documentclass[9pt,a5paper]{memoir}

\usepackage[text={4.3in,6.95in}]{geometry}

\usepackage[british]{babel}

\babelprovide[import=en-GB]{british}
\babelprovide[import=hi]{sanskrit}

\usepackage{fontspec}
\newfontscript{Devanagari}{deva}

\babelfont{rm}{DejaVu Serif}
\babelfont[sanskrit]{rm}{Shobhika}

\babeltags{sanskrit = sanskrit, english = british}

\newcounter{myverse}
\newcommand\newverse{\stepcounter{myverse}\noindent\themyverse.\quad}
\usepackage{etoolbox}
\AtBeginEnvironment{verse}{\begin{sanskrit}}
\AtEndEnvironment{verse}{\end{sanskrit}\par\bigskip}

编辑。添加了\newfontscript{Devanagari}{deva},这似乎是此字体中的正确 OpenType 脚本(而不是dev2默认选择的 )。

相关内容