![Agrupando páginas em capítulos ao usar biblatex e backref=true](https://rvso.com/image/298812/Agrupando%20p%C3%A1ginas%20em%20cap%C3%ADtulos%20ao%20usar%20biblatex%20e%20backref%3Dtrue.png)
Eu costumava etoolbox
redefinir o contador de páginas em cada capítulo sem estrela e mudei \thepage
para imprimir o número do capítulo e o número da página:
\pretocmd{\@chapter}{\setcounter{page}{1}}{}{}
\renewcommand*{\thepage}{\thechapter-\arabic{page}}
Além disso estou utilizando biblatex
para imprimir bibliografias parciais (em um capítulo, se quiser) e globais (como um chapter*
no final). Quando uma referência é citada em várias páginas de um capítulo e em capítulos diferentes a backref
opção imprime um resultado bastante feio, devido ao formato de numeração de página escolhido (ver MWE). Eu gostaria de:
Faça
biblatex
agrupar as páginas em capítulos nas backrefs quando a[heading=bibliography]
opção for usada para imprimi-las.Faça
biblatex
mostrar apenas as páginas da lista (sem o número do capítulo) no backref, quando então[heading=subbibliography]
for utilizada a opção de imprimi-la.
No MWE o backref de [ODO95]
mostramos os seguintes backrefs:
Em
page I
:[cit. on chapters 1 (pp. 1, 3), 2 (p. 1)]
Em
page 1-3
:[cit. on pp. 1, 3]
;Em
page 2-1
:[cit. on p. 1]
.
Quando for feita uma citação de qualquer capítulo, o backref na bibliografia global deverá mostrar também as páginas. Digamos que descomentemos as três linhas depois \begin{document}
no MWE, o backref page I
seria [cit. on chapters 1 (pp. 1, 3), 2 (p. 1); and page i]
.
MWE:
\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}
Eu li algumas perguntas sobre como formatar backrefs com biblatex
[a,b], mas não visam alterar o "conteúdo" da lista, apenas o formato. Porém, tomei uma dessas respostas como referência para atingir este formato:
\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}}}}
Acredito que o conteúdo é mostrado com \printlist[pageref][-\value{listtotal}]{pageref}
. Eu li sobre isso e sobre \DeclareListFormat
na documentação do biblatex
. Sinto que deveria declarar um novo formato de lista, mas não sei como fazê-lo, nem como o conteúdo é inserido pageref
ou lido a partir dele.
Eu perguntei a outroperguntasaber como mostrar apenas os backrefs dentro de um segmento quando [heading=subbibliography]
ele é utilizado, ao invés de mostrar as ocorrências em todo o documento.
\DeclareListFormat
No entanto, se for necessário descrever um novo , ambas as respostas poderão ser mescladas.
Responder1
É bem possível que não seja a melhor forma, mas funciona da forma que as perguntas sugerem. Os bibentários sãogenéricos.
O código são comentários. Leia, por favor.
MWE:
\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}
IMAGENS
page 1-3
.
page 2-1
.
page I
.