如何创建一个新的类似方程的环境?

如何创建一个新的类似方程的环境?

以下 LaTeX 代码保存在 中~\Test.tex

\documentclass{article}
\usepackage{cleveref}
\begin{document}
\begin{equation}\label{q}
x \leq y
\end{equation}
Behold~\cref{q}. 
\end{document}

然后在终端中执行以下命令。

> cd ~
> lualatex Test

因此,在 中生成了一个 PDF 文件~\Test.pdf。在 PDF 查看器中打开时,文件显示如下。(我仅截取了显示的相关部分。)

平等环境

我想创建一个equality名为 的环境inequality,它将用于排版不等式,其交叉引用将显示不平等代替等式。此新功能的效果应该是这样的,如果在上面的 LaTeX 代码中,两个出现的equality被替换为inequality,则生成的 PDF 文件将与以前几乎相同,只是缩写等式将被取代不平等。新inequality环境应该与环境共享一个计数器equality


一次尝试

我尝试使用以下代码来实现我的目标。

\documentclass{article}
\usepackage{cleveref}
\newenvironment{inequality}{\begin{equation}}{\end{equation}}
\crefname{inequality}{ineq.}{ineqs.}
\Crefname{inequality}{Ineq.}{Ineqs.}
\begin{document}
\begin{inequality}\label{q}
x \leq y
\end{inequality}
Behold~\cref{q}. 
\end{document}

然而,生成的 PDF 文件看起来和以前一样。特别是交叉引用写成等式,而不是不平等

答案1

使用\crefalias(手册第 6 部分cleveref)。

\documentclass{article}
\usepackage{cleveref}

\newenvironment{inequality}
  {\crefalias{equation}{inequality}\begin{equation}}
  {\end{equation}\ignorespacesafterend}
\crefname{inequality}{ineq.}{ineqs.}
\Crefname{inequality}{Ineq.}{Ineqs.}

\begin{document}

\begin{inequality}\label{q}
x \leq y
\end{inequality}
Behold~\cref{q}.

\begin{equation}\label{r}
x = y
\end{equation}
Behold~\cref{r}.

\end{document}

在此处输入图片描述

如果您想要获得与方程式相同的输出,则需要使用\crefformat和朋友。

答案2

您无需创建新环境即可完成此操作,只需通过 cleveref 即可:

\documentclass{article}
\usepackage{cleveref}
\newcounter{inequality}
\crefname{inequality}{Inequality}{Inequalities}
\begin{document}

\begin{equation}\label[inequality]{q}
x \leq y
\end{equation}
Behold~\cref{q}. 
\end{document}

如果您想要保留方程的(连续)编号,则可以使用 aliascnt 包。

\documentclass{article}
\usepackage{aliascnt}
\usepackage{cleveref}
\newaliascnt{inequality}{equation}
\crefname{inequality}{ineq.}{ineqs.}
\begin{document}

\begin{equation}\label[inequality]{q}
x \leq y
\end{equation}

\begin{equation}\label{r}
x = y
\end{equation}
Behold~\cref{q} and \cref{r}. 
\end{document}

更新: 这基于之前的解决方案,确实创建了一个新环境。标签类型在环境中被覆盖为不等式,因此不必提供。

\documentclass{article}
\usepackage{aliascnt}
\usepackage{cleveref}
\newaliascnt{inequality}{equation}
\crefname{inequality}{ineq.}{ineqs.}
\makeatletter


\newenvironment{inequality}{
\begin{equation}
\protected@edef\cref@currentlabel{%
  \expandafter\cref@override@label@type%
    \cref@currentlabel\@nil{inequality}}%
}{
\end{equation}
}

\begin{document}

\begin{inequality}\label{in1}
x \leq y
\end{inequality}

\begin{equation}\label{eq1}
x = y
\end{equation}

\begin{inequality}\label{in2}
x \geq y
\end{inequality}

\begin{equation}\label{eq2}
x + 1 = y + 1
\end{equation}

Behold~\cref{in1} and \cref{eq2} and \cref{in2} and \cref{eq2}. 


\end{document}

相关内容