Cleveref cref 带计数器的问题:在新的 ACM 模板中对所有其他标签使用“定理”

Cleveref cref 带计数器的问题:在新的 ACM 模板中对所有其他标签使用“定理”

新的 ACM 模板引入了新的环境,如“示例”、“定义”等。现在你可以写:

\begin{example}
\label{myex}
Assume BLA BLA
\end{example}

输出应为:

例 4.1假设 BLA BLA

但是如果你用\cref{myex}它来交叉引用,它就会出现“定理”标签而不是“示例”:

In \cref{myex}, we explained BLA BLA

输出为:

In theorem 4.1. we explained BLA BLA

我不想修改主.cls文件,而是想更新评论之类的。我尝试了一些技巧,包括但没有成功。

更新:

最小可编译代码:

\documentclass[sigconf]{acmart}
\usepackage{cleveref}

\Crefname{example}{Example}{Examples}

\begin{document}
\begin{example}
\label{myex}
Assume bla bla
\end{example}

In \cref{myex}, we show 
\end{document}

答案1

解决方案[建议来自christian-hupfer ]

通过使用 来指定您想要使用的计数器\label。像这样:

\label[example]{myex}

类似地,如果您使用另一个环境(例如“定义”),您可以像这样否决计数器:

\label[definition]{mydef}

答案2

我建议您执行以下操作:

  • 在您的 TeX 发行版中查找该文件acmart.cls。(在我的系统上,TeX 发行版是 MacTeX2016,该文件位于/usr/local/texlive/2016/texmf-dist/tex/latex/acmart/acmart.cls。)

  • 复制此文件,并将该副本命名为(例如)acmartclever.cls请勿编辑或以其他方式修改直接访问该文件acmart.cls

  • 在文本编辑器中打开文件acmartclever.cls。(您用于 tex 文件的编辑器就可以了。)

  • 对字符串进行全局搜索和替换acmart.cls- 该字符串应该有 11 个实例 - 并用 替换该字符串acmartclever.cls

  • 在文件的第 40 行,将字符串替换\ProvidesClass{acmart}\ProvidesClass{acmartclever}

    类似地,在文件的第 43 行,将字符串替换\def\@classname{acmart}\def\@classname{acmartclever}

  • 转到文件的第 2188 行并插入指令

    \usepackage{cleveref}
    

    紧接着写着 的那一行\theoremstyle{acmplain}。你可能会问,为什么不放在文件后面呢?这是因为声明后面\theoremstyle{acmplain}是一组长列表的类定理环境定义,例如theoremconjecturepropositionlemmacorollaryexampledefinitioncleveref即使所有类定理环境共享相同的计数器,它也足够聪明,可以将环境与标签关联起来。但是,为了执行这些巧妙的关联,cleveref必须加载建立了类定理环境。

    如果你习惯于cleveref使用部分或全部选项nameinlinkcapitalize和进行加载noabbrev,那么你应该现在就指定它们,即编写类似

    \usepackage[nameinlink,capitalize,noabbrev]{cleveref}
    

    或者,更灵活的是,只需在指令中指定的选项列表中提供部分或全部这些选项\documentclass

  • 将该文件保存acmartclever.cls在主 tex 文件所在的目录中。

  • 在你的主 tex 文件中,第一行现在应该是

    \documentclass[<options>]{acmartnew}
    

TeXing 快乐!


完整的 MWE:

在此处输入图片描述

\documentclass[sigconf,capitalize]{acmartclever} % note the option 'capitalize': it will
                                                 % be passed to 'cleveref'
\begin{document}
\setcounter{section}{2} % just for this example

\begin{example}\label{myex}
Assume bla bla
\end{example}

In \cref{myex}, we showed that \dots
\end{document}

答案3

我已将 cleveref 添加到使用的软件包列表中。此版本正式发布后,问题已解决

相关内容