使用 \cref 和自定义标签作为推理规则名称

使用 \cref 和自定义标签作为推理规则名称

我有一个数组环境,用于呈现推理规则(通过自定义命令)。现在,这些推理规则有名称,我想使用 \label 和 \cref 命令引用它们。我猜这是可能的,尽管细节我不清楚。

作为一个小例子,这是命令:

\newcommand{\typerule}[3]{\ensuremath{\begin{array}{c}\textit{\scriptsize ({#1})} \\#2 \\\hline{\ensuremath{#3}}\end{array}}}

它产生一个推理规则,其中包含假设(#2)、一条线、一个结论(#3),所有这些都以规则的名称(#1)为顶部。

我的想法是添加另一个参数和一些与之相关的 \label-style,以便稍后在文本中我可以使用 cleveref 的 \cref{},然后弹出环境中保存的名称(和相关的类别名称)。

所以我会写

\typerule{name}{premise}{conclusion}{labelidentifier}

和其他地方

The \cref{labelidentifier} does ...

产生的输出应该是这样的

The rule name does

在哪里规则由 cleveref 生成,姓名是我之前指定的那个。

答案1

欺骗cleveref人们认为“名字”就是数字。

\documentclass{article}
\usepackage{array,booktabs,cleveref}

\newcounter{typerule}
%%% standard format
%\crefname{typerule}{rule}{rules}
%%% more complex form
\crefformat{typerule}{#2rule~\textit{#1}#3}
\Crefformat{typerule}{#2Rule~\textit{#1}#3}

\newcommand{\typerule}[4]{%
  \def\thetyperule{#1}%
  \refstepcounter{typerule}%
  \label{#4}%
  \begin{tabular}{c}
  \scriptsize (\textit{#1}) \\
  $#2$ \\
  \midrule
  $#3$
  \end{tabular}%
}

\begin{document}

\typerule{modus ponens}{A\to B\quad A}{B}{MP}

\bigskip

The \cref{MP} does something.

\end{document}

我还对您的命令进行了一些更改,以便删除带有的杂技部分\ensuremath并添加带有的更好的间距\cmidrule

在此处输入图片描述

相关内容