我最近刚刚开始遇到花括号的特殊字符错误,如下例中的 { 和 }:
\documentclass{article}
\usepackage{times}
\usepackage[complete,subscriptcorrection,mtpcal,mtphrb]{mtpro2}
\usepackage{amsmath}
\begin{document}
\{ 1 \}
\end{document}
错误信息如下:
! Missing $ inserted.
<inserted text>
$
l.11 \{
1 \}
?
答案1
该mtpro2
包将\{
和重新定义\}
为:
\def\curlybraces{\def\lbrace{\delimiter"4266308 }\let\{=\lbrace
\def\rbrace{\delimiter"5267309 }\let\}=\rbrace}
其中\delimiter
是 TeX 基元,"4266308
表示类 4 ( \mathopen
),小形式是数学家族 2,槽"66
(十六进制),大形式是数学家族 3,槽"08
,类 5 中的结束分隔符也是如此。
这里与您相关的是,这是数学模式的定义,并且仅适用于数学模式。因此,当您尝试在文本模式下使用它时,您会收到一条错误消息,提示您忘记了某处$
。
LaTeX 内核确实定义了文本模式命令\textbraceleft
和\textbraceright
。\DeclareTextSymbol
这些应该仍然有效,但您可以根据需要\UndeclareTextCommand
将它们重新定义为:
\DeclareTextSymbol{\textbraceleft}{T1}{"7B}
\DeclareTextSymbol{\textbraceright}{T1}{"7D}
\DeclareTextSymbol{\textbraceleft}{\UnicodeEncodingName}{"78}
\DeclareTextSymbol{\textbraceright}{\UnicodeEncodingName}{"7D}
\DeclareTextCommandDefault{\textbraceleft}{T1}
\DeclareTextCommandDefault{\textbraceright}{T1}
因此,您可以使用以下解决方法:
\def\{{\ifmmode\lbrace\else\textbraceleft\fi}
\def\}{\ifmmode\rbrace\else\textbraceright\fi}
在数学模式或文本模式下使用正确的命令。我不知道该软件包是否仍在积极维护,但在文本模式下中断\{
应\}
被视为错误。