Etoolbox \ patchcmd, hyperref paketi nedeniyle arama kalıbını bulamıyor

Aug 22 2020

Kullandığım reportsınıf ve ben (gibi bu sitede diğer sorular öğrendikleri Lof başına bölümde rakamlar arasında Kaldır aralık ben Lof başına bölümde figürler arasındaki boşluğu ayarlamak nasıl). Geleneksel olanı değiştirmek isterim

\addtocontents{lof}{\protect\addvspace{10\p@}}

report.cls dosyasında

\addtocontents{lof}{\protect\addvspace{15\p@}} bu yamayı kullanarak:

\makeatletter
\patchcmd{\@chapter}%
  {\addtocontents{lof}{\protect\addvspace{10\p@}}}% <search>
  {\addtocontents{lof}{\protect\addvspace{15\p@}}}% <replace>
  {}{}% <success><failure>
\makeatother

Ancak, yayınlayarak \tracingpatchesşunları görebilirim:

[debug] analyzing '\@chapter'
[debug] ++ control sequence is defined
[debug] ++ control sequence is a macro
[debug] ++ macro can be retokenized cleanly
[debug] -- search pattern not found in replacement text

Yanlış bir şey mi yapıyorum ? \patchcmdBelirtilen kodu neden bulamıyorum anlamıyorum . Kayıt için, belgemde başka 3 yama var (değiştirilmiyor \@chapter) ve hepsi iyi çalışıyor.

Düzenleme: Bir MWE hazırlarken, paketin hyperrefsuçlu olduğunu anladım , çünkü kaldırmak sorunu çözüyor.

\documentclass[12pt,twoside,openright]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
\usepackage{microtype}

\usepackage{etoolbox}

\usepackage[pdftex,colorlinks,linkcolor=blue,citecolor=red]{hyperref}

%----------------------- Patch -----------------------
\tracingpatches
\makeatletter
\patchcmd{\@chapter}%        
  {\addtocontents{lof}{\protect\addvspace{10\p@}}}% <search>
  {\addtocontents{lof}{\protect\addvspace{15\p@}}}% <replace>
  {}{}% <success><failure>
\makeatother
%-----------------------------------------------------


\begin{document}
\listoffigures
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\appendix
\chapter{A chapter}
\addtocontents{lof}{\protect\addvspace{10pt}}%
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\end{document}

Bunu düzeltmenin bir yolu var mı? hyperrefPaketi yüklemeye devam etmem gerekiyor .

Yanıtlar

3 moewe Aug 22 2020 at 12:10

hyperref işini yapmak için çok sayıda dahili komut tanımlaması gerekir.

Bu durumda, orijinal tanımı tarafından \@chapterkaydedilir , daha sonra bazı bağlantıların yapılması için yeniden tanımlanır ve ardından çağrılar yapılır .\Hy@org@chapterhyperref\@chapter\Hy@org@chapter

Yani buradaki çözüm \Hy@org@chapter, \@chapterne zaman hyperrefyüklendiğini değil yama yapmaktır.

\documentclass[12pt,twoside,openright]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
\usepackage{microtype}

\usepackage{etoolbox}

\usepackage[pdftex,colorlinks,linkcolor=blue,citecolor=red]{hyperref}

%----------------------- Patch -----------------------
\tracingpatches
\makeatletter
\patchcmd{\Hy@org@chapter}%        
  {\addtocontents{lof}{\protect\addvspace{10\p@}}}% <search>
  {\addtocontents{lof}{\protect\addvspace{15\p@}}}% <replace>
  {}{}% <success><failure>
\makeatother
%-----------------------------------------------------


\begin{document}
\listoffigures
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\appendix
\chapter{A chapter}
\addtocontents{lof}{\protect\addvspace{10pt}}%
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\end{document}

verir

ve

[debug] tracing \patchcmd on input line 16
[debug] analyzing '\Hy@org@chapter'
[debug] ++ control sequence is defined
[debug] ++ control sequence is a macro
[debug] ++ macro can be retokenized cleanly
[debug] ++ search pattern found in replacement text
[debug] ++ patching possible
[debug] == retokenizing macro now

Alternatif olarak, yeniden tanımlamalarını uygulamadan önce hyperref yamanızı yerleştirmeyi deneyebilirsiniz .

\documentclass[12pt,twoside,openright]{report}

\usepackage{etoolbox}

%----------------------- Patch -----------------------
\tracingpatches
\makeatletter
\patchcmd{\@chapter}%        
  {\addtocontents{lof}{\protect\addvspace{10\p@}}}% <search>
  {\addtocontents{lof}{\protect\addvspace{15\p@}}}% <replace>
  {}{}% <success><failure>
\makeatother
%-----------------------------------------------------

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
\usepackage{microtype}

\usepackage[pdftex,colorlinks,linkcolor=blue,citecolor=red]{hyperref}



\begin{document}
\listoffigures
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\chapter{A chapter}
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\appendix
\chapter{A chapter}
\addtocontents{lof}{\protect\addvspace{10pt}}%
\begin{figure}\caption{A figure}\end{figure}
\begin{figure}\caption{A figure}\end{figure}
\end{document}

David Carlisle'e yorumlarda bunu önerdiği için teşekkürler .