多个“else if”

多个“else if”

在标记定理等时,标签通常采用这种形式:

\label{th:pyth}

因此,当提到定理时,我们经常写道:

According to theorem \ref{th:pyth} ...

但是“theorem”和“th”有点冗余,所以我想创建一个看起来像的命令\refenv{th}{pyth},它会输出theorem 1。为了做到这一点,我需要将第一个参数与字符串匹配,所以我尝试使用boolexpr包:

\usepackage{boolexpr}
\NewDocumentCommand{\refenv}{mm}{
    \switch
    \case{#1 = th} theorem
    \case{#1 = prop} proposition
    \case{#1 = coro} corollary
    \case{#1 = lem} lemma
    \case{#1 = prf} proof
    \case{#1 = def} definition
    \case{#1 = rem} remark
    \case{#1 = eq} equation
    \endswitch
    \ref{#1:#2}
}

没有成功,因为该boolexpr包只比较数字。如何找到不需要多个嵌套ifthenelse命令的等效方法?

答案1

您可以使用更灵活的大小写切换功能。

\documentclass{article}
\usepackage{amsthm}

\ExplSyntaxOn

\NewDocumentCommand{\refenv}{mm}
 {
  \str_case:nnF { #1 }
   {
    {th}{theorem}
    {prop}{proposition}
    {coro}{corollary}
    {lem}{lemma}
    {prf}{proof}
    {def}{definition}
    {rem}{remark}
    {eq}{equation}
   }
  {??}
  \nobreakspace\ref{#1:#2}
 }

\ExplSyntaxOff

% just a couple of envs
\newtheorem{theorem}{Theorem}
\theoremstyle{definition}
\newtheorem{definition}{Definition}

\begin{document}

\begin{definition}\label{def:important}
A \emph{definition} defines.
\end{definition}

\begin{theorem}\label{th:main}
The main theorem.
\end{theorem}

\begin{equation}\label{eq:best}
0=0
\end{equation}

We see that \refenv{th}{main} depends on \refenv{def}{important}
and \refenv{eq}{best}.

\end{document}

在此处输入图片描述

但最好使用cleveref

\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}

% just a couple of envs
\newtheorem{theorem}{Theorem}
\theoremstyle{definition}
\newtheorem{definition}{Definition}

\begin{document}

\begin{definition}\label{def:important}
A \emph{definition} defines.
\end{definition}

\begin{theorem}\label{th:main}
The main theorem.
\end{theorem}

\begin{equation}\label{eq:best}
0=0
\end{equation}

We see that \cref{th:main} depends on \cref{def:important}
and \cref{eq:best}.

\end{document}

在此处输入图片描述

请参阅手册以cleveref了解如何自定义参考。

答案2

egreg 建议的包cleveref满足了我的所有需求,并且消除了冗余,因此不需要再进行其他操作。

相关内容