创建新环境并引用

创建新环境并引用

我正在尝试创建一个可引用的“系统”环境,该环境基本上显示带有自定义计数器的方程式。然后我想用 引用该环境autoref,以便在引用它时将“系统 (S1)”作为输出。

\newcounter{system}\setcounter{system}{0}

\newenvironment{system}{\refstepcounter{system}\begin{equation*}}{\hfill(S\arabic{system})
\end{equation*}}

\hyperref[system]{System~\ref{system}}
\def\systemautorefname{System}

\begin{system}
 \dot x=u(x),
\label{s1}
\end{system}

然而,当我这样做的时候

\autoref{s1}

我收到一条错误消息,提示引用s1未定义。我遗漏了什么?

答案1

一些评论:

  • 标签已使用名称s1,引用system。标签名称必须匹配,下例使用s1
  • useequation*表示可能amsmath使用该包。
  • 可以amsmath \tag用来打印方程式编号。
  • 重新定义\p@system有助于在引用数字时获得数字周围的括号。
  • 我已将具有名称的\label外部环境equation作为环境选项,system以避免重新定义\label内部环境的麻烦amsmath
  • 的星号形式\ref避免了在带有 的行内的链接中使用链接\hyperref

例子:

\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}

\newcounter{system}
\renewcommand*{\thesystem}{S\arabic{system}}
\newcommand*{\systemautorefname}{System}
\makeatletter
\renewcommand*{\p@system}{%
  \expandafter\p@@system
}
\newcommand*{\p@@system}[1]{%
  (#1)%
}
\makeatother

\newenvironment{system}[1][]{%
  \refstepcounter{system}%
  \ifx\\#1\\%
  \else
    \label{#1}%
  \fi
  \begin{equation}%
}{%
  \tag{\thesystem}%
  \end{equation}%
}

\begin{document}

\hyperref[s1]{System~\ref*{s1}}, \autoref{s1}

\begin{system}[s1]
 \dot x=u(x),
\end{system}

\end{document}

相关内容