Inkompatibilität zwischen Verse und Tufte-Handout

Inkompatibilität zwischen Verse und Tufte-Handout

Ich versuche, die tufte-handoutDokumentklasse mit dem versePaket zu verwenden. Es scheint jedoch, dass sie standardmäßig tufte-handoutgeladen wird , und dies verursacht den folgenden Fehler in :hyperrefverse.sty

! LaTeX Error: Command \theHpoemline already defined.

Die Recherche nach Lösungsmöglichkeiten führte mich zu dieser Antwort: Wie verwende ich Hyperref-Optionen richtig mit der Tufte-Handout-Klasse?

Das Laden mit der nohyperOption für die tufte-handoutDokumentklasse ermöglicht zwar die verseFunktion des Pakets, aber ich benötige das hyperrefPaket auch. ( hyperrefDas nachträgliche Laden führt immer noch zum selben Fehler.)

Wie gehe ich mit dieser offensichtlichen Inkompatibilität um?

MWE:

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

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

Antwort1

Das sollte funktionieren: Deaktivieren Sie vorübergehend das Laden hyperrefund laden Sie es nach verse. verse(unnötig?) definiert \theHpoemlinedas Zählerformat, aus meiner Sicht.

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

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

Ein schmutziger Workaround, ohne direkte Änderungen inverse.sty

Da verse.styein Zähler definiert wird poemline, hyperrefwird automatisch eine \theHpoemlineDefinition durchgeführt. Dies ist jedoch schlecht, da

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

wird in verwendet verse.sty.

Eine Problemumgehung besteht \providecommanddarin, vorübergehend anstelle von zu verwenden \newcommand, das sich nicht über bereits vorhandene Befehle beschwert, und nach versedem Laden wieder zu zu wechseln \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}

Antwort2

Ich hatte das gleiche Problem und habe es sauber gelöst, indem ich das Paket \hyperrefvor dem Laden geladen habe \verse.

verwandte Informationen