为什么添加 \usepackage{physics} 会导致 \let\left\relax 出现错误

为什么添加 \usepackage{physics} 会导致 \let\left\relax 出现错误

以下小MWE给出错误,TeX Live 2014

\documentclass[]{article}

\usepackage{amsmath}
\usepackage{physics}    
\let\left\relax
\let\right\relax

\begin{document}    
$\frac{a^2 \left(-\log \left(a^2 \left(\sqrt{\frac{a^2 y(x)}{b^2 x^2}}
  +1\right)-\frac{2 a^2 y(x)}{b x^2}\right)-\frac{2 a 
  \tanh ^{-1}\left(\frac{a^2-4 b \sqrt{\frac{a^2 y(x)}{b^2 x^2}}}
  {a \sqrt{a^2+8 b}}\right)}{\sqrt{a^2+8 b}}\right)}{2 b}=
  \frac{a^2 \log (x)}{b}+c_1,y(x)$    
\end{document} 

当注释掉该physics包时,编译成功!

PS\let\left\relax当我注意到仅当我包含物理包时才会出现错误时,我正在使用等代码来帮助格式化长表达式。

pdflatex foo.tex
.......
(/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Missing } inserted.
<inserted text> 
                }
l.15   \frac{a^2 \log (x)}{b}
                             +c_1,y(x)$
? 

我暂时删除了物理包。但我想知道为什么这种情况只发生在物理包上,因为我包含了很多其他包,没有任何问题。

答案1

这与你已经提到的包裹有关physics。而且它只是

\frac{a^2 \log (x)}{b}+c_1,y(x)  

这是有问题的,事实上是这样的\log,删除它之后 MWE 就可以正常工作了。

physics包很混乱\log,即使看了代码,我也不太明白为什么。


更新:物理使\log(x)有自动缩放栅栏(一般来说这不是一个好主意,正如我们多次说过的那样)。它使用类似于

\normallog \argopen( x \argclose)

这又类似于

\normallog \mathopen{}\mathclose\bgroup\left( a \aftergroup\egroup\right)

\left...\right对组成一组。因此,当您让它们放松时,我猜它们\aftergroup会错位并导致错误。

简而言之,不要这么做;-)

答案2

我对最新的 TL 2014 没有任何问题:

\documentclass[]{article}
\usepackage{mathtools}
\usepackage{physics}    

\begin{document}    
\begin{multline}
 \frac{a^2}{2b} \left(-\log \left(a^2 \left(\sqrt{\frac{a^2 y(x)}{b^2 x^2}}
  +1\right)-\frac{2 a^2 y(x)}{b x^2}\right)-\frac{2 a 
  \tanh ^{-1}\left(\frac{a^2-4 b \sqrt{\frac{a^2 y(x)}{b^2 x^2}}}
  {a \sqrt{a^2+8 b}}\right)}{\sqrt{a^2+8 b}}\right) \\
  = \frac{a^2 \log (x)}{b}+c_1,y(x) 
\end{multline}   
\end{document} 

在此处输入图片描述

答案3

物理包为宏等实现了更多的智能\log\sin这些宏扫描它们的数学参数并\left \right以非常具体的方式在参数开头使用原语。当您重新定义这些原语时,这些宏当然会崩溃。如果您需要重新定义\left\right并且如果您需要使用物理包,那么您可以尝试添加:

\def\log{\mathop{\rm log}\nolimits}
etc.

问题是,既然物理包的智能性已被这种重新定义所破坏,为什么还需要使用它呢?

相关内容