詩とタフテの配布物の非互換性

詩とタフテの配布物の非互換性

tufte-handoutパッケージでドキュメント クラスを使用しようとしていますverse。ただし、デフォルトでtufte-handoutロードされhyperref、次のエラーが発生するようですverse.sty

! LaTeX Error: Command \theHpoemline already defined.

解決策の選択肢を調べた結果、次のような答えにたどり着きました。 Tufte 配布資料クラスで hyperref オプションを使用する正しい方法は何ですか?

ドキュメント クラスnohyperのオプションを使用してロードすると、パッケージは機能しますが、パッケージも必要です。(事後にロードすると、同じエラーが発生します。)tufte-handoutversehyperrefhyperref

この明らかな非互換性をどう管理すればよいのでしょうか?

MWE:

\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

関連情報