
Я пытаюсь использовать 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
.