
Considere el siguiente estilo de cita a continuación:
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 \hyperlinks
para mostrar que esto es posible. Puede procesar este ejemplo mediante optex testfile
. Puede redefinir la macro \cpR
para 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 \cpR
que se puede definir como \def\cpR#1{#1}
en TeX puro (sin hipervínculos).
La \citedpages
macro 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 \cplist
macro 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, \backrefalt
esta 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 \cpR
de la siguiente manera:
\def\cpR#1{\backrefxxx{#1}{}{}}% hyperref backref page links.