如果删除百分号,以下最小工作示例将会产生错误。
\documentclass{amsart}
%\usepackage{tipa}
\usepackage{braket}
\begin{document}
\[
\Set{x|y}
\]
\end{document}
错误信息:
LaTeX Warning: Command \: invalid in math mode on input line 6.
LaTeX Warning: Command \: invalid in math mode on input line 6.
LaTeX Warning: Command \; invalid in math mode on input line 6.
LaTeX Warning: Command \; invalid in math mode on input line 6.
! Missing } inserted.
<inserted text>
}
l.6 \Set{x|y}
答案1
该tipa
包重新定义了一些标准命令,这是导致您收到错误的原因,但提供了一个“兼容性”层。值得注意的是,它重新定义的命令是
\s
(别名\textsyllabic
)\*
(未提供别名)\|
(未提供别名)\:
(别名\tipamedspace
)\;
(别名\tipathickspace
)\!
(别名\tipanegthinspace
)
如果你使用选项来调用该包safe
,即
\usepackage[safe]{tipa}
不执行重新定义。手册第 3.1.3 节tipa
。
答案2
请注意braket.sty
其中有:
{\catcode`\|=\active
\xdef\set{\protect\expandafter\noexpand\csname set \endcsname}
\expandafter\gdef\csname set \endcsname#1{\mathinner
{\lbrace\,{\mathcode`\|32768\let|\midvert #1}\,\rbrace}}
\xdef\Set{\protect\expandafter\noexpand\csname Set \endcsname}
\expandafter\gdef\csname Set \endcsname#1{\left\{%
\ifx\SavedDoubleVert\relax \let\SavedDoubleVert\|\fi
\:{\let\|\SetDoubleVert
\mathcode`\|32768\let|\SetVert
#1}\:\right\}}
}
\def\midvert{\egroup\mid\bgroup}
\def\SetVert{\@ifnextchar|{\|\@gobble}% turn || into \|
{\egroup\;\mid@vertical\;\bgroup}}
\def\SetDoubleVert{\egroup\;\mid@dblvertical\;\bgroup}
代码具体做什么并不重要,但要注意代码中使用了\:
和。如果重新定义这些命令,当然会有问题。\;
tipa
一种方法是在中重新定义这些宏braket.sty
。
%! TEX program = pdflatex
\documentclass{amsart}
\usepackage{tipa}
\usepackage{braket}
\makeatletter
{\catcode`\|=\active
\xdef\set{\protect\expandafter\noexpand\csname set \endcsname}
\expandafter\gdef\csname set \endcsname#1{\mathinner
{\lbrace\,{\mathcode`\|32768\let|\midvert #1}\,\rbrace}}
\xdef\Set{\protect\expandafter\noexpand\csname Set \endcsname}
\expandafter\gdef\csname Set \endcsname#1{\left\{%
\ifx\SavedDoubleVert\relax \let\SavedDoubleVert\|\fi
\medspace{\let\|\SetDoubleVert
\mathcode`\|32768\let|\SetVert
#1}\medspace\right\}}
}
\def\midvert{\egroup\mid\bgroup}
\def\SetVert{\@ifnextchar|{\|\@gobble}% turn || into \|
{\egroup\thickspace\mid@vertical\thickspace\bgroup}}
\def\SetDoubleVert{\egroup\thickspace\mid@dblvertical\thickspace\bgroup}
\makeatother
\begin{document}
\[
\Set{x|y}
\]
\end{document}
\tipasafemode
另一种方法是每次需要时使用\Set
,如tipa
文档中所建议的那样(这显然很笨重)。
%! TEX program = pdflatex
\documentclass{amsart}
\usepackage{tipa}
\usepackage{braket}
\begin{document}
{\tipasafemode
\[
\Set{x|y}
\]
}
\end{document}