publist 生成条目“带有和“省略第一作者时

publist 生成条目“带有和“省略第一作者时

我使用当前版本的 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和设置为全局似乎可以解决问题。而且,据我所知,这些切换仅在那里使用,因此将它们设置为全局应该是无害的。hadmyselfauthoreditor

不幸的是,即使引入的更改很小,这些格式指令也相当长。

\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(今天发布)中修复。

相关内容