我正在撰写的期刊不允许在文本中引用页码。
我想输入 \cite[p. 123]{abc2001}
现在它显示的内容类似于
[第 123 页,第 1 页]
我希望它显示为数字方括号引用,例如,
[1]
但参考书目中包含页码,例如
Doe, J. The Journal of Examples,《关于 abc 123 的研究》,2001 年,第 123 页
可以用 natbib 或其他包来完成这个吗?
答案1
像这样的风格存在一些概念问题。
如果您使用多个不同的后记多次引用同一来源,该怎么办?这将如何在参考书目中显示?读者如何知道哪个后记属于哪个引用?
如果多次引用同一来源,读者可以直接在引用中引用页码,这样会方便很多。我只需要查找一次“[1]”是哪部作品,然后就可以轻松理解“[1, p. 234]”和“[1, p. 235]”。但如果所有引用都是“[1]”,每次都需要查看参考书目以找到更具体的位置,那我就是在浪费时间。
biblatex
以下是基于以下想法的概念证明:自定义类似 Wikipedia 的 backref来表明这是可行的。我使用指向特定事件的链接“解决”了上述问题。这种方法在屏幕上适用于 PDF,但在打印时当然会严重失效。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{hyperref}
\usepackage[style=numeric, backend=biber]{biblatex}
\renewbibmacro{postnote}{}
\makeatletter
\DeclareFieldFormat{bibhypertarget}{%
\bibhypertarget{cbx:instcount:\the\value{instcount}}{#1}}
\def\abx@aux@pnbackref#1#2#3#4{%
\listcsgadd{cbx@pnbackref@#1@#2}{#3}%
\csgdef{cbx@pnbackref@postnote@#1@#2@#3}{#4}}
\def\blx@addpnbackref#1#2{%
\if@filesw
\protected@write\@mainaux{}{%
\string\abx@aux@pnbackref
{\the\c@refsection}{#1}{\the\value{instcount}}
{\detokenize{#2}}}%
\fi}
\def\blx@addpnbackref@helper#1{\blx@addpnbackref{\thefield{entrykey}}{#1}}
\def\blx@instcount@label{%
\label{cbx@instcount@\the\value{instcount}}}
\AtEveryCitekey{%
\iffieldundef{postnote}
{}
{\expandafter\blx@addpnbackref@helper\expandafter{\abx@field@postnote}}%
\blx@instcount@label
}
\newcommand*{\pnbackref@prnt@pn}[2]{%
\DeclareFieldFormat{bibhypertarget}{\bibhyperlink{cbx:instcount:#2}{##1}}%
\printtext[bibhypertarget]{%
$\uparrow$\printtext[postnote]{#1}}}
\newbibmacro*{pnbackref:item}[1]{%
\ifcsvoid{cbx@pnbackref@postnote@\the\c@refsection @\thefield{entrykey}@#1}
{}
{\letcs\cbx@tempa{cbx@pnbackref@postnote@\the\c@refsection @\thefield{entrykey}@#1}%
\expandafter\pnbackref@prnt@pn\expandafter{\cbx@tempa}{#1}%
\setunit{\addcomma\space}}}
\newbibmacro*{pnbackref}{%
\ifcsundef{cbx@pnbackref@\the\c@refsection @\thefield{entrykey}}
{}
{\forlistcsloop{\usebibmacro{pnbackref:item}}
{cbx@pnbackref@\the\c@refsection @\thefield{entrykey}}}}
\renewbibmacro*{pageref}{\usebibmacro{pnbackref}}
\makeatother
\renewcommand*{\bibpagerefpunct}{\addperiod\space}
\renewbibmacro*{cite}{%
\printtext[bibhypertarget]{%
\printtext[bibhyperref]{%
\printfield{labelprefix}%
\printfield{labelnumber}%
\ifbool{bbx:subentry}
{\printfield{entrysetcount}}
{}}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem~\autocite[380]{sigfridsson}
ipsum~\autocite[12-14]{worman}
dolor~\autocite{nussbaum}
sit~\autocite[381]{sigfridsson}
amet~\autocite[382]{sigfridsson}.
\clearpage
Lorem~\autocite[27-30]{geer}
ipsum~\autocite[\textbf{ä}]{worman}
dolor~\autocite[34]{pines}
sit~\autocite[382]{sigfridsson}
amet~\autocite[383]{sigfridsson}.
Dolor~\autocite[380-381]{worman}
\printbibliography
\end{document}