
tufte-handout
パッケージでドキュメント クラスを使用しようとしていますverse
。ただし、デフォルトでtufte-handout
ロードされhyperref
、次のエラーが発生するようですverse.sty
。
! LaTeX Error: Command \theHpoemline already defined.
解決策の選択肢を調べた結果、次のような答えにたどり着きました。 Tufte 配布資料クラスで hyperref オプションを使用する正しい方法は何ですか?
ドキュメント クラスnohyper
のオプションを使用してロードすると、パッケージは機能しますが、パッケージも必要です。(事後にロードすると、同じエラーが発生します。)tufte-handout
verse
hyperref
hyperref
この明らかな非互換性をどう管理すればよいのでしょうか?
MWE:
\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
。