0

I am using annotated BibLaTeX author lists (author+an), as discussed in a prior question and as recently-integrated into BibLaTeX sub-commands (e.g., \mkbibcompletename).

I want to automatically produce an amended author list, which includes daggers for co-first authors, and asterisks for co-corresponding authors.

For example, the below BibLaTeX entry, should produce the below annotated author list in its full reference, with superscript dagger/asterisk symbols (formatting not shown), as a part of its full citation. Existing annotations, such as the presently-included asterisks after the first two listed authors, should also be removed and ignored.

@Article{         scott:beyond,
  author        = {Mastromatteo, Scott * and Viner, Coby * and Denisko, Danielle and
                   Negrea, Jeffrey and Tang, Yanbo and Zhang, Lin and Hoffman,
                   Michael M. and Sun, Lei},
  author+an     = {1=jointfirst; 2=jointfirst;
                   2=jointcorresponding; 7=jointcorresponding; 8=jointcorresponding},
  title         = {Beyond statistical significance: ranking transcription
                   factor binding motifs by effect size},
  year          = {2023},
  month         = {4},
%  doi      = {10.1101/XXXXXX},
%  journal  = {{bioRxiv}},
%  pages    = {0XXXXX},
  pubstate      = {\bibstring{inpreparation}},
  note          = {Manuscript draft available upon request.},
  addendum      = {doctoral work}
}

Mastromatteo, S†, Viner, C†*, Denisko, D, Negrea, J, Tang, Y, Zhang, L, Hoffman, MM*, Sun, L*, 2023. Beyond statistical significance: ranking transcription factor binding motifs by effect size. Manuscript draft available upon request. In preparation.


I do not currently have an attempt at doing this, as the present parsing and ability to make use of these author annotations, in BibLaTeX macros, is not clear to me. I would quite appreciate answers including some explanation or references on this topic.

At present, I perform other processing of references, as shown below, into which these requested modifications would ideally integrate:

% some adaptations from: http://www.khirevich.com/latex/biblatex/

\DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ % journal names to shorter names, if existing \step[fieldsource=shortjournal] % e.g. Proc. Natl. Acad. Sci. U.S.A. %\step[fieldsource=shortestjournal] % e.g. PNAS; use to also map to shortest names, if existing \step[fieldset=journaltitle, origfieldval] } % \map{ % book/conference names to short names \step[fieldsource=shortbook] \step[fieldset=booktitle, origfieldval] } \map{ % suppress the following fields \step[fieldset=month, null] \step[fieldset=eventdate, null] \step[fieldset=publisher, null] \step[fieldset=editor, null] % N.B. no editor for now... % % do not clear, if submitted % From: https://tex.stackexchange.com/a/453744/134641 % N.B. The below must be at the end of this map statement, as the below % use of "final" will terminate this map, if notmatch is SAT. % % XXX N.B. Now keeping all pubstates, as demarcating pre-published from in-prep. % %\step[fieldsource=pubstate, notmatch={[sS]ubmitted}, final] %\step[fieldset=pubstate, null] } \map{ % suppress the following field(s), except for presentations \pernottype{inproceedings} \expandafter\step[fieldset=addendum, null] % suppress NSERC education segment designations } \map{ % NSERC doesn't want numbers, but we still include it for patents \pernottype{patent} \step[fieldset=number, null] } \map{ \pertype{patent} % % clear patent scope, obviating output of redundant info. for US patents \step[fieldset=location, null] % % we include the USPTO kind codes, but do not use them \step[fieldset=kind, null] % % we use the field "appnumber" to store the USPTO application number % we simply map it to be appended to the "type" field, in the standard data model % ------------------------------------------------------------ % "terrible hack"; used for now, in favour of custom DBX definition % From: https://tex.stackexchange.com/a/454143/134641 % \step[fieldsource=appnumber, final] % % also save this in userf, to permit external use \step[fieldset=userf, origfieldval] % \step[fieldsource=type, match=\regexp{\A(.*)\Z}, replace=\regexp{\ifbibstring{$1}{\bibstring{$1}}{$1}\x{20}}] \step[fieldsource=appnumber] \step[fieldset=type, origfieldval, append] % ------------------------------------------------------------ } % map citation count fields to user-defined fields, to permit usage \map{ \step[fieldsource=citecount] \step[fieldset=usera, origfieldval] } \map{ \step[fieldsource=citecountNS] \step[fieldset=userb, origfieldval] } } }

% TODO the below fails, but something like this would be nice %\DeclareDataInheritance{patent}{patent}{ % % map the parent's appnumber (in userf) to the child's usere % \inherit[override]{userf}{usere} %}

% ------------------------------------------------------------ % Patch the BibLaTeX output for @Patent entries: % add punctuation, after the "type" field. % \xpatchbibdriver{patent}% {\printfield{type}\setunit{\addspace}}% {\printfield{type}\setunit{\addsemicolon\space}}{}{} % ------------------------------------------------------------

% custom citation command to output paper citation information \DeclareCiteCommand{\citationscite}{}{Cited $\thefield{usera}$ times ($\thefield{userb}$, strictly non-self; per \href{https://scholar.google.ca/citations?user=RUrFz2oAAAAJ}{Google Scholar}).}{}{}

\DefineBibliographyStrings{english}{% patrequs = {US patent application} % "application", not "request"; no dots in "US" }

% italisize the book's title for @inproceedings entries \DeclareFieldFormat[inproceedings]{booktitle}{\mkbibemph{#1}} % remove volume indication (i.e. vol.) before volume numbers for @inproceedings entries \DeclareFieldFormat[inproceedings]{volume}{\textbf{#1}} %------------------------------------------------ % Apply page range compression % From: http://tex.stackexchange.com/a/25374

\DeclareFieldFormat{postnote}{\mkcomprange[{\mkpageprefix[pagination]}]{#1}} \DeclareFieldFormat{pages}{\mkcomprange{#1}}

% Compress ranges where lower limit > 100 \setcounter{mincomprange}{100}

% Don't compress beyond the fourth digit \setcounter{maxcomprange}{1000}

% Display compressed upper limit with at least two digits, % unless leading digit is zero \setcounter{mincompwidth}{10} %--------------------------------------


No Minimal Working Example (MWE) is provided at this time. I am seeking a general solution to this issue. Should no solution be provided after some time, I will try to compose a proper MWE. Apologies for any inconvenience and thanks in advance for your kind assistance!

Coby Viner
  • 1,939

1 Answers1

1

For the first part of the answer I will assume that the author field does not contain any additional markup like *.

Note that if you want to pass multiple annotations to one list item, you have to use

<item no>=<annotation_1>, <annotation_2>, ..., <annotation_n>;

and not <item no>=<annotation_1>; <item_no>=<annotation_2>; ...; <item no>=<annotation_n>;. In the latter form only the last annotation survives. (An example of this and the format syntax can be found in §3.7 Data Annotations of the biblatex manual, specifically p. 85.)

Then you can use code similar to the one suggested in your links.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear, maxbibnames=999]{biblatex}

\DeclareNameWrapperFormat{sortname}{% \renewcommand{\mkbibcompletename}[1]{% ##1% \ifitemannotation{jointfirst}{\dag}{}% \ifitemannotation{jointcorresponding}{}{}}% #1}

\begin{filecontents}{\jobname.bib} @article{scott:beyond, author = {Mastromatteo, Scott and Viner, Coby and Denisko, Danielle and Negrea, Jeffrey and Tang, Yanbo and Zhang, Lin and Hoffman, Michael M. and Sun, Lei}, author+an = {1=jointfirst; 2=jointfirst, jointcorresponding; 7=jointcorresponding; 8=jointcorresponding}, title = {Beyond statistical significance: ranking transcription factor binding motifs by effect size}, year = {2023}, month = {4}, pubstate = {\bibstring{inpreparation}}, note = {Manuscript draft available upon request.}, addendum = {doctoral work}, } \end{filecontents} \addbibresource{\jobname.bib} \addbibresource{biblatex-examples.bib}

\begin{document} Lorem \autocite{sigfridsson,scott:beyond}

\printbibliography \end{document}

Mastromatteo, Scott†, Coby Viner†, Danielle Denisko, Jeffrey Negrea, Yanbo Tang, Lin Zhang, Michael M. Hoffman and Lei Sun*


If we have to clean the author field of unwanted markup first, I suggest a sourcemap. There is always a risk that you have bona fide uses of * in names in your .bib files that this sourcemap would clear out, that's why I prefer to keep the data clean in the first place (plus the sourcemap has a small impact on performance), but if you insist, this is probably the quickest solution.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear, maxbibnames=999]{biblatex}

\DeclareSourcemap{ \maps[datatype=bibtex]{ \map[foreach=setnames]{ \step[fieldsource=\regexp{$MAPLOOP}, match=\regexp{\s+*}, replace={}] } } }

\DeclareNameWrapperFormat{sortname}{% \renewcommand{\mkbibcompletename}[1]{% ##1% \ifitemannotation{jointfirst}{\dag}{}% \ifitemannotation{jointcorresponding}{}{}}% #1}

\begin{filecontents}{\jobname.bib} @article{scott:beyond, author = {Mastromatteo, Scott * and Viner, Coby * and Denisko, Danielle and Negrea, Jeffrey and Tang, Yanbo and Zhang, Lin and Hoffman, Michael M. and Sun, Lei}, author+an = {1=jointfirst; 2=jointfirst, jointcorresponding; 7=jointcorresponding; 8=jointcorresponding}, title = {Beyond statistical significance: ranking transcription factor binding motifs by effect size}, year = {2023}, month = {4}, pubstate = {\bibstring{inpreparation}}, note = {Manuscript draft available upon request.}, addendum = {doctoral work}, } \end{filecontents} \addbibresource{\jobname.bib} \addbibresource{biblatex-examples.bib}

\begin{document} Lorem \autocite{sigfridsson,scott:beyond}

\printbibliography \end{document}

moewe
  • 175,683