Rückverweisfrage: 3-8 statt 3,4,5,6,7,8

Rückverweisfrage: 3-8 statt 3,4,5,6,7,8

Beachten Sie den folgenden Zitierstil:

Bildbeschreibung hier eingeben

Ich möchte, dass es als „1 und 3-8“ statt wie oben angezeigt wird. Irgendwelche Vorschläge? Ich möchte, dass 3 und 8 mit den Seiten 3 bzw. 8 verknüpft werden. Tatsächlich gibt es keinen direkten Link mehr zu den Seiten 4-7.

Zusatz:Ich verwende Folgendes:

\usepackage[backref=page]{hyperref}  
\usepackage[sort]{natbib}   
\hypersetup{   
    colorlinks=true,         
    allcolors=blue       
} 

\renewcommand*{\backref}[1]{}  
\renewcommand*{\backrefalt}[4]{\%  
\ifcase #1 (Not cited.)\%  
    \or        \footnotesize (Cited on page~#2.)\%  
    \else      \footnotesize (Cited on pages~#2.)\%  
    \fi  
}

Ergänzung (ein Minimalbeispiel): https://www.dropbox.com/sh/nvg52ixdt0h7bkb/AACMv8tsM1C0xGdRspJ300zga?dl=0

Antwort1

Da Sie kein LaTeX-Beispiel bereitgestellt haben und ich kein solches Beispiel erstellen möchte, zeige ich Ihnen, wie es auf einfacher TeX-Ebene geht. Die Hyperlinks werden mit OpTeX implementiert, \hyperlinksum zu zeigen, dass es möglich ist. Sie können dieses Beispiel verarbeiten, indem Sie optex testfile. Sie können das Makro neu definieren, \cpRum Hyperlinks mit der LaTeX-Methode zu erstellen.

\hyperlinks\Blue\Blue
% destinations to previous 30 pages:
\fornum 1..30 \do{\null\label[cp-#1]\wlabel{}\vfil\break} 

% macro \citedpages:
\def\afterfi#1#2\fi{\fi#1}
\newcount\cpnum
\def\citedpages#1{\let\next=\cpA \def\cplist{}\cpnum=-1 \cpA#1,,\end}
\def\cpA#1,{\ifx,#1,\expandafter\cpB \else
   \ifnum#1=\cpnum % do nothing:  3,3 -> 3
   \else \ifnum#1=\numexpr\cpnum+1\relax % 3,4 -> 3-4
         \advance\cpnum by1
   \else \edef\cplist{\cplist -\the\cpnum, #1}% 3,5 -> 3, 5
         \cpnum=#1\relax
   \fi\fi \expandafter\cpA \fi
}
\def\cpB#1\end{\edef\cplist{\cplist-\the\cpnum}%
   \expandafter\cpC\cplist, 0-0,
}
\def\cpC#1-#2, #3-#4, {\ifnum#4=0 and \fi % end game
   \ifnum #2=-1 % starting node, ignored
   \else \ifnum #1=#2 \cpR{#1}\cpD{#4}
         \else \cpR{#1}--\cpR{#2}\cpD{#4}
   \fi\fi 
   \ifnum #4=0 \else \afterfi{\cpC #3-#4, }\fi
}
\def\cpD#1{\ifnum#1=0 \else,\fi}
\def\cpR#1{\pgref[cp-#1]}% OpTeX's hyperlink to the page.

% test:
Cited on pages \citedpages{1,3,4,5,6,7,8,20,21,22,25,27,30}.

\end

Die ersten drei Zeilen sind OpTeX-spezifisch, die nächsten Zeilen sind reines Plain TeX, mit Ausnahme des Makros, das wie in reinem Plain TeX (ohne Hyperlinks) \cpRdefiniert werden kann .\def\cpR#1{#1}

Das \citedpagesMakro arbeitet in zwei Schritten. Im ersten Schritt liest es

{1,3,4,5,6,7,8,20,21,22,25,27,30}
 

(in unserem Beispiel) und erstellt das \cplistMakro mit dem Inhalt:

--1, 1-1, 3-8, 20-22, 25-25, 27-27, 30-30

Der zweite Schritt wird durch die Zeile ausgeführt \expandafter\cpC\cplist, 0-0,. Sie erzeugt das gewünschte Ergebnis:

\cpR{1}, \cpR{3}--\cpR{8}, \cpR{20}--\cpR{22}, \cpR{25}, \cpR{27}, and \cpr{30}

Bearbeiten:Wenn Sie dieses Makro mit natbib und mit Neudefinition von verwenden möchten, \backrefaltkann diese Neudefinition folgendermaßen aussehen:

\renewcommand*{\backrefalt}[4]{%
        \ifcase #1 (Not cited.)%
        \or        \footnotesize (Cited   on   {{#2}}.)%
        \else   
               \def\cplist{}\cpnum=-1
               \expandafter\readcplist #2\backrefxxx{0}%
               \footnotesize (Cited on pages~{{\expandafter\cpA\cplist,,\end}}.)%
        \fi
}
\def\readcplist #1\backrefxxx#2{%
    \ifnum#2=0 \else \edef\cplist{\cplist #2,}\expandafter\readcplist\fi}

Diese Lösung fügt jedoch die Liste der Seiten ohne Hyperlinks hinzu. Wenn Sie Hyperlinks hinzufügen möchten, definieren Sie diese \cpRwie folgt:

\def\cpR#1{\backrefxxx{#1}{}{}}% hyperref backref page links.

verwandte Informationen