1

My initial problem is that I have a book that contains various reprints of previously published articles.

When citing such an article the reference should like

Information of the article. Reprinted in: Information of the book, pp. X-XX

where X-XX corresponds to the range of pages in the book where the article is printed. Most of this can be done by the related options of biblatex. To be more precise, my entries look like

@article{Author.1980,
 author = {Author, A},
 year = {1980/2001},
 title = {{Title article}},
 pages = {15--29},
 volume = {1},
 number = {1},
 journal = {{Journal Title}},
 related = {Author.2001},
 relatedstring = {Reprinted in:},
}


@book{Author.2001,
 year = {2001},
 title = {{Book Title}},
 address = {Book address},
 publisher = {{Book publisher}},
}

The problem arises with the pages numbers of the book. I can specify pages={X-XX} in the book but this will work if I just have one article.

So my idea was to specify the page numbers of the book in the note field of the article, i.e., note={pp. X-XX} and then to use \DeclareSourcemap to map these values to the addendum to the book. I think this should do the trick but unfortunately, I am not able to do this, as I did not work with \DeclareSourcemap before.

I hope anyone can help me with this issue... Thanks in advance

Edit: Here is an MWE to illustrate what I wanted to have:

\documentclass[12pt]{article}

\usepackage{filecontents}
\usepackage[backend=biber,alldates=long,dateabbrev=false,style=authoryear,sorting=nty,isbn=false,doi=false,
dashed=false,maxcitenames=2,maxbibnames=99,
bibencoding=utf8]{biblatex}

\begin{filecontents}{biblio.bib}

@article{Author.1980,
 author = {Author, A},
 year = {1980/2001},
 title = {{Title article A}},
 pages = {10--20},
 volume = {1},
 number = {1},
 journal = {{Journal Title A}},
 related = {Author.2001},
 relatedstring = {Reprinted in:},
}

@article{Author.1981,
 author = {Author, A},
 year = {1981/2001},
 title = {{Title article B}},
 pages = {40--50},
 volume = {1},
 number = {1},
 journal = {{Journal Title B}},
 related = {Author.2001},
 relatedstring = {Reprinted in:},
 }

@book{Author.2001,
 year = {2001},
 title = {{Book Title}},
 address = {Book address},
 publisher = {{Book publisher}},
}


\end{filecontents}

\addbibresource{biblio.bib}

\begin{document}

I have two articles that are reprinted in a book. I would like to add the pages of the reprints after the reference, i.e., 
if article A corresponds to pages 100-110 and article B corresponds to pages 200-210 in the reprint, these page numbers should be appended to the entry in the reference list.\vspace{1cm}

Test citation \textcite{Author.1980} and \textcite{Author.1981}.

\printbibliography

\end{document}
2
  • you should make a complete example. That makes it much easier to test your issue and possible solutions. Oct 6, 2021 at 12:04
  • I have added an MWE. I have no idea where to write the page numbers of the reprinted articles. I cannot do this in the book entry as there is more than one article. But how can one specify the page numbers of the reprints in the articles? I suggested to store them in the note field and then to append them to the book with an appropriate \DeclareSourcemap. But I have no idea if this is possible...
    – Frank
    Oct 6, 2021 at 13:00

1 Answer 1

1

I guess one way of doing this is to create a new entry option and make use of it in a custom related type.

This code makes a new entry option called reprintpages you can use in your article entries. The value of this is saved in \frank@abx@field@reprintpages, which is then restored to the pages field inside the related:reprintedin (based on related:default) macro. This macro is used when you specify relatedtype = {reprintedin}.

\documentclass{article}

\begin{filecontents}[overwrite]{\jobname.bib}
@article{Author.1980,
  author = {Author, A},
  year = {1980/2001},
  title = {Title article A},
  pages = {10--20},
  volume = {1},
  number = {1},
  journal = {Journal Title A},
  related = {Author.2001},
  relatedtype = {reprintedin},
  relatedstring = {Reprinted in:},
  options = {reprintpages=100--110}
}
@article{Author.1981,
  author = {Author, A},
  year = {1981/2001},
  title = {Title article B},
  pages = {40--50},
  volume = {1},
  number = {1},
  journal = {Journal Title B},
  related = {Author.2001},
  relatedtype = {reprintedin},
  relatedstring = {Reprinted in:},
  options = {reprintpages=200--210},
}
@book{Author.2001,
  year = {2001},
  title = {Book Title},
  address = {Book address},
  publisher = {Book publisher}
}
\end{filecontents}

\usepackage[alldates=long, dateabbrev=false, style=authoryear, sorting=nty,
  isbn=false, doi=false, dashed=false, maxcitenames=2,
  maxbibnames=99]{biblatex}
\addbibresource{\jobname.bib}

\makeatletter
\DeclareEntryOption[string]{reprintpages}{%
  \def\frank@abx@field@reprintpages{#1}}

\newbibmacro*{related:reprintedin}[1]{%
  \entrydata*{#1}{%
    \usedriver
      {\restorefield{pages}{\frank@abx@field@reprintpages}%
       \ifnameundef{savedauthor}
         {\ifnameundef{savededitor}
            {}
            {\ifnamesequal{editor}{savededitor}
               {\clearname{editor}}
               {}}}
         {\ifnamesequal{author}{savedauthor}
            {\clearname{author}}
            {}}%
       \renewbibmacro*{related:init}{}%
       \DeclareNameAlias{sortname}{default}%
       \ifbibmacroundef{date+extradate}
         {}
         {\renewbibmacro*{date+extradate}{}%
          \renewbibmacro*{bbx:ifmergeddate}{\@secondoftwo}}%
       \renewbibmacro*{pageref}{}}
      {\thefield{entrytype}}}}
\makeatother


\begin{document}

I have two articles that are reprinted in a book. I would like to add the
pages of the reprints after the reference, i.e., if article A corresponds to
pages 100-110 and article B corresponds to pages 200-210 in the reprint, these
page numbers should be appended to the entry in the reference
list.

\vspace{1cm}

Test citation \textcite{Author.1980} and \textcite{Author.1981}.

\printbibliography

\end{document}

output

1
  • Thanks a lot. It works perfectly!
    – Frank
    Oct 6, 2021 at 16:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .