TIPA 和 Fontspec 的更多问题

TIPA 和 Fontspec 的更多问题

我从事了很多梵文和语言学方面的工作。对于梵文(天城文字母),我使用fontspec并渲染xelatex。据我所知,这是唯一的方法。对于语言学,我使用TIPA并且不愿意放弃它,即使只是为了方便输入。

不过,另一个TIPA非常好的功能是组成具有多个重音的字符。TIPA手册本身给出了一个例子\textipa{\’{\"{\u*{e}}}}。使用普通的 Unicode 和系统字体很难令人满意地复制这一点。

现在,当我们音译吠陀梵语时(我目前正在尝试这样做),我们经常必须在字母上的长音符号上放置一个尖音符,例如:

在此处输入图片描述

众所周知,这种重音组合很难实现。使用两个 Unicode 组合变音符号́(U+0301) 和̄(U+0304) 很少能产生好的效果。Unicode 只包含预组合字符 ḗ,它没有 a、i、o 或 u,而且不太可能有,因为我认为 Unicode 现在不推荐使用这种预组合字符。

在过去,我能够很容易地生成上面的字符,使用以下答案这个问题

但是,我买了一台新电脑,因此也“安装”了新的 LaTeX。今天,我遇到了一个全新的问题,我收到了以下错误消息:

(/usr/share/texlive/texmf-dist/tex/latex/metalogo/metalogo.sty)
(/usr/share/texmf/tex/latex/tipa/tipa.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
(/usr/share/texmf/tex/latex/tipa/t3enc.def)
(/usr/share/texlive/texmf-dist/tex/latex/euenc/eu1enc.def))

! LaTeX Error: Command \sups already defined.
               Or name \end... illegal, see p.192 of the manual.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.478   \lower.8ex\hbox{\super{#2}}}{#1}}}`

我知道这一点,TIPA而且fontspec我俩也不是最好的朋友,但即使有办法解决口音问题(这引发了这个问题),我仍然想用它们两个来写文件,因为这TIPA对于 IPA 输入非常有用具有类似 Computer Modern 的字体。它还支持所有不同的样式和系列。此外,我的许多旧文档都使用这两种字体,如果我需要重新编译它们,我必须制作TIPAfontspec运行。

无论如何,回到今天的具体问题,这是导致问题的 MWE:

\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fontspec,xltxtra}
\newfontfamily{\SA}[Script=Devanagari]{Chandas}
\usepackage{tipa}
\newcommand{\acm}[1]{\begin{IPA}\'{\={#1}}\end{IPA}}

\AtBeginDocument{
\renewcommand\textipa[2][r]{{\fontfamily{cm#1}\tipaencoding #2}}
}
\renewenvironment{IPA}[1][r]{\fontfamily{cm#1}\tipaencoding}{}

\begin{document}

  {\SA अग्ने॒ यं य॒ज्ञम॑ध्व॒रं वि॒श्वत॑\XeTeXglyph49{} परि॒भूरसि॑ । \\
  स इद्दे॒वेषु॑ गच्छति ॥ ४ ॥}

  \begin{enumerate}

    \setcounter{enumi}{3}

    \item
    \'{A}gne y\'{a}\d{m} yaj\~{n}\'{a}m adhvar\'{a}\d{m}
    vi\'{s}v\'{a}ta\d{h} paribh\acm{u}r \'{a}si; \\
    S\'{a} \'{i}d dev\'{e}\d{s}u gacchati.

  \end{enumerate}

\end{document}

这里我们有梵文,正如它应该的那样,没有这些TIPA东西:

\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fontspec,xltxtra}
\newfontfamily{\SA}[Script=Devanagari]{Chandas}

\begin{document}

  {\SA अग्ने॒ यं य॒ज्ञम॑ध्व॒रं वि॒श्वत॑\XeTeXglyph49{} परि॒भूरसि॑ । \\
  स इद्दे॒वेषु॑ गच्छति ॥ ४ ॥}

\end{document}

在此处输入图片描述

这里我们得到了音译,正如它应该的那样,没有梵语部分:

\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tipa}
\newcommand{\acm}[1]{\begin{IPA}\'{\={#1}}\end{IPA}}

\AtBeginDocument{
\renewcommand\textipa[2][r]{{\fontfamily{cm#1}\tipaencoding #2}}
}
\renewenvironment{IPA}[1][r]{\fontfamily{cm#1}\tipaencoding}{}

\begin{document}

  \begin{enumerate}

    \setcounter{enumi}{3}

    \item
    \'{A}gne y\'{a}\d{m} yaj\~{n}\'{a}m adhvar\'{a}\d{m}
    vi\'{s}v\'{a}ta\d{h} paribh\acm{u}r \'{a}si; \\
    S\'{a} \'{i}d dev\'{e}\d{s}u gacchati.

  \end{enumerate}

\end{document}

在此处输入图片描述

我可以鱼与熊掌兼得吗?

正如您所看到的,这个问题是由产生特定字符的特定问题引发的。我认为包含这个背景会很有启发性;但我的问题实际上比这要广泛得多。由于我不知道的原因,TIPA不再能很好地使用fontspec- ,而它曾经运行得很好。有人知道是什么导致了这个问题吗?对我来说更重要的是,解决方案是什么?


相反,如果我按照 David Carlisle 的建议,先切换和的顺序TIPA并先fontspec加载TIPA,则渲染过程会进行到这个程度:

(/usr/share/texlive/texmf-dist/tex/latex/realscripts/realscripts.sty
*************************************************
* LaTeX warning: "xparse/redefine-command"
* 
* Redefining document command \textsubscript with arg. spec. 's' on line 25.
*************************************************
*************************************************
* LaTeX warning: "xparse/redefine-command"
* 
* Redefining document command \textsuperscript with arg. spec. 's' on line 28.
*************************************************
) (/usr/share/texlive/texmf-dist/tex/latex/metalogo/metalogo.sty))
(./TIPA_MWE.aux) (/usr/share/texmf/tex/latex/tipa/t3cmr.fd)
*geometry* driver: auto-detecting
*geometry* detected driver: xetex

然后它就停了,我的笔记本电脑开始发出很大的噪音。很大的噪音。最后我不得不打断它:

^C! Interruption.
\@ifstar ...new@ifnextchar *{\def \reserved@a *{#1
                                                  }\reserved@a }{#2}
l.28 ...a}\d{m} vi\'{s}v\'{a}ta\d{h} paribh\acm{u}
                                                  r \'{a}si; \\

因此,如果我们遵循 David Carlisle 的建议,并使用他较为轻松的定义\acm

\newcommand{\acm}[1]{\={#1}\raisebox{.3ex}{\llap{\'{\mbox{}}}}}

我们最终得到了可以渲染的东西。(非常感谢!)TIPA不过,这似乎渲染得相当无能。即使是像 这么简单的东西\begin{IPA}\={u}\end{IPA}也会渲染失败。这是我以前从未遇到过的问题。我能够充分利用 的TIPA音译功能以及 IPA 输入,并使用fontspec它包含来自其他脚本的字符。正如您所想象的,在同一文档中经常需要两者。这还能做到吗?

答案1

tipa我会让其他人来回答关于和之间冲突的具体问题fontspec。但我想提供一个答案,帮助其他面临如何在 XeLaTeX 中进行梵音转写(或更普遍的音标)这一更广泛问题的用户。这尤其适用于那些还没有大量使用 的文档的人tipa;我理解,在某种程度上,向后兼容性是一个有效的考虑因素。

我认为处理变音符号堆叠的最佳方法是使用具有良好变音符号渲染的 Unicode 字体,并使用 IPA 键盘布局输入这些符号。

带有变音符号堆叠的字体

确实,有些字体在渲染多个变音符号方面比其他字体更好。以下是一些字体(衬线字体、无衬线字体和等宽字体),它们在渲染多个变音符号方面表现相当出色,甚至在大写字母和窄字形(如)上也是如此i。这些字体是使用fontspec和 XeLaTeX 编译的。

在此处输入图片描述

Unicode 字符的输入

最初的问题认为,输入命令比使用 Unicode 系统字体更容易tipa。这取决于你如何输入 Unicode 符号。如这个答案使用 Charis SIL 访问 IPA 字符, 有IPA 键盘布局适用于 Windows、Mac 和 Linux,可让您使用比命令tipa所需的更少的按键输入 MWE 中的音译。例如,以下是使用适用于 Windows 的 MSKLC IPA 键盘布局输入 MWE 中某些非 ASCII 符号所需的按键与tipaMWE 中使用的命令:

在此处输入图片描述

键盘布局允许您使用比命令更少的击键tipa,并且键盘布局中的快捷键是按语义组织的(例如,&引入不足的变音符号和@引入过度的变音符号)。

使用 Unicode 输入的其他好处

使用 Unicode 输入还有其他好处,如排版音标:Unicode 还是 tipa?.对于很多用户来说,代码的可读性、跨应用程序的兼容性、字体的一致性都是非常重要的考虑因素。

这是 MWE 的音译部分,其中符号使用 IPA Unicode 键盘输入并使用 XeLaTeX 进行编译:

\documentclass{article}

\usepackage{fontspec}
\setmainfont{Charis SIL}

\begin{document}
\begin{enumerate}
\setcounter{enumi}{3}
\item Ágne yáṃ yajñám adhvaráṃ viśvátaḥ paribhū́r ási; \\
    Sá íd devéṣu gacchati.
\end{enumerate}
\end{document}

在此处输入图片描述

答案2

冲突的\sups原因是,poth 包定义了这个命令来执行与 TIPA 相关的操作,而tipa包并没有预料到这一点,如果你在之前加载它,就会出现错误消息fontspec

那么实际上你可能不想让 fontspec 过载太多,因为拉丁现代 IPA 字符处于 unicode 而不是 T3 位置,这只留下 \acm我定义了一些可能在这里起作用的近似值,除了我无法读取其中的任何内容,即使是音译,所以可能会完全错过一些东西。

在此处输入图片描述

我用声称支持该脚本的字体替换了该字体。

\documentclass[12pt]{article}
\pagestyle{plain}

\usepackage{tipa}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fontspec,xltxtra}
%\newfontfamily{\SA}[Script=Devanagari]{Chandas}
\newfontfamily{\SA}[Script=Devanagari]{Aparajita}



\newcommand{\acm}[1]{\={#1}\raisebox{.3ex}{\llap{\'{\mbox{}}}}}

\AtBeginDocument{
%\renewcommand\textipa[2][r]{{\fontfamily{cm#1}\tipaencoding #2}}
}
%\renewenvironment{IPA}[1][r]{\fontfamily{cm#1}\tipaencoding}{}

\begin{document}

  {\SA अग्ने॒ यं य॒ज्ञम॑ध्व॒रं वि॒श्वत॑\XeTeXglyph49{} परि॒भूरसि॑ । \\
  स इद्दे॒वेषु॑ गच्छति ॥ ४ ॥}

  \begin{enumerate}

    \setcounter{enumi}{3}

    \item
    \'{A}gne y\'{a}\d{m} yaj\~{n}\'{a}m adhvar\'{a}\d{m}
    vi\'{s}v\'{a}ta\d{h} paribh\acm{u}r \'{a}si; \\
    S\'{a} \'{i}d dev\'{e}\d{s}u gacchati.

  \end{enumerate}

\end{document}

Here we have the Sanskrit, as it should be, without the TIPA stuff:

\documentclass[12pt]{article}
\pagestyle{plain}
\usepackage[margin=1.8cm]{geometry}
\geometry{a4paper}
\usepackage[parfill]{parskip}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{fontspec,xltxtra}
%\newfontfamily{\SA}[Script=Devanagari]{Chandas}
\newfontfamily{\SA}[Script=Devanagari]{Nirmala UI}


\begin{document}

  {\SA अग्ने॒ यं य॒ज्ञम॑ध्व॒रं वि॒श्वत॑\XeTeXglyph49{} परि॒भूरसि॑ । \\
  स इद्दे॒वेषु॑ गच्छति ॥ ४ ॥}

\end{document}

答案3

如果没有键盘布局,或者没有时间从字符映射表中选择字符(而且还需要电池供电),映射字体就成为一种可行的选择。

映射字体

前两行 = 原文(与引用的例子拼写略有不同)粘贴自https://www.sacred-texts.com/hin/rvsan/rv01001.htm

红色文本:以上内容基于 IAST 的音译(映射字体)。

接下来的两行黑色:IAST 方案的普通键盘改编版(例如,- 代表 halant、长元音和卷舌音加倍等),用作输入:

蓝色文本:罗马字到天城文映射字体

地图文件太大,无法在这里发布(超过 30k 个字符的限制)。

映射fontspec通过以下方式完成:

\newfontfamily\translite[Mapping=plainkey-to-devanagari,Scale=1.1,Colour=blue]{Noto Serif Devanagari}
\newfontfamily\translitd[Mapping=devanagari-to-iastb,Scale=1.1,Colour=red]{Noto Sans}
\newfontfamily\englishfont{Noto Serif}

用法是:


अग्ने यं यज्ञमध्वरं विश्वतः परिभूरसि |

स इद्देवेषु गछति ||

{\translitd
अग्ने यं यज्ञमध्वरं विश्वतः परिभूरसि |

स इद्देवेषु गछति ||
}

\textenglish{
Ag-ne yamh yaj-nyamadh-varamh vish-vatahh paribhuurasi | 

sa Id-devessu gachati ||
}

{\translite
Ag-ne yamh yaj-nyamadh-varamh vish-vatahh paribhuurasi | 

sa Id-devessu gachati ||
}

天城文设计得很好。映射只是一对一的,也就是说,它是无损的。(此外,纯键盘罗马文本仍然保留了一些可读性。)

相关内容