是否可以收集 hyperref 的 \hypersetup 参数?

是否可以收集 hyperref 的 \hypersetup 参数?

假设您想要在.sty.cls文件中设置一些hyperref选项,以防最终用户加载此包。因为只有在文档的开头您才知道是否hyperref已加载,所以您必须使用类似以下内容:

\AtBeginDocument{%
  \@ifpackageloaded{hyperref}{%
    \hypersetup{%
      ⟨my advised hyperref's options⟩%
    }%
  }{%
  }%
}%

这已经在在自己的包中使用 hypersetup

但是这种方法的缺点是,如果最终用户有不同的品味并\hypersetup{⟨another hyperref's options⟩}在其序言中插入,则\AtBeginDocument{\hypersetup{...}}来自.sty.cls文件的内容将覆盖他的设置。

为了避免这个问题,最终用户可以\hypersetup在文档正文中而不是在序言中指定自己的选择。但是,假设您不想让最终用户分心,是否可以收集 hyperref 的\hypersetup参数?

这个想法是在文档开始时获取在级别\usepackage(使用宏很容易\@ifpackagewith)或作为\hypersetup参数指定的可能选项,而不是覆盖它们。

答案1

我想我已经找到了一个针对主要问题的真正答案,但它不是针对根本问题的解决方案(即如何不通过或文件中的声明覆盖最终用户hyperref的选项):而不是\AtBeginDocument{\hypersetup{...}}.sty.cls

\AtBeginDocument{%
  \@ifpackageloaded{hyperref}{%
    \hypersetup{%
      ⟨my advised hyperref's options⟩%
    }%
  }{%
  }%
}%

它应该足够使用

\PassOptionsToPackage{%
  ⟨my advised hyperref's options⟩
}{hyperref}%

hyperref这些选项只有在加载时才会被考虑,并且只在加载时才会被考虑。因此,⟨another hyperref's options⟩使用以下方式指定

\hypersetup{⟨another hyperref's options⟩}

\usepackage[⟨another hyperref's options⟩]{hyperref}

将覆盖或文件⟨my advised hyperref's options⟩中指定的内容。.sty.cls

相关内容