Pergunta de referência anterior: 3-8 em vez de 3,4,5,6,7,8

Pergunta de referência anterior: 3-8 em vez de 3,4,5,6,7,8

Considere o seguinte estilo de citação abaixo:

insira a descrição da imagem aqui

Eu gostaria que fosse exibido como ''1 e 3-8'' em vez do acima. Alguma sugestão? Quero que 3 e 8 estejam vinculados às páginas 3 e 8, respectivamente. Na verdade, não existe mais um link direto para as páginas 4-7.

Adição:Estou usando o seguinte:

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

Adição (um exemplo mínimo): https://www.dropbox.com/sh/nvg52ixdt0h7bkb/AACMv8tsM1C0xGdRspJ300zga?dl=0

Responder1

Como você não forneceu um exemplo de LaTeX e não quero prepará-lo, mostro como fazê-lo no nível TeX simples. Os hiperlinks são implementados utilizando OpTeX's \hyperlinkspara mostrar que isso é possível. Você pode processar este exemplo por optex testfile. Você pode redefinir a macro \cpRpara criar hiperlinks usando o 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

As três primeiras linhas são específicas do OpTeX, as próximas linhas são Plain TeX puro, com exceção da macro \cpRque pode ser definida como \def\cpR#1{#1}em TeX simples puro (sem hiperlinks).

A \citedpagesmacro funciona em duas etapas. Na primeira etapa ele lê

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

(no nosso exemplo) e cria a \cplistmacro com o conteúdo:

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

O segundo passo é feito pela linha \expandafter\cpC\cplist, 0-0,. Ele cria o resultado desejado:

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

Editar:Se você quiser usar esta macro com natbib e com redefinição de \backrefaltentão esta redefinição pode ser semelhante a:

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

Mas esta solução adiciona a lista de páginas sem hiperlinks. Se você deseja adicionar hiperlinks, defina \cpRo seguinte:

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

informação relacionada