Cleveref 的 poorman 选项不适用于 hyperref

Cleveref 的 poorman 选项不适用于 hyperref

我有这个MWE:

\documentclass[11pt]{article}
\usepackage{amsmath}

\RequirePackage[colorlinks=true
  ,urlcolor=blue
  ,anchorcolor=blue
  ,citecolor=blue
  ,filecolor=blue
  ,linkcolor=blue
  ,menucolor=blue
  ,linktocpage=true
  ,pdfproducer=medialab
  ,pdfa=true
]{hyperref}

\usepackage[poorman,capitalize,english]{cleveref}

\pagestyle{empty}
\begin{document}

\section{First section\label{sec:01}}
Text \cref{eq:01} in \cref{sec:01}:
\begin{equation}
\label{eq:01}
x+y=z
\end{equation}

\end{document}

当我运行时,pdflatex MWE.tex我会得到MWE.sed文件,但如果我运行:

sed -f MWE.sed MWE.tex > unclevereffedMWE.tex

我得到:

\documentclass[11pt]{article}
\usepackage{amsmath}

\RequirePackage[colorlinks=true
  ,urlcolor=blue
  ,anchorcolor=blue
  ,citecolor=blue
  ,filecolor=blue
  ,linkcolor=blue
  ,menucolor=blue
  ,linktocpage=true
  ,pdfproducer=medialab
  ,pdfa=true
]{hyperref}

\pagestyle{empty}
\begin{document}

\section{First section\label{sec:01}}
Text \cref{eq:01} in \cref{sec:01}:
\begin{equation}
\label{eq:01}
x+y=z
\end{equation}

\end{document}

如果我删除该hyperref包,它就可以正常工作。现在,我试图在.sed不删除hyperref包的情况下“强制”生成工作文件。我试过:

\documentclass[11pt]{article}
\usepackage{amsmath}

\makeatletter
\@namedef{[email protected]}{} 
\makeatother

\RequirePackage[colorlinks=true
  ,urlcolor=blue
  ,anchorcolor=blue
  ,citecolor=blue
  ,filecolor=blue
  ,linkcolor=blue
  ,menucolor=blue
  ,linktocpage=true
  ,pdfproducer=medialab
  ,pdfa=true
]{hyperref}

\usepackage[poorman,capitalize,english]{cleveref}

\pagestyle{empty}
\begin{document}

\section{First section\label{sec:01}}
Text \cref{eq:01} in \cref{sec:01}:
\begin{equation}
\label{eq:01}
x+y=z
\end{equation}

\end{document}

但它不起作用。我想我需要欺骗这个选项:

\@ifpackageloaded{hyperref}

cleveref.sty。这可能吗?我做错了吗?

笔记。请记住,我的最终目标是在.sed不修改原始MWE.tex文件的情况下“强制”生成文件。

我的目标是将外部重新定义/选项传递给引擎pdflatex。例如:

pdflatex "\AtBeginDocument{OPTIONS} \input{MWE.tex}"

在此阶段我不关心警告或布局。

答案1

让我们来看看我的 MWE,其中我从包的选项中删除了该poorman选项:cleveref

\documentclass[11pt]{article}
\usepackage{amsmath}

\RequirePackage[colorlinks=true
  ,urlcolor=blue
  ,anchorcolor=blue
  ,citecolor=blue
  ,filecolor=blue
  ,linkcolor=blue
  ,menucolor=blue
  ,linktocpage=true
  ,pdfproducer=medialab
  ,pdfa=true
]{hyperref}

\usepackage[capitalize,english]{cleveref}

\pagestyle{empty}
\begin{document}

\section{First section\label{sec:01}}
Text \cref{eq:01} in \cref{sec:01}:
\begin{equation}
\label{eq:01}
x+y=z
\end{equation}

\end{document}

我可以使用以下命令生成 MWE.sed 文件:

latexmk -pdf -usepretex='\PassOptionsToPackage{poorman}{cleveref}\makeatletter\disable@package@load{hyperref}{}\makeatother' -pdflatex='touch %D; pdflatex -draftmode  %O %P' MWE.tex

我用:

latexmk -pdf

调用pdflatex并编译文件正确的次数。

-usepretex='\PassOptionsToPackage{poorman}{cleveref}

poorman选项传递给cleveref包。

\makeatletter\disable@package@load{hyperref}{}\makeatother'

hyperref按照建议禁用该包乌尔丽克·菲舍尔

-pdflatex='touch %D; pdflatex -draftmode  %O %P' MWE.tex

以避免生成该MWE.pdf文件。

现在我可以使用:

sed -f MWE.sed MWE.tex > unclevereffedMWE.tex

在我的实际情况中我将使用这个命令:

latexmk -pdf -usepretex='\PassOptionsToPackage{poorman}{cleveref} \makeatletter\disable@package@load{hyperref}{}\makeatother \let\href\empty\let\url\empty\let\texorpdfstring\empty' -pdflatex='touch %D; pdflatex -draftmode  %O %P' -output-directory=/tmp -jobname=uncleveref MWE.tex

添加:

\let\href\empty\let\url\empty\let\texorpdfstring\empty

以及选项:

-output-directory=/tmp -jobname=uncleveref

生成文件/tmp/uncleveref.sed

我将使用该uncleveref.sed文件准备一个Emacs交互式函数来执行替换。

答案2

冲突是因为 hyperref 向 cleveref 未预料到的 .aux 文件写入了内容。以下方法似乎可以解决这个问题:

\documentclass[11pt]{article}
\usepackage{amsmath}

%\usepackage[colorlinks=true
%  ,urlcolor=blue
%  ,anchorcolor=blue
%  ,citecolor=blue
%  ,filecolor=blue
%  ,linkcolor=blue
%  ,menucolor=blue
%  ,linktocpage=true
%  ,pdfproducer=medialab
%  ,pdfa=true
%]{hyperref}

\usepackage[poorman,capitalize,english]{cleveref}

\pagestyle{empty}
\begin{document}

\section{First section\label{sec:01}}
Text \cref{eq:01} in \cref{sec:01}:
\begin{equation}
\label{eq:01}
x+y=z
\end{equation}

\end{document}

现在运行 sed:

sed -f MWE.sed MWE.tex > MWE_unclever.tex

现在编辑“unclever”文件并取消注释hyperref部分,它就应该正常工作。

相关内容