我正在写一本练习册,在某些练习中,我会在对齐环境中列出几个编号方程式,例如,
(1)x^2+x+1=0,(2)ax^3+2x=0,(3)x^5=2i,
(4)x^4=-i,(5)x-1/x=2,(6)cosh(x)=3。
(我希望它们与数字保持一致)。
我正在使用宏\newcommand*\ExoEq{\refstepcounter{ExoEq}(\theExoEq)~}
因此前面的示例输入如下:
\begin{align*}
\ExoEq&x^2+x+1=0,&
\ExoEq&ax^3+2x=0,&
\ExoEq&x^5=2i,\\
\ExoEq&x^4=-i,&
\ExoEq&x-\frac1x=2,&
\ExoEq&\cosh(x)=3.
\end{align*}
到目前为止一切都很好,除了我有时需要参考一个方程式,例如,
In Equation~(2), we assume that $a\neq0$.
问题是,当我想使用\label
和时\eqref
,我在对齐环境中得到了奇怪的结果:这里有一个简单的例子,显示了出了什么问题:
\documentclass{amsart}
\usepackage{amsthm}
\usepackage[pdftex]{hyperref}
\parindent0pt
\newtheoremstyle{myexercise}{\baselineskip}{\baselineskip}{}{}{\bfseries}{.}{ }{\thmname{#1}\ \thmnumber{#2}}%
\theoremstyle{myexercise}
\newtheorem{Exo}{Exercise}[section]
\newcounter{MyCounter}
\newcommand*\Number{\refstepcounter{MyCounter}(\theMyCounter)~}
\let\oldlabel\label
\begin{document}
\section{Exercises}
\begin{Exo}
\begin{align*}
\Number\oldlabel{L1}&x^2+x=2,&
\Number\oldlabel{L2}&x^3+x^2=0.
\end{align*}
Equation~\eqref{L1} is very nice, and Equation~\eqref{L2}
is lovely too.
\end{Exo}
\end{document}
如果没有 hyperref 包,我得到的是练习参考,而不是方程参考。使用 hyperref 包,我在第二次 latex 传递时收到错误。
我使用了一个\let\oldlabel\label
技巧,因为 align* 环境重新定义了\label
,但它不能\label
正常工作。
我怎样才能解决这个烦人的事情并让它发挥作用?
答案1
amsmath 对齐修复
如果您重新定义\eqref
使用\ref*
不创建超链接的星号版本,它就会起作用:
\makeatletter
\renewcommand{\eqref}[1]{\textup{\tagform@{\ref*{#1}}}}
\makeatother
表格解决方案
虽然我建议使用编号环境align
而不是align*
。我可以看到你使用align*
来实现一种不寻常的编号样式。但是,我会重新考虑是否值得与常见样式有所不同。
正如我在评论中所说:由于您没有对齐关系符号,因此我建议使用tabular(x)
单元格中有方程式的环境,而不是align
。这是一个使用编号宏的简单示例:
\usepackage{tabularx}
...
\begin{Exo}
\begin{tabularx}{.5\textwidth}{XX}
\Number\label{L1} \(x^2+x=2\), &
\Number\label{L2} \(x^3+x^2=0\).
\end{tabularx}
Equation~\eqref{L1} is very nice, and Equation~\eqref{L2}
is lovely too.
\end{Exo}
您可以进一步注意间距、居中和超链接设计。
此外,如果您在单元格中使用或,则可以equation
在表格中使用编号环境。它需要指定宽度,但您可以依赖 LaTeX 和 amsmath 的编号,而不是您自己制定的解决方案。\parbox
minipage
枚举列表解决方案
第三种方法是使用枚举列表。标签的外观可以更改为带有括号的方程式标签。对于水平编号的多列方程式,您可以使用多特努姆包裹。
一个小例子,使用你的定理环境,但没有引用计算结果:
\documentclass{amsart}
\usepackage{amsthm}
\usepackage{multienum}
\renewcommand{\regularlisti}{\setcounter{multienumi}{0}%
\renewcommand{\labelenumi}%
{\addtocounter{multienumi}{1}(\arabic{multienumi})}}
\usepackage[pdftex]{hyperref}
\parindent0pt
\newtheoremstyle{myexercise}{\baselineskip}{\baselineskip}{}{}%
{\bfseries}{.}{ }{\thmname{#1}\ \thmnumber{#2}}%
\theoremstyle{myexercise}
\newtheorem{Exo}{Exercise}[section]
\begin{document}
\section{Exercises}
\begin{Exo}
\qquad
\begin{minipage}[t]{.5\textwidth}
\begin{multienumerate}
\mitemxx{\(x^2+x=2\),}{\(x^3+x^2=0\).}
\end{multienumerate}
\end{minipage}
\end{Exo}
\end{document}