我有一个数组环境,用于呈现推理规则(通过自定义命令)。现在,这些推理规则有名称,我想使用 \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
。