在自定义环境中使用 `align` 环境中的 & tabs 时,无法使用它

在自定义环境中使用 `align` 环境中的 & tabs 时,无法使用它

我有一个为问题集制作的自定义环境,它使用tabular对齐问题编号和问题主体。当我尝试使用&将方程式的各个部分组合在一起时 - 例如,如果我想对齐=多个方程式的符号,我会收到编译错误。有什么方法可以修复此行为?如果我可以使用其他方法以与我现在所拥有的方式在视觉上等效的方式对齐问题主体,我完全赞成摆脱环境中的表格...

梅威瑟:

\documentclass{article}

\RequirePackage{amsmath, amsthm}
\RequirePackage{thmtools}

\newcounter{problem}
\setcounter{problem}{0}

\newlength{\mylen}
\settowidth{\mylen}{100}

\newenvironment{problem}[1][]{%
  \refstepcounter{problem}
  \par\noindent
  \begin{tabular}{m{\mylen}p{\dimexpr\linewidth-\mylen-3\tabcolsep\relax}@{}}
  \arabic{problem}. & \ifx\relax#1\relax \else\textbf{#1}\\[1mm]&\fi
  }
  {\end{tabular}\ignorespacesafterend\medskip}%

\begin{document}
  \begin{problem}
    \begin{align*}
          =&\int_{1}^{3}\left(x+\frac{1}{x}\right)\ dx\\
          =&\left.\frac{1}{2}x^{2}+ln\lvert x\rvert\;\right|_{1}^{3}
    \end{align*}
  \end{problem}
\end{document}

答案1

正如我在评论中所建议的,这里有一个解决方案(?)enumitem

该列表qrr@problem是用标签格式创建的\arabic*.(其中*代表内部使用的计数器)。

然后,环境problem使用qrr@problem环境自动添加第一个(仅在您的情况下)\item,可以不添加,也可以添加强制的参数。(可选的第一个参数被转发到qrr@problem列表。)

代码

\documentclass{article}

\RequirePackage{amsmath, amsthm}
\RequirePackage{thmtools, enumitem}

\newlist{qrr@problem}{enumerate}{1}
\setlist[qrr@problem,1]{label=\arabic*.,resume}

\makeatletter
\newenvironment{problem}[2][]{%
    \qrr@problem[#1]\item\if\relax\detokenize{#2}\relax\relax\else\textbf{#2}\fi
}{%
    \endqrr@problem
}
\makeatother
\begin{document}
  \begin{problem}{}
    \begin{align*}
          y & = \int_{1}^{3}\left(x+\frac{1}{x}\right)\ dx\\
            & = \left.\frac{1}{2}x^{2}+ln\lvert x\rvert\;\right|_{1}^{3}
    \end{align*}
  \end{problem}

  \begin{problem}{Next problem, same equation}
    \begin{align*}
          y & = \int_{1}^{3}\left(x+\frac{1}{x}\right)\ dx \\
            & = \left.\frac{1}{2}x^{2}+ln\lvert x\rvert\;\right|_{1}^{3}
    \end{align*}
  \end{problem}
\end{document}

输出

在此处输入图片描述

答案2

这是我在尝试修复与此设计不良的环境相关的另一个问题时从其他人​​那里得到的解决方案。它也能修复此问题。

我添加了两个额外的环境定义只是为了让我的示例能够工作,因为它是从家庭作业中提取出来的。

\documentclass{article}

\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{enumitem}

\newcounter{problem}
\setcounter{problem}{0}

\newenvironment{problem}[1][]{
  \refstepcounter{problem}%
  \begin{list}{\arabic{problem}.}
              {\settowidth{\labelwidth}{100}%
               \setlength{\rightmargin}{0pt}%
              }
    \item \ifx\relax#1\relax \else\textbf{#1}\\[1mm]\fi
    }
    {\end{list}}

\newenvironment{parts}
  {\begin{enumerate}[label=\alph*)]}
  {\end{enumerate}}

\def\qed{\ensuremath{\square}} % <-QED Symbol
\newenvironment{solution}{%  <-Solution
  \par\addvspace{1em}
  \itshape{Solution:}\\}
  {\par\normalfont\hfill\qed\par\addvspace{\medskipamount}}%

\begin{document}
  \begin{problem}[Evaluate the integrals:]
    \begin{parts}
      \item $\displaystyle\int\sec^4{x}\ dx$
      \begin{solution}
        \begin{align*}
          \int\sec^2{x}\ dx&=\int\sec^2{x}\sec^2{x}\ dx\\
          &=\int\left(\tan^2{x}+1\right)\sec^2{x}\ dx\\
          &=\int\tan^2{x}\sec^2{x}\ dx+\int\sec^2{x}\ dx\\
          &=\frac{1}{3}\left[\tan^3{x}+3\tan{x}\right]+C
        \end{align*}
      \end{solution}
    \end{parts}
  \end{problem}
\end{document}

在此处输入图片描述

相关内容