Vert 和 Tufte-Handout 不兼容

Vert 和 Tufte-Handout 不兼容

我尝试将tufte-handout文档类与verse包一起使用。但是,似乎默认tufte-handout加载hyperref,这会导致以下错误verse.sty

! LaTeX Error: Command \theHpoemline already defined.

研究解决方案让我得到了这个答案: 在 Tufte 讲义类中正确使用超链接选项的方法是什么?

nohyper使用文档类上的选项加载tufte-handout确实允许verse包运行,但我还需要该hyperref包。(hyperref事后加载仍然会导致相同的错误。)

我该如何处理这种明显的不兼容性?

梅威瑟:

\documentclass{tufte-handout}
\usepackage{verse}

\begin{document}
\begin{verse}
    A sprig, with its flower, I break.
\end{verse}
\end{document}

答案1

这应该可行:暂时禁用加载hyperref并在之后加载verseverse(不必要的?)定义\theHpoemline计数器格式,在我看来。

\documentclass[nohyper]{tufte-book}
\usepackage{verse}
\usepackage{hyperref}

\begin{document}
\begin{verse}
    A sprig, with its flower, I break.
\end{verse}
\end{document}

一个肮脏的解决办法,不需要直接改变verse.sty

由于verse.sty定义了一个计数器poemlinehyperref将自动执行\theHpoemline定义。然而,这很糟糕,因为

\newcommand*{\theHpoemline}{\arabic{verse@envctr}.\arabic{poemline}}

用于verse.sty

一种解决方法是暂时使用\providecommand而不是\newcommand,它不会抱怨已经存在的命令,并且在verse加载后切换回\newcommand

\documentclass{tufte-book}
%\hypersetup{colorlinks=true} Not needed, just for debug
\let\orignewcommand\newcommand  % store the original \newcommand
\let\newcommand\providecommand  % make \newcommand behave like \providecommand
\RequirePackage{verse}
\let\newcommand\orignewcommand  % use the original `\newcommand` in future
\makeatletter
% Use the original definition from verse.sty
\renewcommand*{\theHpoemline}{\arabic{verse@envctr}.\arabic{poemline}}
\makeatother

\begin{document}
\tableofcontents
\chapter{first}

\chapter{second}
\begin{verse}
    A sprig, with its flower, I break.
\end{verse}
\end{document}

答案2

我遇到了同样的问题,并通过在\hyperref加载之前加载包整齐地解决了它\verse

相关内容