Pregunta de referencia retrospectiva: 3-8 en lugar de 3,4,5,6,7,8

Pregunta de referencia retrospectiva: 3-8 en lugar de 3,4,5,6,7,8

Considere el siguiente estilo de cita a continuación:

ingrese la descripción de la imagen aquí

Me gustaría que se muestre como ''1 y 3-8'' en lugar de lo anterior. ¿Alguna sugerencia? Quiero que 3 y 8 estén vinculados a las páginas 3 y 8, respectivamente. De hecho, ya no existe un enlace directo a las páginas 4 a 7.

Suma:Estoy usando lo siguiente:

\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  
}

Adición (un ejemplo mínimo): https://www.dropbox.com/sh/nvg52ixdt0h7bkb/AACMv8tsM1C0xGdRspJ300zga?dl=0

Respuesta1

Como no ha proporcionado un ejemplo de LaTeX y no quiero prepararlo, le muestro cómo hacerlo en un nivel simple de TeX. Los hipervínculos se implementan utilizando OpTeX \hyperlinkspara mostrar que esto es posible. Puede procesar este ejemplo mediante optex testfile. Puede redefinir la macro \cpRpara crear hipervínculos utilizando el método LaTeX.

\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

Las primeras tres líneas son específicas de OpTeX, las siguientes líneas son TeX puro con excepción de la macro \cpRque se puede definir como \def\cpR#1{#1}en TeX puro (sin hipervínculos).

La \citedpagesmacro funciona en dos pasos. En el primer paso se lee

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

(en nuestro ejemplo) y crea la \cplistmacro con el contenido:

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

El segundo paso se realiza por la línea \expandafter\cpC\cplist, 0-0,. Crea el resultado deseado:

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

Editar:Si desea utilizar esta macro con natbib y con la redefinición de, \backrefaltesta redefinición puede verse así:

\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}

Pero esta solución agrega la lista de páginas sin hipervínculos. Si desea agregar hipervínculos, defina \cpRde la siguiente manera:

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

información relacionada