找不到 LaTeX 错误

找不到 LaTeX 错误

我收到一个错误,但不知道原因:

(d:/texlive/2012/texmf-dist/tex/latex/enumitem/enumitem.sty)                      
(d:/texlive/2012/texmf-dist/tex/latex/tools/xspace.sty)                           
(d:/texlive/2012/texmf-dist/tex/latex/amsfonts/amsfonts.sty)                      
(d:/texlive/2012/texmf-dist/tex/latex/mh/breqn.sty                                
(d:/texlive/2012/texmf-dist/tex/latex/mh/flexisym.sty                             
(d:/texlive/2012/texmf-dist/tex/latex/mh/cmbase.sym)                              
(d:/texlive/2012/texmf-dist/tex/latex/mh/mathstyle.sty)))                         
(d:/texlive/2012/texmf-dist/tex/xelatex/polyglossia/gloss-english.ldf          

! LaTeX Error: \do undefined.                                                     

See the LaTeX manual or LaTeX Companion for explanation.                          
Type  H <return>  for immediate help.                                             
 ...                                                                              

l.6 }                                                                             

?

我认为这是生成它的以下行:

  \usepackage{polyglossia}
  \setotherlanguage{english}    

但为什么?

更新 小例子:File1.tex:

\documentclass[a4paper, 10pt, twocolumn]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{mathtools}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{algpseudocode}
\usepackage{fancyhdr}
\usepackage{enumitem}
\usepackage{xspace}
\usepackage{amsfonts}
\usepackage{breqn}
\setotherlanguage{english}

\setmainfont{Consolas}

文件2.tex

\input File1.tex
\begin{document}

\section{Section}
\end{document}

更新2

这是日志

答案1

为什么文件结构这么奇怪?

无论如何,这些包之间似乎存在一些奇怪的交互,特别是我必须amsthm使用xelatex File2

文件1.tex:

\documentclass[a4paper, 10pt, twocolumn]{article}
\usepackage{amsthm}
\usepackage{fontspec}

\usepackage{polyglossia}
\usepackage{algpseudocode}
\usepackage{fancyhdr}
\usepackage{enumitem}
\usepackage{xspace}
\usepackage{amsfonts}
\usepackage{breqn}
\def\do{}
\setotherlanguage{english}

\setmainfont{Consolas}
\def\do{}

答案2

由于神秘的原因,flexysym.sty加载的breqn.sty确实

\edef\do{%
  \noexpand\AtEndOfPackage{%
    \catcode\number`\"=\number\catcode`\"
    \relax
  }%
}
\do \let\do\relax

在 LaTeX 内核中,\do在许多地方用作临时控制序列,但是绝不据说\let\do\relax。不幸的是,polyglossia依赖于这个事实并gloss-english.ldf使用\renewcommand*\do[1]{...}

这应该被视为breqn和 中的一个错误polyglossia

说道\def\do{}完之后\usepackage{breqn}问题就解决了。


更好的方法flexysym.sty

\begingroup\edef\x{\endgroup
  \noexpand\AtEndOfPackage{%
    \catcode\number`\"=\number\catcode`\"
    \relax
  }%
}\x

而不使用\do通常定义为带有参数的宏(具有各种含义)。

相关内容