如何使用交叉引用和超链接到对齐环境的各个部分?

如何使用交叉引用和超链接到对齐环境的各个部分?

我正在写一本练习册,在某些练习中,我会在对齐环境中列出几个编号方程式,例如,

(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 的编号,而不是您自己制定的解决方案。\parboxminipage

枚举列表解决方案

第三种方法是使用枚举列表。标签的外观可以更改为带有括号的方程式标签。对于水平编号的多列方程式,您可以使用多特努姆包裹。

一个小例子,使用你的定理环境,但没有引用计算结果:

\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}

在此处输入图片描述

相关内容