使用 cleveref 包时删除 Theorem 后面的点

使用 cleveref 包时删除 Theorem 后面的点

我想删除包中定理、定义等编号后的点amsthm。(所以我得到定理 1.1代替定理 1.1。)(编辑:我想从定理本身中删除点)
我正在使用hyperref和包,这两个包都存在问题。我已经在这里cleveref找到了包的解决方案hyperref使用 amsthm 和 hyperref 删除定理后的点,但使用该cleveref包时,点又会出现。

梅威瑟:

\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage{amsthm}
\usepackage{hyperref}
\usepackage{cleveref}

\newtheorem{theorem}{Theorem}[chapter]

\usepackage{xpatch}
\makeatletter
\AtBeginDocument{\xpatchcmd{\@thm}{\thm@headpunct{.}}{\thm@headpunct{}}{}{}}
\makeatother

\begin{document}

\chapter{Hello}

\begin{theorem}
    World
\end{theorem}

\end{document}

输出
在此处输入图片描述
我怎样才能去掉那个点?

答案1

cleveref更改\@thm使链接的解决方案不再起作用。\tracingpatches在尝试修补之前添加\@thm将显示“在替换文本中未找到搜索模式。”

以下更新使用时的补丁cleveref

在此处输入图片描述

\documentclass{scrbook}

\usepackage{amsthm}
\usepackage{hyperref}
\usepackage{cleveref}

\newtheorem{theorem}{Theorem}[chapter]

\usepackage{xpatch}
\makeatletter
% Patch to accommodate for \begin{theorem}[...]
\AtBeginDocument{\xpatchcmd{\cref@thmoptarg}{\thm@headpunct{.}}{\thm@headpunct{}}{}{}}
% Patch to accommodate \begin{theorem} (without an optional argument)
\AtBeginDocument{\xpatchcmd{\cref@thmnoarg}{\thm@headpunct{.}}{\thm@headpunct{}}{}{}}
\makeatother

\begin{document}

\chapter{Hello}

\begin{theorem}
World
\end{theorem}

\end{document}

我识别更新补丁的(粗略)过程:

  • 在补丁中的and中添加\typeout{success}and :\typeout{failure}<success><failure>

    \xpatchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
    

    这将允许您检查.log并查看补丁是否有效或失败。

  • 如果失败,请\tracingpatches在制作补丁之前添加并查看输出结果.log。搜索模式是否仍然相同?宏是否发生了变化?

  • 查看被修补的实际宏,看看它是如何定义的\show。在我的例子中,是\show\@thm

  • 从那里,按照任何附属宏定义来查看应该将更改应用到原始的位置\xpatchcmd

    在这种情况下,\@thm以可选参数为条件,并且cleveref由于两个子宏是\cref@thmoptarg和,因此它显然是由引入的\cref@thmnoarg

答案2

由于您正在使用amsthm,因此您需要定义一个新的定理样式:

\newtheoremstyle{nodot}
  {}{} % Default space above and below
  {\itshape}{} % italic body unindented
  {\bfseries}{} % bold theorem head, no dot after
  { }{} % normal space between theorem head and body, default head spec

texdoc amsthm通过在命令行中输入即可获得完整的详细信息。

相关内容