如果未加载包,请提供不干扰的命令

如果未加载包,请提供不干扰的命令

在一个 (复杂的) 命令定义,我正在使用\hyperref{...。但是包 hyperref 会减慢编译速度。所以我想让 make\hyperref什么都不做,只要包 hyperref 没有加载。

\usepackage{hyperref}在后期,当我不需要经常编译时,我会添加一些内容到我的文本中。

所以我想到了\providecommand。我不知道如何定义它,\hyperref让它什么都不做,但不会阻止我的其余复杂命令的执行。

我写了一个 MWE。如果hyperref包未加载,\secref则应像没有一样执行\hyperref,这意味着在我的愚蠢示例中,应该只\ref执行。

\documentclass{article}

\providecommand{\hyperref}{»DO NOTHING«}

\newcommand{\secref}[1]{%
  \hyperref{%
    \ref{#1}
  }
}

\begin{document}

\section{Huhu}
\label{CLA:huhu}

Text \secref{CLA:huhu}

\end{document}

我知道我的例子行不通,如果我加载了hyperref包,但这不是问题。我对 MWE 缺乏更好的想法。

答案1

hyperref软件包附带了nohyperref命令语法,hyperref无需实际复杂的hyperref机制。这使其对草稿文档很有用,这似乎正是您正在寻找的。

例子:

\documentclass{article}

\usepackage{nohyperref}

\newcommand{\secref}[1]{%
  \hyperref[#1]{section \ref*{#1}}%
}

\begin{document}

\section{Huhu}
\label{CLA:huhu}

Text \secref{CLA:huhu}

\end{document}

当您接近文档的最终版本时,您只需将其替换nohyperrefhyperref

hyperref另一种可能性是使用以下选项加载draft

\documentclass{article}

\usepackage[draft]{hyperref}

\newcommand{\secref}[1]{%
  \hyperref[#1]{section \ref*{#1}}%
}

\begin{document}

\section{Huhu}
\label{CLA:huhu}

Text \secref{CLA:huhu}

\end{document}

这也加快了文档编译的速度。

答案2

您可以简单地使用\ignorespaces

\documentclass{article}

\providecommand{\hyperref}[4]{#1\ignorespaces}

\newcommand{\secref}[1]{%
  \hyperref{%
    \ref{#1}
  }{}{}{}
}

\begin{document}

\section{Huhu}
\label{CLA:huhu}

Text \secref{CLA:huhu}


\end{document}

相关内容