如何自动将方程环境转换为 dmath 环境?

如何自动将方程环境转换为 dmath 环境?

有时我使用不支持breqn包的软件来生成Latex。它可以创建方程式环境。

是否可以仅在序言中添加一些代码,将任何内容转换\begin{equation}...\end{equation}dmath环境?

问题在于\tag{number}等式末尾是否有 。否则,使用\renewenvironment就可以了。

这是 MWE

\documentclass[12pt,notitlepage]{article}

\usepackage{amsmath}
\usepackage{breqn}
\renewenvironment{equation}{\begin{dmath*}}{\end{dmath*}}

\begin{document} 

\begin{equation}
-\eta\omega_{y}+\left(  -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left(  -y' \eta_{y}+\left(  y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right)  \omega_{y'}+\eta
_{xx}+\eta_{yy}\left(  y' \right)  ^{2}-
\xi_{yy}\left(  y' \right)^{3}-2\xi_{yx}\left(  y'\right)  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag{1A} 
\end{equation}

\end{document}

由于\tag{...}结尾处有,因此无法编译。(使用 lualatex)给出

/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))

! Package amsmath Error: \tag not allowed here.

See the amsmath package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.62 ...\right)  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag
                                                  {1A}
? 

如果我删除它,\tag{1A}它可以工作并编译给出

在此处输入图片描述

由于不能有\tag{}dmath*所以必须将其翻译为

\begin{dmath}[number=1A]
.....
\end{dmath}

但我不知道如何检查\tag{...}并生成正确的dmath

因此有两种情况: equation没有标签,

\begin{dmath*}
.....
\end{dmath*}

这个案例我可以使用

\renewenvironment{equation}{\begin{dmath*}}{\end{dmath*}}

\tag{N}第二种情况是等式中有,那么这应该是

\begin{dmath}[number=N]
.....
\end{dmath}

而第二个案例却是比较困难的。

是否可以使用序言中的一些代码来处理这两种情况?我使用 lualatex,并且要使用的代码只能添加到序言中,而不能添加到之后\begin{document}

有什么建议可以解决这两种情况吗?主要问题是处理\tag{}。软件不会生成其他任何内容,例如\label,它只会在最后生成\tag或不生成。\tag

我需要这样做的原因是,生成的一些方程很长,我使用breqn包来分解它们。但我使用的软件不支持dmath环境。手动编辑代码进行更改对我来说不是一个选择。

TL 2023

答案1

首先,你想要dmath,而不是dmath*

\documentclass[12pt,notitlepage]{article}

\usepackage{amsmath}
\usepackage{breqn}

\ExplSyntaxOn

\RenewDocumentEnvironment{equation}{b}
 {
  \nasser_equation:n { #1 }
 }{}

\tl_new:N \l__nasser_equation_body_tl

\cs_new_protected:Nn \nasser_equation:n
 {
  \regex_match:nnTF { \c{tag} } { #1 }
   { \__nasser_equation_tag:n { #1 } }
   { \begin{dmath}#1\end{dmath} }
 }

\cs_new_protected:Nn \__nasser_equation_tag:n
 {
  \tl_set:Nn \l__nasser_equation_body_tl { #1 }
  \regex_replace_once:nnN
   { (.*)\c{tag}\{(.*?)\}(.*) } % search
   { \c{begin}\{dmath\}\[number=\2\]\1\3\c{end}\{dmath\} }
   \l__nasser_equation_body_tl
  \tl_use:N \l__nasser_equation_body_tl
 }

\ExplSyntaxOff

\begin{document} 

No tag here, normal numbering
\begin{equation}
-\eta\omega_{y}+\left(  -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left(  -y' \eta_{y}+\left(  y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right)  \omega_{y'}+\eta
_{xx}+\eta_{yy}\left(  y' \right)  ^{2}-
\xi_{yy}\left(  y' \right)^{3}-2\xi_{yx}\left(  y'\right)  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}

Tag at the end
\begin{equation}
-\eta\omega_{y}+\left(  -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left(  -y' \eta_{y}+\left(  y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right)  \omega_{y'}+\eta
_{xx}+\eta_{yy}\left(  y' \right)  ^{2}-
\xi_{yy}\left(  y' \right)^{3}-2\xi_{yx}\left(  y'\right)  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0\tag{1A} 
\end{equation}

Tag at the beginning
\begin{equation}\tag{B}
-\eta\omega_{y}+\left(  -3y' \xi_{y}-2\xi_{x}+\eta_{y}\right)
\omega-\xi\omega_{x}+\left(  -y' \eta_{y}+\left(  y'\right)
^{2}\xi_{y}+y' \xi_{x}-\eta_{x}\right)  \omega_{y'}+\eta
_{xx}+\eta_{yy}\left(  y' \right)  ^{2}-
\xi_{yy}\left(  y' \right)^{3}-2\xi_{yx}\left(  y'\right)  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}

No \verb|\left| and \verb|\right|
\begin{equation}
-\eta\omega_{y}+(  -3y' \xi_{y}-2\xi_{x}+\eta_{y})
\omega-\xi\omega_{x}+(  -y' \eta_{y}+(  y')
^{2}\xi_{y}+y' \xi_{x}-\eta_{x})  \omega_{y'}+\eta
_{xx}+\eta_{yy}(  y' )  ^{2}-
\xi_{yy}(  y' )^{3}-2\xi_{yx}(  y')  ^{2}+2\eta_{yx}y'-\xi_{xx} y'=0
\end{equation}
\end{document}

最后一个例子只是为了展示如何排版公式,而不需要可怕的大括号。

在此处输入图片描述

像往常一样,输出结果breqn并不理想。

相关内容