Edit Continuing updates for this methods are posted to https://tex.stackexchange.com/a/416416/35864.
The following solution automatically extracts the hashes for the given names. Everything else is based on the bit of the answer below.
Warning! The code will write a .bib
file called <your TeX file/\jobname>-boldnames.bib
, if it exists, it will be overwritten. You can change the name of that file by adjusting the value of \hlblx@bibfile@name
.
\documentclass{article}
\usepackage[backend=biber,style=numeric]{biblatex}
\makeatletter
\def\hlblx@bibfile@name{\jobname -boldnames.bib}
\newwrite\hlblx@bibfile
\immediate\openout\hlblx@bibfile=\hlblx@bibfile@name
\newcounter{hlblx@name}
\setcounter{hlblx@name}{0}
\newcommand*{\hlblx@writenametobib}[1]{%
\stepcounter{hlblx@name}%
\edef\hlblx@tmp@nocite{%
\noexpand\AfterPreamble{%
\noexpand\setbox0\noexpand\vbox{%
\noexpand\hlblx@getmethehash{hlblx@name@\the\value{hlblx@name}}}}%
}%
\hlblx@tmp@nocite
\immediate\write\hlblx@bibfile{%
@misc{hlblx@name@\the\value{hlblx@name}, author = {\unexpanded{#1}}, %
options = {dataonly=true},}%
}%
}
\AtEndDocument{%
\closeout\hlblx@bibfile}
\addbibresource{\hlblx@bibfile@name}
\newcommand*{\hlbxl@boldhashes}{}
\DeclareNameFormat{hlblx@hashextract}{%
\xifinlist{\thefield{hash}}{\hlbxl@boldhashes}
{}
{\listxadd{\hlbxl@boldhashes}{\thefield{fullhash}}}}
\DeclareCiteCommand{\hlblx@getmethehash}
{}
{\printnames[hlblx@hashextract][1-999]{author}}
{}
{}
\newcommand*{\addboldname}{\forcsvlist\hlblx@writenametobib}
\newcommand*{\resetboldnames}{\def\hlbxl@boldhashes{}}
\newcommand*{\mkboldifhashinlist}[1]{%
\xifinlist{\thefield{hash}}{\hlbxl@boldhashes}
{\mkbibbold{#1}}
{#1}}
\makeatother
\DeclareNameWrapperFormat{boldifhashinlist}{%
\renewcommand*{\mkbibcompletename}{\mkboldifhashinlist}%
#1}
\DeclareNameWrapperAlias{sortname}{default}
\DeclareNameWrapperAlias{default}{boldifhashinlist}
\addboldname{{Silva, Carlos F. M.}}
\begin{filecontents}{\jobname.bib}
@incollection{Silva:2014a,
title = {Radio Resource Management for Device-to-Device
Communications in Long Term Evolution Networks},
author = {Carlos F. M. Silva and Silva, Jr., Jos\'{e} Mairton B.
and Tarcisio F. Maciel},
booktitle = {Resource Allocation and {MIMO} for {4G} and Beyond},
publisher = {Springer Science+Business Media},
year = 2014,
address = {New York, USA},
editor = {Francisco Rodrigo Porto Cavalcanti},
pages = {105-156},
doi = {10.1007/978-1-4614-8057-0_3},
isbn = {978-1-4614-8056-3},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\fullcite{Silva:2014a}
\resetboldnames\addboldname{{Silva, Jr., Jos\'{e} Mairton B.}}\printbibliography
\end{document}
We can use Audrey's approach to Make specific author bold using biblatex, but instead of string comparison we use the name hash produced by Biber.
\newcommand*{\boldnames}{}
\newcommand*{\mkboldifhashinlist}[1]{%
\xifinlist{\thefield{hash}}{\boldnames}
{\mkbibbold{#1}}
{#1}}
\DeclareNameWrapperFormat{boldifhashinlist}{%
\renewcommand*{\mkbibcompletename}{\mkboldifhashinlist}%
#1}
\DeclareNameWrapperAlias{sortname}{default}
\DeclareNameWrapperAlias{default}{boldifhashinlist}
You can find out the hash
values for your name (and its versions) by looking at the .bbl
file produced by Biber, it will contain information for a cited entry like this
\entry{Silva:2014a}{incollection}{}
\name{author}{3}{}{%
{{hash=894de27062ab25d43f1d7b50fd923256}{%
family={Silva},
familyi={S\bibinitperiod},
given={Carlos\bibnamedelimb F.\bibnamedelimi M.},
giveni={C\bibinitperiod\bibinitdelim F\bibinitperiod\bibinitdelim M\bibinitperiod}}}%
{{hash=cc273ec4593222cb35c353d3f073214e}{%
family={Silva},
familyi={S\bibinitperiod},
given={José\bibnamedelimb Mairton\bibnamedelima B.},
giveni={J\bibinitperiod\bibinitdelim M\bibinitperiod\bibinitdelim B\bibinitperiod},
suffix={Jr.},
suffixi={J\bibinitperiod}}}%
{{hash=1f31fc59b1a438cdb6e7efa3f16611fe}{%
family={Maciel},
familyi={M\bibinitperiod},
given={Tarcisio\bibnamedelima F.},
giveni={T\bibinitperiod\bibinitdelim F\bibinitperiod}}}%
}
\name{editor}{1}{}{%
{{hash=3ac5e392f4edfbddb80549d1ccca0d11}{%
family={Cavalcanti},
familyi={C\bibinitperiod},
given={Francisco\bibnamedelimb Rodrigo\bibnamedelima Porto},
giveni={F\bibinitperiod\bibinitdelim R\bibinitperiod\bibinitdelim P\bibinitperiod}}}%
}
\list{location}{1}{%
{New York, USA}%
}
\list{publisher}{1}{%
{Springer Science+Business Media}%
}
\strng{namehash}{b4c654eecf5e554d731ed21594f20b31}
\strng{fullhash}{b4c654eecf5e554d731ed21594f20b31}
\strng{bibnamehash}{b4c654eecf5e554d731ed21594f20b31}
\strng{authorbibnamehash}{b4c654eecf5e554d731ed21594f20b31}
\strng{authornamehash}{b4c654eecf5e554d731ed21594f20b31}
\strng{authorfullhash}{b4c654eecf5e554d731ed21594f20b31}
\strng{editorbibnamehash}{3ac5e392f4edfbddb80549d1ccca0d11}
\strng{editornamehash}{3ac5e392f4edfbddb80549d1ccca0d11}
\strng{editorfullhash}{3ac5e392f4edfbddb80549d1ccca0d11}
\field{sortinit}{S}
\field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{booktitle}{Resource Allocation and {MIMO} for {4G} and Beyond}
\field{isbn}{978-1-4614-8056-3}
\field{title}{Radio Resource Management for Device-to-Device Communications in Long Term Evolution Networks}
\field{year}{2014}
\field{pages}{105\bibrangedash 156}
\range{pages}{52}
\verb{doi}
\verb 10.1007/978-1-4614-8057-0_3
\endverb
\endentry
The hash for the relevant name is shown right before the name, for C. F. M. Silva is 894de27062ab25d43f1d7b50fd923256
, for J. M. B Silva Jr. it is cc273ec4593222cb35c353d3f073214e
. (Note that the value of this hash may change between Biber version: Check that the names highlight correctly after an update.)
Since the hash
is different for different name inputs (the hash
for "Donald E. Knuth" will not equal the one for "D. E. Knuth" or "Donald Knuth")
you will have to find the correct hash for all the variants you use of your name.
With the help of
\newcommand*{\detokenizelistadd}[2]{%
\listeadd#1{\detokenize{#2}}}
you can then add a list of hashes to the \boldnames
macro
\forcsvlist{\detokenizelistadd\boldnames}
{{894de27062ab25d43f1d7b50fd923256}}
MWE
\documentclass{article}
\usepackage[backend=biber,style=numeric]{biblatex}
\newcommand*{\boldnames}{}
\newcommand*{\mkboldifhashinlist}[1]{%
\xifinlist{\thefield{hash}}{\boldnames}
{\mkbibbold{#1}}
{#1}}
\DeclareNameWrapperFormat{boldifhashinlist}{%
\renewcommand*{\mkbibcompletename}{\mkboldifhashinlist}%
#1}
\DeclareNameWrapperAlias{sortname}{default}
\DeclareNameWrapperAlias{default}{boldifhashinlist}
\newcommand*{\detokenizelistadd}[2]{%
\listeadd#1{\detokenize{#2}}}
\renewcommand*{\boldnames}{}
\forcsvlist{\detokenizelistadd\boldnames}
{{894de27062ab25d43f1d7b50fd923256}}
\begin{filecontents}{\jobname.bib}
@incollection{Silva:2014a,
title = {Radio Resource Management for Device-to-Device
Communications in Long Term Evolution Networks},
author = {Carlos F. M. Silva and Silva, Jr., Jos\'{e} Mairton B.
and Tarcisio F. Maciel},
booktitle = {Resource Allocation and {MIMO} for {4G} and Beyond},
publisher = {Springer Science+Business Media},
year = 2014,
address = {New York, USA},
editor = {Francisco Rodrigo Porto Cavalcanti},
pages = {105-156},
doi = {10.1007/978-1-4614-8057-0_3},
isbn = {978-1-4614-8056-3},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\fullcite{Silva:2014a}
\printbibliography
\end{document}
![Output](https://i.stack.imgur.com/Y5p22.png)
The answer has been updated to reflect the changes needed for biblatex
>= 3.3 (see biblatex
3.3 name formatting). All mentions of last
in name macros are now family
and first
becomes given
. Refer to the edit history for the pre-3.3 code.
edited to use a more elegant version to format complete names. \DeclareNameWrapperFormat
and \mkbibcompletename
are only available in biblatex
v3.12 (2018-10-30) and v3.13 (2019-08-17), respectively. Please refer to the edit history if you are using an older version of biblatex
.
The general idea is inspired by Audrey's answer to With biblatex, is it possible to replace one author of an author list by a bibnamedash or idem string?, but takes a very different approach in the end.
You can control the inserted dash with \bibnamedash
, the separator between two of those dashes is \multidashdelim
, the last is separated by \finaldashdelim
.
\makeatletter
\renewcommand*{\bibnamedash}{\textemdash\textemdash\textemdash}
\newcommand*{\multidashdelim}{\addspace}
\newcommand*{\finaldashdelim}{\finalnamedelim}
\newtoggle{bbx:goahead}
\InitializeBibliographyStyle{\global\csundef{bbx@lastname@1}}
\newbibmacro*{bbx:printlist}[1]{%
\toggletrue{bbx:goahead}%
\printnames[dashed:given-family]{#1}}
\newbibmacro*{dash:delim}{%
\ifnumgreater{\value{listcount}}{\value{liststart}}
{\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{liststop}}}
or
test \ifmorenames
}
{\multidashdelim}
{\finaldashdelim}}
{}}
\DeclareNameFormat{dashed:given-family}{%
\ifboolexpr{togl {bbx:goahead}
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
{\usebibmacro{dash:delim}\bibnamedash}
{\global\togglefalse{bbx:goahead}%
\ifgiveninits
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartsuffix}}
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiven}%
{\namepartprefix}%
{\namepartsuffix}}}%
\csxdef{bbx@lastname@\the\value{listcount}}{\thefield{hash}}}
\renewbibmacro*{author}{%
\ifboolexpr{ test {\ifuseauthor}
and not test {\ifnameundef{author}} }
{\usebibmacro{bbx:printlist}{author}%
\setunit{\addcomma\space}%
\usebibmacro{authorstrg}}
{\global\csundef{bbx@lastname@1}}}
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{ test {\ifuseeditor}
and not test {\ifnameundef{editor}} }
{\usebibmacro{bbx:printlist}{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}}
{\global\csundef{bbx@lastname@1}}}
\renewbibmacro*{bbx:translator}[1]{%
\ifboolexpr{ test {\ifusetranslator}
and not test {\ifnameundef{translator}} }
{\usebibmacro{bbx:printlist}{translator}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{translator}}
{\global\csundef{bbx@lastname@1}}}
\makeatother
If you want the dash to be able to jump over names, you can just change the line
\ifboolexpr{togl {bbx:goahead}
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
to
\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}
you can then also remove all mentions of bbx:goahead
.
MWE
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=authortitle,
maxbibnames=999,
backend=biber,
sorting=nyt,
abbreviate=false]{biblatex}
\makeatletter
\renewcommand*{\bibnamedash}{\textemdash\textemdash\textemdash}
\newcommand*{\multidashdelim}{\addspace}
\newcommand*{\finaldashdelim}{\finalnamedelim}
\newtoggle{bbx:goahead}
\InitializeBibliographyStyle{\global\csundef{bbx@lastname@1}}
\newbibmacro*{bbx:printlist}[1]{%
\toggletrue{bbx:goahead}%
\printnames[dashed:given-family]{#1}}
\newbibmacro*{dash:delim}{%
\ifnumgreater{\value{listcount}}{\value{liststart}}
{\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{liststop}}}
or
test \ifmorenames
}
{\multidashdelim}
{\finaldashdelim}}
{}}
\DeclareNameFormat{dashed:given-family}{%
\ifboolexpr{togl {bbx:goahead}
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
{\usebibmacro{dash:delim}\bibnamedash}
{\global\togglefalse{bbx:goahead}%
\ifgiveninits
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartsuffix}}
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiven}%
{\namepartprefix}%
{\namepartsuffix}}}%
\csxdef{bbx@lastname@\the\value{listcount}}{\thefield{hash}}}
\renewbibmacro*{author}{%
\ifboolexpr{ test {\ifuseauthor}
and not test {\ifnameundef{author}} }
{\usebibmacro{bbx:printlist}{author}%
\setunit{\addcomma\space}%
\usebibmacro{authorstrg}}
{\global\csundef{bbx@lastname@1}}}
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{ test {\ifuseeditor}
and not test {\ifnameundef{editor}} }
{\usebibmacro{bbx:printlist}{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}}
{\global\csundef{bbx@lastname@1}}}
\renewbibmacro*{bbx:translator}[1]{%
\ifboolexpr{ test {\ifusetranslator}
and not test {\ifnameundef{translator}} }
{\usebibmacro{bbx:printlist}{translator}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{translator}}
{\global\csundef{bbx@lastname@1}}}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{bookABC,
author = {Anne Uthor and Enid Blyton and William Riter},
title = {UBR},
date = {1990},}
@BOOK{bookADC,
author = {Anne Uthor and James Joyce and William Riter},
title = {UJR},
date = {1991},}
@BOOK{book1,
author = {Buchautor, Emma-Louise},
gender = {sf},
title = {First Title},
date = {2001}}
@BOOK{book2,
author = {Buchautor, Emma-Louise},
title = {Same female author},
date = {2002}}
@BOOK{book3,
author = {Buchautor, Emma-Louise and van Helsing, Sarah},
gender = {pf},
title = {Same first author whose gender is unspecified},
date = {2003}}
@BOOK{book4,
author = {Buchautor, Emma-Louise and van Helsing, Sarah and Knuth, Donald E.},
gender = {pp},
title = {Same first and second female authors},
date = {2004}}
@BOOK{book5,
editor = {Buchautor, Emma-Louise and van Helsing, Sarah and Knuth, Donald E. and Cicero, Marcus Tullius},
gender = {pp},
title = {Same leading names of mixed genders},
date = {2005}}
@BOOK{book6,
editor = {van Helsing, Abraham},
title = {Different name},
date = {2006}}
@BOOK{book7,
author = {van Helsing, Abraham},
gender = {sm},
translator = {van Helsing, Abraham},
title = {Same male name},
date = {2007}}
@BOOK{book8,
editor = {van Helsing, Abraham and Jackson, Tom},
gender = {pm},
translator = {Cicero, Marcus Tullius},
title = {Same first male author},
date = {2008}}
@BOOK{book9,
author = {van Helsing, Abraham and Jackson, Tom},
title = {Same male names},
date = {2009}}
@BOOK{book10,
author = {van Helsing, Abraham and Jackson, Tom},
gender = {pm},
title = {Same authors of unspecified gender},
date = {2010}}
@article {JMOR:JMOR10504,
author = {Markey, Molly J. and Marshall, Charles R.},
title = {Linking form and function of the fibrous joints in the skull: A new quantification scheme for cranial sutures using the extant fish Polypterus endlicherii},
journal = {Journal of Morphology},
volume = {268},
number = {1},
doi = {10.1002/jmor.10504},
pages = {89--102},
date = {2007-01},
}
@article {markey:pnas,
author = {Markey, Molly J. and Marshall, Charles R.},
title = {Terrestrial-style feeding in a very early aquatic tetrapod is supported by evidence from experimental analysis of suture morphology},
journal = {Proceedings of the National Academy of Sciences},
volume = {104},
number = {17},
doi = {10.1073/pnas.0701706104},
pages = {7134-7138},
date = {2007-04},
}
@article {Markey2085,
author = {Markey, Molly J. and Main, Russell P. and Marshall, Charles R.},
title = {\emph{In vivo} cranial suture function and suture morphology in the extant fish \emph{Polypterus}: implications for inferring skull function in living and fossil fish},
volume = {209},
number = {11},
pages = {2085--2102},
year = {2006},
doi = {10.1242/jeb.02266},
journal = {Journal of Experimental Biology},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
![example output](https://i.stack.imgur.com/daW9Y.png)
We can make this a bit more safe if we use
\newcounter{bbx:currnames}
\newcounter{bbx:lastnames}
\newbibmacro*{bbx:printlist}[1]{%
\setcounter{bbx:currnames}{0}%
\toggletrue{bbx:goahead}%
\printnames[dashed:given-family]{#1}%
\setcounter{bbx:lastnames}{\value{bbx:currnames}}}
a new macro dash:cleanup
that can be implemented as
\newbibmacro{dash:cleanup}{\setcounter{bbx:lastnames}{0}}
and is used as
\InitializeBibliographyStyle{\usebibmacro{dash:cleanup}}
\renewbibmacro*{author}{%
\ifboolexpr{ test {\ifuseauthor}
and not test {\ifnameundef{author}} }
{\usebibmacro{bbx:printlist}{author}%
\setunit{\addcomma\space}%
\usebibmacro{authorstrg}}
{\usebibmacro{dash:cleanup}}}
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{ test {\ifuseeditor}
and not test {\ifnameundef{editor}} }
{\usebibmacro{bbx:printlist}{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}}
{\usebibmacro{dash:cleanup}}}
\renewbibmacro*{bbx:translator}[1]{%
\ifboolexpr{ test {\ifusetranslator}
and not test {\ifnameundef{translator}} }
{\usebibmacro{bbx:printlist}{translator}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{translator}}
{\usebibmacro{dash:cleanup}}}
You will then have to change the
\ifboolexpr{togl {bbx:goahead}
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
in dashed:given-family
to the slightly longer
\ifboolexpr{togl {bbx:goahead}
and not test {\ifnumgreater{\value{listcount}}{\value{bbx:lastnames}}}
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
Another clean-up solution is
\makeatletter
\newtoggle{bbx:goahead}
\newcounter{bbx:currnames}
\newcounter{bbx:lastnames}
\renewcommand*{\bibnamedash}{\textemdash\textemdash\textemdash}
\newcommand*{\multidashdelim}{\addspace}
\newcommand*{\finaldashdelim}{\finalnamedelim}
\InitializeBibliographyStyle{\usebibmacro{dash:cleanup}{0}}
\newbibmacro*{bbx:printlist}[1]{%
\setcounter{bbx:currnames}{0}%
\toggletrue{bbx:goahead}%
\printnames[dashed:given-family]{#1}%
\usebibmacro{dash:cleanup}{\value{bbx:currnames}+1}%
\setcounter{bbx:lastnames}{\value{bbx:currnames}}}
\newbibmacro*{dash:delim}{%
\ifnumgreater{\value{listcount}}{\value{liststart}}
{\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{liststop}}}
or
test \ifmorenames
}
{\multidashdelim}
{\finaldashdelim}}
{}}
\DeclareNameFormat{dashed:given-family}{%
\addtocounter{bbx:currnames}{1}%
\ifboolexpr{togl {bbx:goahead} and not test \iffirstonpage
and test {\iffieldequalcs{hash}{bbx@lastname@\the\value{listcount}}}}
{\usebibmacro{dash:delim}\bibnamedash}
{\global\togglefalse{bbx:goahead}%
\ifgiveninits
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartsuffix}}
{\usebibmacro{name:family-given}
{\namepartfamily}%
{\namepartgiven}%
{\namepartprefix}%
{\namepartsuffix}}}%
\csxdef{bbx@lastname@\the\value{listcount}}{\thefield{hash}}}
\newbibmacro{dash:cleanup}[1]{%
\ifnumgreater{\value{bbx:lastnames}}{#1}
{\global\csundef{bbx@lastname@\the\value{bbx:lastnames}}%
\addtocounter{bbx:lastnames}{-1}%
\usebibmacro{dash:cleanup}{#1}}
{}}
\renewbibmacro*{author}{%
\ifboolexpr{ test {\ifuseauthor}
and not test {\ifnameundef{author}} }
{\usebibmacro{bbx:printlist}{author}%
\setunit{\addcomma\space}%
\usebibmacro{authorstrg}}
{\usebibmacro{dash:cleanup}{0}}}
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{ test {\ifuseeditor}
and not test {\ifnameundef{editor}} }
{\usebibmacro{bbx:printlist}{editor}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{editor}}
{\usebibmacro{dash:cleanup}{0}}}
\renewbibmacro*{bbx:translator}[1]{%
\ifboolexpr{ test {\ifusetranslator}
and not test {\ifnameundef{translator}} }
{\usebibmacro{bbx:printlist}{translator}%
\setunit{\addcomma\space}%
\usebibmacro{#1}%
\clearname{translator}}
{\usebibmacro{dash:cleanup}{0}}}
\makeatother
In any case you could want to add a and not test \iffirstonpage
to the \ifboolexpr
in dashed:given-family
.
Best Answer
If you are OK with
collaboration
becoming a list field where items are not separated by,
but rather withand
, you can try the following.The solution defines a new data model that makes the
collaboration
list known tobiblatex
and Biber. The redefinition of theauthor
macro is then just about printing the list correctly.