我想知道在 Devanāgarī 和音译中并行排版一些梵语字符串的最佳方法是什么。目前我可以想象用表格来做,如下例所示:
\documentclass{memoir}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\newfontfamily\sanskritfont[Script=Devanagari,Mapping=RomDev,
Scale=2.2,
]{Sanskrit 2003}
\setlength{\tabcolsep}{0pt}
\begin{document}
\begin{tabular}{cccccccccc}
\textsanskrit{a}&\textsanskrit{tha}&\hspace{0.5cm} &\textsanskrit{yo}&\textsanskrit{gā}&\textsanskrit{nu}&\textsanskrit{śā}&\textsanskrit{sa}&\textsanskrit{na}&\textsanskrit{m} \\
a&tha& &yo&gā&nu&śā&sa&na&m \\
\end{tabular}
\end{document}
我对此还不太满意,因为在某些地方音节之间似乎存在很小的间隙,单词之间的空格不能自动起作用,而且设置这样的表格当然需要大量的手动工作。
我可以想象一个以音译梵语字符串作为其一个参数的命令,然后
- 将字符串拆分成音节,
- 算上这些,
- 相应地设置一个表格,可能处理较长字符串的换行符和分页符。
但这可能不是最好的方法。除了表格之外,还有其他更好的水平对齐文本的方法吗?
印度语环境中的音节通常是辅音(音群)与附加元音(或双元音)的组合,可能还有修饰语(Visarga、Anusvāra、Candrabindu 等)。两种例外情况是 1) 单词开头的独立元音,以及 2) 以辅音结尾的单词。(嗯,在 Devanāgarī 中,人们通常会将以元音开头的单词与以辅音结尾的前一个单词连接起来,但在音译中人们不会这样做。)hyph-sa.tex
已经具备所有这些特点了。
如果通过表格来执行此操作,那么 LaTeX 可能不是生成表格代码的最佳工具,从外部生成它可能更容易,例如使用 perl 脚本。
答案1
这不是一个完美的解决方案,而只是为了帮助您入门(并帮助其他人理解这个问题):
安装字体后Sanskrit2003 来自这里和Romdev.tec 在此处,可以尝试以下方法:
\documentclass{memoir}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{english}
\setotherlanguage{sanskrit}
\newfontfamily\sanskritfont[Script=Devanagari,Mapping=RomDev,Scale=2.2]{Sanskrit 2003}
% \def\s#1{\vtop{\hbox{\textsanskrit{#1}}\hbox{\hss#1\hss}}}
\newbox\boxA
\def\s#1{%
\leavevmode%
\setbox\boxA\hbox{\textsanskrit{#1}}%
\vtop{\copy\boxA\hbox to \wd\boxA{\hss#1\hss}}}
\begin{document}
\textsanskrit{atha yogānuśāsanam} % Just text, for comparison
\s{a}\s{tha} \s{yo}\s{gā}\s{nu}\s{śā}\s{sa}\s{na}\s{m}
\end{document}
宏的工作原理:例如,\s{yo}
首先将 यो ( 的结果\textsanskrit{yo}
) 放入\boxA
,然后将两个框排版为一个在\vtop
另一个上方 ( ):即\boxA
上方\hbox to \wd\boxA{\hss yo\hss}
。\hss
是“水平拉伸或收缩”的 TeX 基元,因此拉丁字母“yo”位于与梵文 यो 大小相同的框的中心。
\s{...}
你可以在一行中放置一堆这样的s,并且行会在空格处断开,但不会在其他任何地方断开。
当然,打字\s{a}\s{tha} \s{yo}\s{gā}\s{nu}\s{śā}\s{sa}\s{na}\s{m}
也不是很方便,所以也许有人会有更好的方法:-)(或者你可以从外部程序生成该输入。)