我使用当前版本的 publist(文件:publist.bbx 2018/09/01 v.1.11)制作了一个 publist,并获得了我是第一作者的条目“(with and XX)”,但如果我不是第一作者(第二作者或更晚的作者),则不会出现这种情况。 以下是 MWE:
\documentclass{article}
\usepackage[bibstyle=publist]{biblatex}
\plauthorname{Frank}
\begin{filecontents}{mwebib.bib}
@Article{Frank1994e,
author = {Frank, Andrew U. and Timpf, Sabine},
title = {Multiple Representations for Cartographic Objects in a Multi-Scale Tree - An Intelligent Graphical Zoom},
journal = {Computers and Graphics Special Issue on Modelling and Visualization of Spatial Data in GIS},
year = {1994},
volume = {18},
number = {6},
pages = {823--829},
}
@Article{Buyong1991,
author = {Buyong, Taher and Kuhn, Werner and Frank, Andrew U.},
title = {A Conceptual Model of Measurement-Based Multipurpose Cadastral Systems},
journal = {Journal of the Urban and Regional Information Systems Association (URISA)},
year = {1991},
volume = {3},
number = {2},
pages = {35--49},
}
}
\end{filecontents}
\begin{document}
\title{XX publications}
\author{}
\date{\today}
\maketitle
\section{Articles}
\newrefsection[mwebib]
\nocite{*}
\printbibliography[heading=none]
\end{document}
答案1
笔记
biblatex-publist
: (TeX.SX 上的@JSpitzm)的维护者报告说自 1.12 版起,以下修复已包含在软件包中,应该很快就会可用。因此,只要您可以更新,您就不再需要在序言中使用它。
我不确定什么可能发生了变化或在哪里发生了变化,但如果我不得不猜测,新的名称包装器格式指令会以某种方式引入对单个名称的分组,从而干扰biblatex-publist
其名称格式指令中使用的切换。
更新: @moewe 确定了分组的引入位置,它不是在新的名称包装器格式化工具中,这是我的不知情的预感,而是在https://github.com/plk/biblatex/pull/731。
在和名称格式指令中将myselfprec
和设置为全局似乎可以解决问题。而且,据我所知,这些切换仅在那里使用,因此将它们设置为全局应该是无害的。hadmyself
author
editor
不幸的是,即使引入的更改很小,这些格式指令也相当长。
\documentclass{article}
\usepackage[bibstyle=publist]{biblatex}
\plauthorname{Frank}
\begin{filecontents}{mwebib.bib}
@Article{Frank1994e,
author = {Frank, Andrew U. and Timpf, Sabine},
title = {Multiple Representations for Cartographic Objects in a Multi-Scale Tree - An Intelligent Graphical Zoom},
journal = {Computers and Graphics Special Issue on Modelling and Visualization of Spatial Data in GIS},
year = {1994},
volume = {18},
number = {6},
pages = {823--829},
}
@Article{Buyong1991,
author = {Buyong, Taher and Kuhn, Werner and Frank, Andrew U.},
title = {A Conceptual Model of Measurement-Based Multipurpose Cadastral Systems},
journal = {Journal of the Urban and Regional Information Systems Association (URISA)},
year = {1991},
volume = {3},
number = {2},
pages = {35--49},
}
\end{filecontents}
\makeatletter
\DeclareNameFormat{author}{%
\if@hlauthor%
% Embolden omitted author
\bpl@normalize{\namepartfamily}{\bpl@tsurname}%
\bpl@normalize{\namepartgiven}{\bpl@tfirstname}%
\bpl@normalize{\namepartprefix}{\bpl@tvonpart}%
\bpl@normalize{\bpl@osurname}{\bpl@esurname}%
\bpl@normalize{\bpl@ofirstname}{\bpl@efirstname}%
\bpl@normalize{\bpl@ovonpart}{\bpl@evonpart}%
\ifboolexpr{
test { \ifdefstrequal{\bpl@esurname}{\bpl@tsurname} }
and
( test { \ifdefstrequal{\bpl@efirstname}{\bpl@tfirstname} } or test { \ifdefstring{\bpl@ofirstname}{} })
and
( test { \ifdefstrequal{\bpl@evonpart}{\bpl@tvonpart} } or test { \ifdefstring{\bpl@ovonpart}{} }) }
{\toggletrue{ismyself}}{\togglefalse{ismyself}}%
\ifthenelse{\value{listcount}=1}{}{%
\ifnumless{\value{listcount}}{\value{liststop}}%
{\multinamedelim}%
{\finalnamedelim}%
}%
\iftoggle{ismyself}{\plauthorhl{%
\if@givenfirst% given name first
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\else% family name first
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\addcomma\addspace\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\addcomma\addspace\namepartgiven\addspace}}%
\fi
}}{%
\if@givenfirst% given name first
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\else% family name first
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\addcomma\addspace\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\addcomma\addspace\namepartgiven\addspace}}%
\fi
}%
\usebibmacro{name:andothers}%
\else% \if@hlauthor false
\ifthenelse{\value{listcount}=1}{\ifthenelse{\value{author}>1}{\bibopenparen\bibstring{with}\addspace}{}}{}%
% Exclude omitted author
\bpl@normalize{\namepartfamily}{\bpl@tsurname}%
\bpl@normalize{\namepartgiven}{\bpl@tfirstname}%
\bpl@normalize{\namepartprefix}{\bpl@tvonpart}%
\bpl@normalize{\bpl@osurname}{\bpl@esurname}%
\bpl@normalize{\bpl@ofirstname}{\bpl@efirstname}%
\bpl@normalize{\bpl@ovonpart}{\bpl@evonpart}%
\ifboolexpr{
test { \ifdefstrequal{\bpl@esurname}{\bpl@tsurname} }
and
( test { \ifdefstrequal{\bpl@efirstname}{\bpl@tfirstname} } or test { \ifdefstring{\bpl@ofirstname}{} })
and
( test { \ifdefstrequal{\bpl@evonpart}{\bpl@tvonpart} } or test { \ifdefstring{\bpl@ovonpart}{} }) }
{\global\toggletrue{myselfprec}\global\toggletrue{hadmyself}% <- % change here
\ifthenelse{\value{listcount}=1\AND\value{liststop}=1}
{\stepcounter{liststop}}{}}
{\ifthenelse{\value{listcount}=1}{\global\togglefalse{hadmyself}}{% <- change here
\ifboolexpr{
test { \iftoggle{myselfprec} }
and
test { \ifnumless{\value{listcount}}{3} } }
{}{%
\ifnumless{\value{listcount}}{\value{liststop}-1}%
{\multinamedelim}%
{\iftoggle{hadmyself}{%
\ifnumless{\value{listcount}}{\value{liststop}}%
{\multinamedelim}%
{\finalnamedelim}}
{\finalnamedelim}}%
}%
}%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\global\togglefalse{myselfprec}% <- change here
\namepartfamily}%
\usebibmacro{name:andothers}%
\ifthenelse{\value{listcount}=\value{liststop}\AND\value{author}>1}{\unspace\bibcloseparen}{}%
\fi% end of \if@hlauthor else condition
}
\DeclareNameFormat{editor}{%
\if@hlauthor
% Embolden omitted editor
\bpl@normalize{\namepartfamily}{\bpl@tsurname}%
\bpl@normalize{\namepartgiven}{\bpl@tfirstname}%
\bpl@normalize{\bpl@osurname}{\bpl@esurname}%
\bpl@normalize{\bpl@ofirstname}{\bpl@efirstname}%
\ifboolexpr{
test { \ifdefstrequal{\bpl@esurname}{\bpl@tsurname} }
and
( test { \ifdefstrequal{\bpl@efirstname}{\bpl@tfirstname} } or test { \ifdefstring{\bpl@ofirstname}{} })
and
( test { \ifdefstrequal{\bpl@evonpart}{\bpl@tvonpart} } or test { \ifdefstring{\bpl@ovonpart}{} }) }
{\toggletrue{ismyself}}{\togglefalse{ismyself}}
\ifthenelse{\value{listcount}=1}{}{%
\ifnumless{\value{listcount}}{\value{liststop}-1}%
{\multinamedelim}%
{\finalnamedelim}%
}%
\iftoggle{ismyself}{\plauthorhl{%
\if@givenfirst% given name first
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\else% family name first
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\addcomma\addspace\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\addcomma\addspace\namepartgiven\addspace}}%
\fi
}}{%
\if@givenfirst% given name first
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\else% family name first
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\namepartfamily%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\addcomma\addspace\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\addcomma\addspace\namepartgiven\addspace}}%
\fi
}%
\usebibmacro{name:andothers}%
\else% \if@hlauthor false
\ifthenelse{\value{listcount}=1}{\ifthenelse{\value{editor}>1}{\bibopenparen\bibstring{with}\addspace}{}}{}%
% Exclude omitted author
\bpl@normalize{\namepartfamily}{\bpl@tsurname}%
\bpl@normalize{\namepartgiven}{\bpl@tfirstname}%
\bpl@normalize{\bpl@osurname}{\bpl@esurname}%
\bpl@normalize{\bpl@ofirstname}{\bpl@efirstname}%
\ifboolexpr{
test { \ifdefstrequal{\bpl@esurname}{\bpl@tsurname} }
and
( test { \ifdefstrequal{\bpl@efirstname}{\bpl@tfirstname} } or test { \ifdefstring{\bpl@ofirstname}{} })
and
( test { \ifdefstrequal{\bpl@evonpart}{\bpl@tvonpart} } or test { \ifdefstring{\bpl@ovonpart}{} }) }
{\global\toggletrue{myselfprec}\global\toggletrue{hadmyself}% <- change here
\ifthenelse{\value{listcount}=1\AND\value{liststop}=1}
{\stepcounter{liststop}}{}}
{\ifthenelse{\value{listcount}=1}{\global\togglefalse{hadmyself}}{% <- change herey
\ifboolexpr{
test { \iftoggle{myselfprec} }
and
test { \ifnumless{\value{listcount}}{3} } }
{}{%
\ifnumless{\value{listcount}}{\value{liststop}-1}%
{\multinamedelim}%
{\iftoggle{hadmyself}{%
\ifnumless{\value{listcount}}{\value{liststop}}%
{\multinamedelim}%
{\finalnamedelim}}
{\finalnamedelim}}%
}%
}%
\ifgiveninits
{\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
{\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
\ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
\global\togglefalse{myselfprec}% <- change here
\namepartfamily}%
\usebibmacro{name:andothers}%
\ifthenelse{\value{listcount}=\value{liststop}\AND\value{editor}>1}{\unspace\bibcloseparen}{}%
\fi% end of \if@hlauthor else condition
}
\makeatother
\begin{document}
\title{XX publications}
\author{}
\date{\today}
\maketitle
\section{Articles}
\newrefsection[mwebib]
\nocite{*}
\printbibliography[heading=none]
\end{document}
答案2
谢谢大家。将在 biblatex-publist 1.12(今天发布)中修复。