breqn 和 lineno 不兼容

breqn 和 lineno 不兼容

期刊通常需要在审阅过程中添加行号。这是使用包实现的。接下来,使用包(环境)自动拆分长公式lineno似乎是个好主意。breqndmath

dmath但是,如果不在环境(\begin{nolinenumbers}\end{nolinenumbers})之前关闭行号,则会导致pdftex挂起(它只会消耗 100% 的 CPU,并且编译永远不会完成)。

  1. 为什么会发生这种情况?
  2. 如何重新定义dmath(和dmath*)环境以nolinenumbers在其周围自动添加环境。

    \documentclass[twocolumn,12pt]{article}
    \usepackage{breqn}
    \usepackage{lineno}
    
    \begin{document}
    \linenumbers
    
    First paragraph.
    
    \begin{nolinenumbers}
    \begin{dmath}
    f(x)=x^9+x^8-x^7+x^6-x^5-x^4-x^3+x^2-x+1.
    \end{dmath}
    \end{nolinenumbers}
    \end{document}  
    

答案1

加载etoolbox时间breqn

\documentclass[twocolumn,12pt]{article}

\usepackage{etoolbox}
\usepackage{breqn}
\usepackage{lineno}

\BeforeBeginEnvironment{dmath}{\begin{nolinenumbers}}%
\AfterEndEnvironment{dmath}{\end{nolinenumbers}}


\begin{document}
\linenumbers

First paragraph.

%\begin{nolinenumbers}
\begin{dmath}
f(x)=x^9+x^8-x^7+x^6-x^5-x^4-x^3+x^2-x+1.
\end{dmath}
%\end{nolinenumbers}

Second Paragraph
\end{document}  

在此处输入图片描述

答案2

手册lineno指出它“与显示数学配合得不好”(第 13 页)。一种方法是将方程式包装在环境中,linenomath以适应常见的数学环境,但这对 不起作用dmath。因此,我们可以使用etoolboxpatchdmath自动排除行号(对于 也同样如此dmath*)。

\documentclass[twocolumn,12pt]{article}

\usepackage{etoolbox}

\usepackage{breqn}
\usepackage{lineno}

\BeforeBeginEnvironment{dmath}{\begin{nolinenumbers}}
\AfterEndEnvironment{dmath}{\end{nolinenumbers}}

\BeforeBeginEnvironment{dmath*}{\begin{nolinenumbers}}
\AfterEndEnvironment{dmath*}{\end{nolinenumbers}}


\begin{document}
\linenumbers

First paragraph.

\begin{dmath}
f(x)=x^9+x^8-x^7+x^6-x^5-x^4-x^3+x^2-x+1.
\end{dmath}

Second paragraph

\begin{dmath*}
f(x)=x^9+x^8-x^7+x^6-x^5-x^4-x^3+x^2-x+1.
\end{dmath*}

\end{document}

加载etoolboxbreqn仔细阅读错误消息,发现etoolbox无法修补\end,因此\AfterEndEnvironment无法工作。似乎存在不兼容性(可能breqn也修补了某些东西)。所以只需加载 etoolbox之前的内容即可。

相关内容