
我正在嘗試將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
並在 後加載它verse
。verse
(不必要?)\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
定義了一個計數器poemline
,hyperref
就會自動\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
。