这不算是一个回答
可以缩短mwe:
\documentclass{beamer}
\usepackage{cleveref}
\begin{document}
\begin{frame}
Hello, world!
\end{frame}
\end{document}甚至可以只是:
\documentclass{article}
\usepackage[implicit=false]{hyperref}
\usepackage{cleveref}
\begin{document}
Hello, world!
\end{document}maybe related link:
OP的一个来源on TSE
一点小探索,一般的宏包在使用global option指定选项之后,均可以通过:\<package>setup之类的命令实现覆盖(overwritten),但这对于hyperref并不奏效,查看hyperref.sty(需要pdflatex hyperref.dtx)可以发现:
当传入impilicit=false时,由于:
%Line2283 将其默认值设置为true
\define@key{Hyp}{implicit}[true]{%
\Hy@boolkey{implicit}{#1}%
}同时这会触发所谓的patch external commands
% Line 4179~4203
\ifHy@implicit
\Hy@InfoNoLine{Implicit mode ON; LaTeX internals redefined}%
\else
\Hy@InfoNoLine{Implicit mode OFF; no redefinition of LaTeX internals}%
\def\MaybeStopEarly{%
\Hy@Message{Stopped early}%
\Hy@AtBeginDocument{%
\PDF@FinishDoc
\gdef\PDF@FinishDoc{}%
}%
\endinput
}%
\Hy@AtBeginDocument{%
\let\autoref\ref
\let\autopageref\pageref
\ifx\@pdfpagemode\@empty
\gdef\@pdfpagemode{UseNone}%
\fi
\global\Hy@backreffalse
}%
\Hy@AtEndOfPackage{%
\global\let\ReadBookmarks\relax
\global\let\WriteBookmarks\relax
}%
\fi
%Line 4521~4540
\ifHy@implicit
\let \T@Ref\HyRef@Ref
\def\@refstar#1{%
\NR@ref@showkeys{#1}%
\HyRef@StarSetRef{#1}\@firstoffive
}
\def\@pagerefstar#1{%
\NR@ref@showkeys{#1}%
\HyRef@StarSetRef{#1}\@secondoffive
}
\def\@namerefstar#1{%
\NR@ref@showkeys{#1}%
\HyRef@StarSetRef{#1}\@thirdoffive
}
\def\@Refstar#1{%
\NR@ref@showkeys{#1}%
\HyRef@StarSetRef{#1}\HyRef@MakeUppercaseFirstOfFive
}%
\else
\fi且与此同时在:
% Line4204
\Hy@DisableOption{implicit}这也解释了即使使用\hypersetup{}在main.tex中再次显式设置implicit选项,也无法修改beamer.cls中\RequirePackage[implicit=false]{hyperref}的显式设置的原因.
我猜这种设计是因为implicit所进行的操作均为内部patch,因此disabled了用户从外部修改implicit的接口以防止奇怪的更改。






















问 如何在不手动更改`beamer.cls`第·376·行代码的情况下消除`hyperref`和`cleveref`之间的冲突?