Verse 和 Tufte-Handout 不相容

Verse 和 Tufte-Handout 不相容

我正在嘗試將tufte-handout文檔類與verse包一起使用。但是,似乎預設情況下tufte-handout會加載hyperref,這會導致以下錯誤verse.sty

! LaTeX Error: Command \theHpoemline already defined.

研究解決方案的選項使我得到了這個答案: 將 hyperref 選項與 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

相關內容