加载包后mismath.sty
,以下源会导致错误:
./mismath_paired_delim_bug.tex:14: Missing { inserted.
<to be read again>
\futurelet
l.14 $\eqclass{0}
$
即使没有该mismath
包,源代码也可以编译成功。
漏洞在哪儿mismath
?
(是的,我意识到我实际上并没有使用mismath
此来源中的功能,但它只是一个 MWE 来说明问题。在我的实际文档中,我做使用mismath
功能。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{mismath} % CAUSES ERROR
\DeclarePairedDelimiter{\eqclass}{\lbrack}{\rbrack}
\newcommand{\muspace}{\mspace{1mu}}
\newcommand{\eqclasssim}[1]{\eqclass{#1}_{{}\muspace\muspace\muspace\raisebox{-1pt}{$\scriptstyle\sim$}}}
\begin{document}
$\eqclass{0}$
$\eqclasssim{0}$
\end{document}
Package: amsmath 2022/04/08 v2.17n AMS math features
Package: amstext 2021/08/26 v2.01 AMS text
Package: amsbsy 1999/11/29 v1.2d Bold Symbols
Package: amsopn 2022/04/08 v2.04 operator names
Package: mathtools 2022/06/29 v1.29 mathematical typesetting tools
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
Package: calc 2017/05/25 v4.3 Infix arithmetic (KKT,FJ)
Package: mhsetup 2021/03/18 v1.4 programming setup (MH)
Package: mismath 2022/12/26 v2.1 .dtx mismath file
Package: esvect
Package: ifthen 2022/04/13 v1.1d Standard LaTeX ifthen package (DPC)
Package: xspace 2014/10/28 v1.13 Space after command names (DPC,MH)
Package: ibrackets 2022/12/26 v1.1 .dtx ibrackets file
Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR)
Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR)
Package: trig 2021/08/11 v1.11 sin cos tan (DPC)
Package graphics Info: Driver file: pdftex.def on input line 107.
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4
添加:以下操作本质上会导致相同的错误,并且出于相同的原因,即mismath
在加载“ibrackets”时会破坏一切:
\DeclarePairedDelimiterX{\setimage}[1]{\langle}{\rangle}{#1}
答案1
感谢这个错误报告。我今天发布了一个新版本,mismath
其中ibrackets
现在只是一个加载相应包的选项。所以人们可以选择是否要反常 :-)
确实,在 中使用方括号存在不兼容性\DeclarePairedDelimiter
。不过,使用上面提到的宏
\DeclarePairedDelimiterX{\setimage}[1]{\langle}{\rangle}{#1}
,在我的测试中不会产生错误。
答案2
这mismath
包裹已于近期更新至加载ibrackets
,这将有助于排版间隔的反常1法语符号。
% \changes{v2.1}{2022/12/26}{
% - Improved management of square brackets with the ibrackets package,
% - new macros codim, sinc, var, eqdef*,
% - removing the systematic warning for paren command
% - a small change in norm command -> bars in small size
% - several changes in documentation}
与此同时,它破坏了[
和的合法用法]
,例如 的情况\DeclarePairedDelimiter
。
向作者投诉,mismath
至少应该为非邪恶的数学家提供一个选项不是加载ibrackets
。
与此同时,以一种愚弄人的方式重新\lbrack
定义。\rbrack
ibrackets
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{mismath}
\let\lbrack\relax \let\rbrack\relax
\DeclareMathDelimiter{\lbrack}{\mathopen} {operators}{"5B}{largesymbols}{"02}
\DeclareMathDelimiter{\rbrack}{\mathclose}{operators}{"5D}{largesymbols}{"03}
\DeclarePairedDelimiter{\eqclass}{\lbrack}{\rbrack}
\newcommand{\eqclasssim}[1]{%
\begingroup
\sbox{0}{$\eqclass{#1}$}%
\eqclass{#1}%
\raisebox{\dimexpr-\dp0+\depth}{%
$\mathsurround=0pt\scriptstyle\mspace{2mu}\sim$%
}%
\endgroup
}
\begin{document}
$\eqclass{0}$
$\eqclasssim{0}$
\end{document}
\eqclassim
我添加了适用于字体大小变化的命令的不同定义。
脚注
1摘自 TeXbook:练习18.14一些不合常理的数学家会反向使用括号来表示“开区间”。