考虑这个相当简单的文档,据我所知,这是排版天城文梵语文本的推荐方式:
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{sanskrit}
\newfontfamily\devanagarifont[Script=Devanagari]{Chandas}
\begin{document}
किं बहुना । परस्परं द्वैधम् उत्पन्नम् ।
\end{document}
当我排版此内容时,即使输出看起来不错,每次尝试从 PDF 复制文本都会产生错误的结果。我尝试了和xelatex
,lualatex
其中四种字体都可以在网上免费获得:钱达斯,Noto Sans Devanagari、Noto Serif Devanagari,阿迪希拉:
正确文字:
- 藝術本身成人护理 成人护理
xelatex
:- 韓國比预期还早(钱达斯)
- 藝術本身艾特里公园(Noto 无天城文)
- 藝術本身成人护理 成人护理(诺托衬线天城文)
- 藝術本身成人护理 成人护理(阿迪什拉)
lualatex
:- 藝術本身परपरं द्वैधम् उपन्नम् । (钱达斯)
- 藝術本身成人护理 成人护理(Noto Sans Devanagari — 此外,输出已损坏)
- 藝術本身成人护理 成人护理(Noto Serif Devanagari — 此外,输出已损坏)
- 藝術本身成人护理 成人护理(阿迪什拉)
所以这些都不正确,尽管对于某些组合来说,只有第一个音节有问题。(它是否是第一个音节并不重要;任何地方的किं 都有同样的问题。)
(补充:这是使用 TeX Live 2020,因此使用 LuaHBTeX……但与两种字体lualatex
相比,输出不正确。)xelatex
有没有办法可以复制正确的文本?
我也尝试使用accsupp
包来包装每个单词,比如\BeginAccSupp{ActualText=किं}किं\EndAccSupp{}
等等,但结果却是完全乱码。
答案1
当我在 TeX Live 2020 上使用 LuaLaTeX 进行编译时,复制并粘贴时会出现此信息:
藝術本身成人护理 成人护理
从以下 MWE,如果您还想定义、等,它还可以为您节省一些\devanagarifontsf
输入\devanagarifonttt
。
\documentclass{article}
\tracinglostchars=2
\usepackage{iftex}
\usepackage{polyglossia}
\ifluahbtex
\defaultfontfeatures{ Renderer=HarfBuzz, Ligatures=TeX }
\fi
\setmainlanguage{sanskrit}
%% Font available at:
%% https://www.google.com/get/noto/#serif-deva
\newfontfamily\devanagarifont[Script=Devanagari]{Noto Serif Devanagari}
\begin{document}
किं बहुना । परस्परं द्वैधम् उत्पन्नम् ।
\end{document}
但是,这仍然无法正确地从 XeLaTeX 复制粘贴。
我通常使用babel
,它可以自动检测我输入的语言,但解决方案非常相似。
正如 Marcel Kruger 在评论中所说,现代 LuaLaTeX 支持 HarfBuzz 渲染,但您需要选择它。