自定义缩放 align* 环境的 \NewEnviron 无法使用任何与号 (&) 进行编译

自定义缩放 align* 环境的 \NewEnviron 无法使用任何与号 (&) 进行编译

我只想增加方程式环境中的文本大小。我在另一篇文章中发现了这一点:

\NewEnviron{myalign}{%
    \begin{align*}
    \scalebox{1.5}{$\BODY$}
    \end{align*}
}

它似乎可以工作,但是当我包含任何一个时&,它都无法编译,例如

\begin{align}
    x &= 3
\end{align}

有效,但不是

\begin{myalign}
   x &= 3
\end{myalign}

答案1

你还会看到

\begin{align*}
  \scalebox{1.5}{$x &= 3$}
\end{align*}

失败,这正是你的myalign产生的结果。问题并不在于你的\NewEnviron,而是你对如何扩展事物的解释。具体来说,你不能让一个组的开始和结束跨越&

从您的定义来看,您似乎想将显示放大align50%。最好使用这样的定义:

\NewEnviron{myalign}{%
  \Large\begin{align*}
    \BODY
  \end{align*}}

或(无environ以及最新的 LaTeX)

\NewDocumentEnvironment{myalign}{ b }{%
  \Large\begin{align*}
    #1
  \end{align*}
}{}

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,graphicx}

\NewDocumentEnvironment{myalign}{ b }{%
  \Large\begin{align*}
    #1
  \end{align*}
}{}

\begin{document}

\begin{align*}
  f(x) &= ax^2 + bx + c \\
  g(x) &= ax^3 + bx^2 + cx + d
\end{align*}

{\Large
\begin{align*}
  f(x) &= ax^2 + bx + c \\
  g(x) &= ax^3 + bx^2 + cx + d
\end{align*}
}

\begin{myalign}
  f(x) &= ax^2 + bx + c \\
  g(x) &= ax^3 + bx^2 + cx + d
\end{myalign}

\end{document}

答案2

作为一般规则,您不应该将align用于单个方程式,而应该将其用于多行对齐。该代码的作者可能喜欢使用align来代替equation

但是该代码不能在多行上运行:您需要将缩放应用于整体align(但在aligned形式上)。

以下解决方案并不意味着我发现缩放显示的想法特别有吸引力(“我发现它真的很丑”的轻描淡写)。

\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}

\usepackage{lipsum}

\ExplSyntaxOn

\NewDocumentEnvironment{scaledisplay}{O{1.5}mb}
 {
  \begin{equation*}
  \scalebox{#1}{$\antintin_scaledisplay:nn { #2 } { #3 }$}
  \end{equation*}
 }
 {\ignorespacesafterend}

\cs_new_protected:Nn \antintin_scaledisplay:nn
 {
  \__antintin_scaledisplay_begin:n { #1 }
  #2
  \__antintin_scaledisplay_end:n { #1 }
 }

\cs_new:Nn \__antintin_scaledisplay_begin:n
 {
  \str_case:nnF { #1 }
   {
    {equation}{\displaystyle}
    {alignat}{\begin{alignedat}{-1}}
    {flalign}{\begin{aligned}}
   }
   {\begin{#1ed}}
 }
\cs_new:Nn \__antintin_scaledisplay_end:n
 {
  \str_case:nnF { #1 }
   {
    {equation}{}
    {alignat}{\end{alignedat}}
    {flalign}{\end{aligned}}
   }
   {\end{#1ed}}
 }

\ExplSyntaxOff

\begin{document}

\lipsum[1][1-4]
\begin{scaledisplay}[2]{equation}
A=B
\end{scaledisplay}
\lipsum[2][1-4]
\begin{scaledisplay}{align}
a&=b \\
cc&=ddd
\end{scaledisplay}
\lipsum[3][1-4]
\begin{scaledisplay}{alignat}
a&=b    &\quad uuu&=v \\
cc&=ddd &\quad u&=v
\end{scaledisplay}
\lipsum[4][1-4]
\begin{scaledisplay}{gather}
a=b \\
cc=dd
\end{scaledisplay}
\lipsum[5][1-4]

\end{document}

在此处输入图片描述

使用字体大小变化而不是缩放(这也尊重fleqn)。

\documentclass[fleqn]{article}
\usepackage{amsmath}
\usepackage{graphicx}

\usepackage{lipsum}

\ExplSyntaxOn

\NewDocumentEnvironment{scaledisplay}{O{\Large}m}
 {
  \begin{equation*}
  \begin{minipage}{\displaywidth}
  #1
  \legacy_if:nTF { @fleqn } { \setlength{\leftskip}{\mathindent} } { \centering }
  $
  \__antintin_scaledisplay_begin:n { #2 }
 }
 {
  \__antintin_scaledisplay_end:n { #2 }
  $
  \end{minipage}
  \end{equation*}
  \ignorespacesafterend
 }

\cs_new_protected:Nn \antintin_scaledisplay:nn
 {
  \__antintin_scaledisplay_begin:n { #1 }
  #2
  \__antintin_scaledisplay_end:n { #1 }
 }

\cs_new:Nn \__antintin_scaledisplay_begin:n
 {
  \str_case:nnF { #1 }
   {
    {equation}{\displaystyle}
    {alignat}{\begin{alignedat}{-1}}
    {flalign}{\begin{aligned}}
   }
   {\begin{#1ed}}
 }
\cs_new:Nn \__antintin_scaledisplay_end:n
 {
  \str_case:nnF { #1 }
   {
    {equation}{}
    {alignat}{\end{alignedat}}
    {flalign}{\end{aligned}}
   }
   {\end{#1ed}}
 }

\ExplSyntaxOff

\begin{document}

\lipsum[1][1-4]
\begin{scaledisplay}[\LARGE]{equation}
A=B
\end{scaledisplay}
\lipsum[2][1-4]
\begin{scaledisplay}{align}
a&=b \\
cc&=ddd
\end{scaledisplay}
\lipsum[3][1-4]
\begin{scaledisplay}{alignat}
a&=b    &\quad uuu&=v \\
cc&=ddd &\quad u&=v
\end{scaledisplay}
\lipsum[4][1-4]
\begin{scaledisplay}{gather}
a=b \\
cc=dd
\end{scaledisplay}
\lipsum[5][1-4]

\end{document}

在此处输入图片描述

没有fleqn选择

在此处输入图片描述

相关内容