如何自动将 \cases 转换为 \begin{cases} \end{cases}?

如何自动将 \cases 转换为 \begin{cases} \end{cases}?

我可以在序言中添加一些智能宏来处理这个 LaTeX 自动生成的代码吗?

我使用 Maple 的latex()命令将结果转换为 LaTeX,然后在单独的文档中使用 texlive 进行编译。

有时它会生成错误的 LaTeX 或损坏的 LaTeX。以下是这种情况的一个示例:

Mathematica 图形

上述输出被发送到 latex 文件并包装在\begin{equation}和里面\end{equation}。我选择了equation环境来放置结果,但如果它有助于转换,我可以更改它。

这一切都是使用自动脚本完成的。我没有使用任何 Maple 样式表或其他任何东西。我只是获取 latex() 输出并使用 texlive 标准设置对其进行处理。

我有数百个这样的方程式,因此无法手动编辑任何损坏的 Maple LaTeX 输出,因为每次我重新运行脚本时,编辑都会丢失。

有没有办法制作一个宏,将上述内容转换为使用一些智能替换规则的\begin{cases}封闭内容\end{cases},以使 LaTeX 和 amsmath 满意?

这是错误和 MWE:

Mathematica 图形

平均能量损失

\documentclass[11pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
%smart renewcommand here? or \let?
\begin{document}

\begin{equation}
x-
\cases{-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr 
2\,\sqrt {y \left( x \right) }&$0<y \left( x \right) $\cr}+{\it \_C1}=0_{{1}}
\end{equation}

\end{document} 

pdflatex foo.tex

(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsb.fd)

! Package amsmath Error: Old form `\cases' should be \begin{cases}.

See the amsmath package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.9 \cases
          {-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr
? 

答案1

\cases{...}形式是 Plain TeX 中相同宏的完整副本,并且因为它在 Plain 中,所以也存在于 LaTeX 内核中。

如果我没记错的话,环境形式是amsmath.sty在 1994 年发布的,所以我很惊讶 Maple 坚持使用已弃用的命令并且不利用amsmath

不过,你想要的还是可以实现的。可能没有人们希望的那么强大,但毕竟这是一种 hack。

关键是利用它mathtools以克服旧\cases命令的不足。

\documentclass[11pt,notitlepage]{article}

\usepackage{amsmath,mathtools}
\usepackage{amssymb}

\let\amscases\cases
\makeatletter
\def\cases{\@ifnextchar\bgroup\plaincases\amscases}
\def\plaincases#1{\begin{cases*}#1\end{cases*}}
\makeatother



\begin{document}

\begin{equation}
x-
\cases{-2\,\sqrt {-y \left( x \right) }&$y \left( x \right) \leq 0$\cr 
2\,\sqrt {y \left( x \right) }&$0<y \left( x \right) $\cr}+{\it \_C1}=0_{{1}}
\end{equation}

\begin{equation}
x-
\begin{cases}
  -2\,\sqrt {-y \left( x \right) }&y \left( x \right) \leq 0\\
  2\,\sqrt {y \left( x \right) }&0<y \left( x \right) 
\end{cases}+{\it \_C1}=0_{{1}}
\end{equation}

\begin{equation}
x-
\begin{cases}
  -2\sqrt{-y(x)} & y(x) \leq 0\\
  2\sqrt{y(x)}   & 0 < y (x)
\end{cases}+\mathit{\_C1}=0_{1}
\end{equation}

\end{document} 

第二个示例显示环境形式排版正确,第三个示例是“真正正确”的 LaTeX 输入,没有无用的\left\right过时的和弃用的\it命令。

在此处输入图片描述

答案2

应该很容易用 替换所有出现的\cases\Cases然后,进行一些额外的修改:

\documentclass[11pt,notitlepage]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
%smart renewcommand here? or \let?
\def\Cases#1{\begin{cases}#1\end{cases}}
\begin{document}

\begin{equation}
x-
\Cases{-2\,\sqrt {-y \left( x \right) }&y \left( x \right) \leq 0\cr 
2\,\sqrt {y \left( x \right) }&0<y \left( x \right) \cr}+{\it \_C1}=0_{{1}}
\end{equation}

\end{document} 

在此处输入图片描述

相关内容