我曾经etoolbox
在每个非星号章节中重置页码计数器,并且我已将其改为\thepage
同时打印章节号和页码:
\pretocmd{\@chapter}{\setcounter{page}{1}}{}{}
\renewcommand*{\thepage}{\thechapter-\arabic{page}}
除此之外,我还用它biblatex
来打印部分(如果需要,可以在一章中打印)和全局书目(作为chapter*
末尾的)。当在一章的几页和不同的章节中引用参考文献时,backref
由于所选的页码格式(请参阅 MWE),该选项打印的结果相当丑陋。我想:
当使用该选项打印时,将
biblatex
页面分组为 backrefs 中的章节。[heading=bibliography]
当使用选项打印时,只显示
biblatex
backref 中的列表页面(不包含章节号) 。[heading=subbibliography]
在 MWE 中,[ODO95]
我们显示以下反向引用:
在
page I
:[cit. on chapters 1 (pp. 1, 3), 2 (p. 1)]
在
page 1-3
:[cit. on pp. 1, 3]
;在
page 2-1
:[cit. on p. 1]
。
当引用任何章节时,全局参考书目中的反向引用也应显示页面。假设我们取消注释\begin{document}
MWE 中的后面三行,则反向引用page I
将是[cit. on chapters 1 (pp. 1, 3), 2 (p. 1); and page i]
。
梅威瑟:
\documentclass[a4paper,titlepage,10pt,twoside,openright]{report}
\usepackage[backend=biber,style=ieee-alphabetic,natbib=true,backref=true]{biblatex}
\addbibresource{IEEEfull.bib}
\addbibresource{IEEEexample.bib}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\@chapter}{\setcounter{page}{1}}{}{}
\makeatother
\begin{document}
%\renewcommand*{\thepage}{\roman{page}}
%\cite{IEEEexample:articledualmonths}
%\clearpage
\renewcommand*{\thepage}{\thechapter-\arabic{page}}
\chapter{Introduction}
\begin{refsegment}
\cite{IEEEexample:articledualmonths} \lipsum[1-10] \cite{IEEEexample:articledualmonths}
\printbibliography[segment=\therefsegment,heading=subbibliography]
\end{refsegment}
\chapter{Second chapter}
\begin{refsegment}
\cite{IEEEexample:articledualmonths}
\cite{IEEEexample:IEEEwebsite}
\nocite{IEEEexample:book_typical,IEEEexample:article_typical}
\printbibliography[segment=\therefsegment,heading=subbibliography]
\end{refsegment}
\cleardoublepage
\setcounter{page}{1}
\renewcommand*{\thepage}{\Roman{page}}
\printbibliography[heading=bibliography]
\end{document}
我读过一些关于使用biblatex
[格式化反向引用的问题A,b],但它们的目标不是改变列表的“内容”,而只是改变格式。不过,我参考了其中一个答案来实现这种格式:
\newbibmacro*{pageref}{\iflistundef{pageref}{}
{\finentrypunct\addspace\renewcommand\finentrypunct{}%
\printtext[parens]{%
\ifnumgreater{\value{pageref}}{1}%
{\bibstring{backrefpages}\ppspace}%
{\bibstring{backrefpage}\ppspace}%
\printlist[pageref][-\value{listtotal}]{pageref}}}}
我认为内容是用 显示的。我在 的文档中\printlist[pageref][-\value{listtotal}]{pageref}
读到了关于它的内容。我觉得我应该声明一种新的列表格式,但我不知道该怎么做,也不知道如何将内容输入其中或从中读取内容。\DeclareListFormat
biblatex
pageref
我问了另一个问题知道如何在[heading=subbibliography]
使用时仅显示段内的反向引用,而不是显示整个文档中的出现情况。
然而,如果\DeclareListFormat
必须描述新的内容,则两个答案可能会合并。
答案1
这很可能不是最好的形式,但这在问题所建议的形式下是可行的。 bibentries 是泛型。
代码是注释。请阅读。
梅威瑟:
\documentclass[a4paper,titlepage,10pt,twoside,openright]{report}
\begin{filecontents}{IEEEexample.bib}
@inBook{Wolff1962,
Title = {Philosophia prima sive Ontologia},
Author = {Wolff, Christian von},
Editor = {Jean Ecole},
Publisher = {Olms},
Address = {Hildesheim},
Year = {1962},
Part = {Abt. 2: Lateinische Schriften},
Maintitle = {Gesammelte Werke},
Volume = {3},
langid = {german}
}
@inBook{other1999,
Title = {The title in english},
Author = {Last, Name},
Editor = {Editor Name},
Publisher = {Springer},
Address = {New York},
Year = {1999},
Part = {1},
Maintitle = {The Maintitle},
Volume = {3},
}
@techreport{Natarajan2011,
author = {Natarajan, Nagarajan and Singh-Blom, Ulf Martin and Tewari, Ambuj and Woods, John O and Dhillon, Inderjit S and Marcotte, Edward M},
file = {:Users/jwoods/Downloads/Papers/Natarajan2011.pdf:pdf},
journal = {UTCS Technical Report},
title = {{Predicting gene\textendash disease associations using multiple species data.}},
volume = {TR-11-37},
year = {2011},
type = {techreport},
keywords = {Technical Report}}
@phdthesis{thesis000,
author = {Author Name},
title = {Title of the thesis},
type= {phdthesis},
year = {2011}}
\end{filecontents}
\usepackage[backend=biber,style=ieee-alphabetic,natbib=true,backref=true]{biblatex}
\addbibresource{IEEEexample.bib}
\usepackage{lipsum}
\makeatletter
\pretocmd{\@chapter}{\setcounter{page}{1}}{}{}
\makeatother
\DeclareListParser*{\forpageref}{-} %A parser for the newpage X-x X:chapter and x:the real page
\newcounter{cbcrfpg}% Counter for how many times is cited by chapter
\providetoggle{chorpg}% True: Chapter part (X). False: Page part (x) (chapter or page)
\providetoggle{ifbrefcchap}% if backref is into currentchapter
\togglefalse{ifbrefcchap}%
\newcounter{lastchap}% It is used in the whole bibliograpy. save the last chapter.
\setcounter{lastchap}{0}
\newcommand{\onlycurrentchapter}[1]{%
\iftoggle{chorpg}% %If is chapter part. (X)
{\ifnumequal{#1}{\value{chapter}} % if chapter part is equal to current chapter.
{\toggletrue{ifbrefcchap}% % True the backref into currentpage
\togglefalse{chorpg}}% % The next part will be page part (x)
{\togglefalse{ifbrefcchap}}% % else: False the backref into currentpage
}
{\iftoggle{ifbrefcchap} %If is page part and backref into currentpage
{\stepcounter{cbcrfpg}% % +1 counter of how many times is cited by chapter
\listgadd{\mylistofpages}{#1}}% % Add the page into a internal list.
{}}}
\DeclareListFormat{selectitemsforprint}{% A format for manage every element of backref list.
\toggletrue{chorpg}% This is used for select only the elements into current
\forpageref{\onlycurrentchapter}{#1}} % chapter.
\DeclareListFormat{printallitems}{% A format for manage every element of backref list.
\toggletrue{chorpg}% % This is used to classify the backref by chapters and print the
\forpageref{\printallitems}{#1}%% of the n-1 of total chapters (n).
}
\newcommand{\printallitems}[1]{%
\iftoggle{chorpg}% %If chapter part (X)
{\ifnumequal{\value{lastchap}}{#1}% %If the last chapter is equal to current chapter **
{}% %nothing
{\ifnumequal{\value{cbcrfpg}}{0} %if the last chapter is different to current chapter and
{} % if counter is zero: Nothing
{\printtext{\addspace\thelastchap\addspace}% % if different to zero: Prints!! 1. The chapter numbers
\usebibmacro{printitems}{parens}{pages}{page}% % And the items: it means page of the backref.
\setcounter{cbcrfpg}{0}\undef{\mylistofpages}}% % And restart the list of pages and counter
}%seimprimen
\setcounter{lastchap}{#1}% %Save the last chapter**
}
{\stepcounter{cbcrfpg}\listgadd{\mylistofpages}{#1}}% %If is page part: +1 counter and add to list of pages.
\togglefalse{chorpg}}%
%**(into backref list: exaple [1-1, 1-2] equals chapters)
\renewbibmacro*{pageref}{\iflistundef{pageref}{} %The new pageref bibmacro
{\setcounter{cbcrfpg}{0}\undef{\mylistofpages}\setcounter{lastchap}{0} % start list of pages, cunters and last chapter
\printunit{\adddot\space} % Print a dot
\ifnumequal{\value{refsegment}}{0} % If refsegment is zero, this means global bibliography
{\printtext[brackets]{\printtext{cite on \chaptername}% % Print the part: cite on chapter
\printlist[printallitems][-\value{listtotal}]{pageref}% % Find and Print the backref of all n-1 chapters
\printtext{\addspace\thelastchap\addspace}% % Print the backref of only n chapter***
\usebibmacro{printitems}{parens}{pages}{page}% %*** (not print fortwo below line)
}}
{\printlist[selectitemsforprint]{pageref} % If refsegment different to zero, is a internal bibliography
\usebibmacro{printitems}{brackets}{backrefpages}{backrefpage}}%
}}
\newbibmacro*{printitems}[3]{%
\printtext[#1]{% % Print into brackets
\ifnumgreater{\value{cbcrfpg}}{1}% % If counter greater to 1
{\bibstring{#2}} %Print cite #2 bibstring
{\bibstring{#3}} % else: %Print cite #2 bibstring
\forlistloop{\printtext\newunit}{\mylistofpages}}} %Print the listofpages items.using \printtext{\newunit\thepagepart}
\begin{document}
\renewcommand*{\thepage}{\thechapter-\arabic{page}}
\chapter{Introduction}
\begin{refsegment}
\cite{Wolff1962} \lipsum[1-10]
\cite{Wolff1962}
\printbibliography[segment=\therefsegment,heading=subbibliography]
\end{refsegment}
\chapter{Second chapter}
\begin{refsegment}
\cite{Wolff1962}
\cite{other1999}
\nocite{Natarajan2011,thesis000}
\printbibliography[segment=\therefsegment,heading=subbibliography]
\end{refsegment}
\cleardoublepage
\setcounter{page}{1}
\renewcommand*{\thepage}{\Roman{page}}
\printbibliography[heading=bibliography]
\end{document}
图片
page 1-3
。
page 2-1
。
page I
。