
以下の引用スタイルを検討してください。
上記の代わりに、「1、および 3 ~ 8」と表示したいのですが。何か提案はありますか? 3 と 8 をそれぞれページ 3 と 8 にリンクさせたいと思います。実際、ページ 4 ~ 7 への直接リンクはなくなりました。
追加:私は以下を使用しています:
\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
}
追加(最小限の例): https://www.dropbox.com/sh/nvg52ixdt0h7bkb/AACMv8tsM1C0xGdRspJ300zga?dl=0
答え1
LaTeX の例が提供されておらず、私もそのような例を用意したくないので、プレーン TeX レベルでそれを実行する方法を示します。ハイパーリンクは、\hyperlinks
それが可能であることを示すために OpTeX を使用して実装されています。この例は、 で処理できますoptex testfile
。マクロを再定義して、\cpR
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
最初の 3 行は OpTeX 固有であり、次の行は純粋な Plain TeX ですが、マクロは純粋な Plain TeX (ハイパーリンクなし)\cpR
と同様に定義できます。\def\cpR#1{#1}
マクロ\citedpages
は2つのステップで動作します。最初のステップでは、
{1,3,4,5,6,7,8,20,21,22,25,27,30}
(この例では)\cplist
次の内容のマクロを作成します。
--1, 1-1, 3-8, 20-22, 25-25, 27-27, 30-30
2 番目のステップは行によって実行されます\expandafter\cpC\cplist, 0-0,
。これにより、望ましい結果が生成されます。
\cpR{1}, \cpR{3}--\cpR{8}, \cpR{20}--\cpR{22}, \cpR{25}, \cpR{27}, and \cpr{30}
編集:このマクロを natbib とともに使用し、再定義する場合、\backrefalt
この再定義は次のようになります。
\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}
しかし、このソリューションではハイパーリンクのないページのリストが追加されます。ハイパーリンクを追加する場合は、\cpR
次のように定義します。
\def\cpR#1{\backrefxxx{#1}{}{}}% hyperref backref page links.