在同一个文档(文章)中,我使用了一些数学软件包(amsmath
、amssymb
、mathcomp
、wasysym
),它们都运行正常;但是当我将 TIPA 与特殊的 latex 空间(\,
\;
\!
\:
)一起使用时,LaTeX 告诉我无法构建 pdf 输出。它给了我类似这样的信息:
LaTeX Warning: Command \! invalid in math mode on input line 45.
有没有办法用 TIPA 在数学模式下创建这种类型的空间?
一个最小的工作示例:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tipa}
\begin{document}
$\forall x \in \mathbb{Z}, x=3k+c, c\in [\![0;2]\!]. -1\equiv 2
\;\:[3]$, so $\forall x \in \mathbb{Z}, x=3k+c, c\in [\![-1;1]\!].$\\
\textepsilon
\end{document}
答案1
好的,问题是 TIPA 定义了一些数学模式间距命令。例如,\!
可以放在某些辅音前面,给你内爆音。因此
\textipa{\!b}
会给你ɓ。
现在,当您正常加载 TIPA 时,它只会覆盖标准 LaTeX 定义。因此,如果您随后尝试像平常一样\!
在数学模式下使用命令,您将收到错误,因为正在使用新的 TIPA 定义,而它们在数学模式下不起作用。
您需要做的是将[safe]
选项传递给 TIPA,如手册。
最后,还有一个名为“
safe
”的选项,用于抑制 TIPA 中一些可能“危险”的命令的定义。\usepackage[safe]{tipa}
具体来说,通过声明选项可以抑制以下命令
safe
。每个命令的功能将在后面说明。
\s
相当于\textsyllabic
;可能无害,但对于控制序列名称来说太短了。
\*
已在纯 TeX 中定义;然而许多人认为它的重新定义无害。
\|
、\:
、\;
、\!
已经在 LaTeX 中定义;这些重新定义显然是最危险的。但是,即使在“不安全模式”下也准备了补救措施。有一个命令称为,其\Vert
含义与\|
和 相同,可在“不安全”模式下使用。对于其余三个命令,TIPA 提供了称为 和 的命令\tipamedspace
,\tipathickspace
即使在“不安全模式”下,它们也分别保留、和\tipanegthinspace
的含义。\:
\;
\!
尽管有上述“补救措施”,但有时您可能希望在“不安全”模式下使用上述命令及其原始名称。在这种情况下,可以使用名为的命令
\tipasafemode
。例如:输入:
\textipa{[\!b] [\:r] [\;B]}\quad{\tipasafemode $ a\:a\quad b\;b\quad c\!c\quad\| $}\quad \textipa{[\!b] [\:r] [\;B] (back again!)}
如本例所示,
\tipasafemode
必须在组内使用。否则,TIPA 特殊宏的含义就会丢失。
但是,这会删除诸如 之类的 TIPA 快捷键\!b
,使它们无法使用。相反,标准 LaTeX 定义会恢复。这要求您使用更长的 TIPA 命令来生成这些符号。因此,您不能再使用\!b
来获取 ɓ,而必须使用\texthtb
:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage[safe]{tipa}
\begin{document}
$\forall x \in \mathbb{Z}, x = 3k + c, c \in [\![0;2]\!].
-1 \equiv 2 \;\:[3]$, so $\forall x \in \mathbb{Z}, x = 3k + c,
c \in [\![-1;1]\!].$\\
\textepsilon
\begin{IPA}
\texthtb
\end{IPA}
\end{document}
相反,您可能更愿意正常加载 TIPA 而不使用该safe
选项。然后您可以\tipasafemode
在任何想要使用 LaTeX 数学模式命令的地方使用该开关,例如\!
:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tipa}
\begin{document}
${\tipasafemode \forall x \in \mathbb{Z}, x = 3k + c, c \in
[\![0;2]\!]. -1 \equiv 2 \;\:[3]}$, so
${\tipasafemode \forall x \in \mathbb{Z}, x = 3k + c, c \in
[\![-1;1]\!].}$\\
\textepsilon
\begin{IPA}
\!b
\end{IPA}
\end{document}
或者如果您确实想要,您可以正常使用 TIPA,但在数学模式下将 、 等\:
实例替换为、等。我不会这样做:\;
\tipamedspace
\tipathickspace
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tipa}
\begin{document}
$\forall x \in \mathbb{Z}, x = 3k + c, c \in
[\tipanegthinspace[0;2]\tipanegthinspace]. -1 \equiv 2
\tipathickspace\tipamedspace[3]$, so
$\forall x \in \mathbb{Z}, x = 3k + c, c \in
[\tipanegthinspace[-1;1]\tipanegthinspace].$\\
\textepsilon
\begin{IPA}
\!b
\end{IPA}
\end{document}