我有一个为问题集制作的自定义环境,它使用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}