biblatex-publist 使我成为不是作者的条目的合著者

biblatex-publist 使我成为不是作者的条目的合著者

在撰写简历时,我想添加一些我自己的论文的参考书目,但也添加一些描述我所修课程的参考书目。我的策略是将那些修过的课程放在一个特殊的类别中(例如@book),并打印单独的参考书目,如下所示:

\documentclass{article}

\title{Curriculm Vitae}
\author{R. Reventlov Giskard}

\usepackage%
    [backend=biber,%
    style=publist]% 
    {biblatex}

\plauthorname[R. Giskard]{Reventlov}

\addbibresource{articles.bib}
\addbibresource{courses.bib}

\begin{document}

\maketitle

\nocite{*}

%   MY ARTICLES
\printbibliography[title={Published Articles}, type=article]


%   COURSES [BOOKS] BY OTHERS
\printbibliography[title={Courses Taken}, type=book]

\end{document}

命令\printbibliography应该打印类似这样的内容:

已发表文章

1 2006(与 R. Daneel Olivaw 合作)“重温机器人三大定律”。

2 2005.“机器人第零定律”。

修读课程

3 2004苏珊·卡尔文。机器人技术的实用方面

4 2003汉·法斯托尔夫和瓦西莉亚·法斯托尔夫。如何解读和影响人类和机器人的情绪

相反,第四个条目被错误地打印如下:

4 2003(与 Han Fastolfe 和 Vasilia Fastolfe 合作)。如何解读和影响人类和机器人的情绪

我怎样才能防止biblatex-publist别人暗中让我成为这第四个条目(或者所有@book条目)的共同作者?

注 1

在我的完整代码中,我声明了一个特殊的条目类型,@course如下所示:

\DeclareBibliographyAlias{course}{book}

然后调用:

\printbibliography[title={Courses Taken}, type=course]

在两种情况下,错误仍然存​​在。

笔记2

如果没有的话,输出style=publist将会是这样的:

已发表文章

1R. Reventlov Giskard 和 R. Daneel Olivaw (2006)。“重温机器人三大定律”。

2R. Reventlov Giskard (2005).“机器人第零定律”。

修读课程

3苏珊·卡尔文(2004)。机器人技术的实用方面

4Han Fastolfe 和 Vasilia Fastolfe (2003)。如何解读和影响人类和机器人的情绪

OP 编辑​​ 1

我已经测试了以下版本的代码@moewe (唯一的变化是从“R. Giskard Reventlov”中删除“R.”并添加“Susan Calvin”作为“appleby”的合著者):txt.do/1fc7k

但是输出是:

请注意,此处重要的共同作者是“appleby”条目的共同作者。不应说“(with ...)”,因为 Giskard (the pluauthorname) 不是“appleby”条目的共同作者。

如果您感兴趣的话,这是日志文件:txt.do/1fcz2

OP 编辑​​ 2

按照建议安装了 vanilla TeX Live 后@moewe 对他的回答的评论,我们似乎距离解决问题只有一步之遥。相同的输入返回以下输出:

(亮点是我的。)

这是日志文件:txt.do/1fg0o

以防万一,我不介意丢掉等人功能,因为我正在设置maxnames=99

答案1

更新正如所提到的斯皮茨,的开发人员biblatex-publist已经发布了 1.20 版本,对这种稍微违反直觉的行为进行了修复。


以前 (< v1.20)biblatex-publist假设您是所列作品的合著者。如果我理解样式所做的所有工作,那么\plauthorname名称中是否存在 a 的信息是可用的,我们只需要利用它。

诀窍是检查nonplauthors/nonpleditors是否相等listtotal。如果它们相等,\plauthorname则作者/编辑之间不存在。在这种情况下,我们避免使用“with”和括号。

的整个定义已经比较完整,这里我们只是在原来的定义上bpl:handlenames添加了两个测试。\ifthenelse{\value{nonpl#1s}=\value{listtotal}}publist.bbx

以下代码需要biblatex-publistv.1.18 (2020/07/31)。旧版本可能不会出现错误,但输出可能不会如预期。

\documentclass{article}

\usepackage%
    [backend=biber,%
    style=publist]% 
    {biblatex}

\plauthorname[Giskard]{Reventlov}

\makeatletter
\renewbibmacro{bpl:handlenames}[1][author]{%
    \bpl@ifplauthor{\namepartgiven}{\namepartprefix}{\namepartfamily}%
       {\global\toggletrue{isplauthor}\stepcounter{pl#1}}%
       {\global\togglefalse{isplauthor}}%
    %
    % Calculate real list stop
    \ifnumless{\value{liststop}}{\value{maxnames}}
         {\setcounter{realliststop}{\theliststop}}
         {\setcounter{realliststop}{\value{minnames}}}%
    %
    % First case: plauthorhandling=highlight
    \if@hlauthor%
        % Highlight plauthor(s)
        \usebibmacro{bpl:omissiondelim}[#1]%
        \iftoggle{isplauthor}{%
            \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\isdot\addspace}}%
                \fi
            }%
            \ifnumequal{\value{listcount}}{\value{liststop}}{}{\usebibmacro{name:andothers}}%
        }{%
           \ifnumgreater{\value{listcount}}{\value{realliststop}}{}{%
             \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\isdot\addspace}}%
             \fi
           }%
           \usebibmacro{name:andothers}%
        }%
    %
    % Second case: plauthorhandling=omit
    \else% \if@hlauthor false
        \ifthenelse{\value{listcount}=1}%
            {\ifthenelse{\value{nonpl#1s}>0}%
                 {\ifthenelse{\value{pl#1s}=0}
                    {}
                    {\bibopenparen\bibstring{with}\addspace}}%
                 {}%
             \iftoggle{isplauthor}%
                 {\global\toggletrue{plauthorprecedes}}%
                 {\global\togglefalse{plauthorprecedes}}%
            }%
            {}%
        % Exclude omitted author
        \iftoggle{isplauthor}%
            {% <- TRUE condition
              \global\toggletrue{hadplauthor}%
            }% <- end TRUE condition
            {% <- FALSE condition
              \stepcounter{nonpl#1}%
              \ifthenelse{\value{listcount}=1}%
                   {\global\togglefalse{hadplauthor}}%
                   {%
                     \iftoggle{plauthorprecedes}%
                         {}%
                         {%
                           \ifnumgreater{\value{listcount}}{\value{realliststop}}{}{%
                              \ifnumless{\value{nonpl#1}}{\value{nonpl#1s}}%
                                 {\multinamedelim}%
                                 {\printdelim[#1]{bplfinalnamedelim}}%
                            }%
                         }%
                   }%
             \ifnumgreater{\value{listcount}}{\value{realliststop}}{}{%
              \ifgiveninits
                  {\ifdefvoid{\namepartgiveni}{}{\namepartgiveni\addspace}}%
                  {\ifdefvoid{\namepartgiven}{}{\namepartgiven\addspace}}%
              \ifdefvoid{\namepartprefix}{}{\namepartprefix\addspace}%
              \global\togglefalse{plauthorprecedes}%
              \namepartfamily%
             }%
            }% <- end FALSE condition
        %
        \usebibmacro{name:andothers}%
        \ifthenelse{\value{nonpl#1s}>0\AND\value{listcount}=\value{liststop}}%
            {\ifthenelse{\value{pl#1s}=0}
               {}
               {\unspace\bibcloseparen}}%
            {}%
    \fi% end of \if@hlauthor else condition
}
\makeatother

\begin{filecontents}{\jobname.bib}
@book{appleby,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  date    = {2001},
}
@book{bppleby,
  author  = {Humphrey Bppleby and Someone Else},
  title   = {On the Importance of the Civil Service},
  date    = {2002},
}
@book{cppleby,
  author  = {Humphrey Cppleby and Someone Else and A. Third Person},
  title   = {On the Importance of the Civil Service},
  date    = {2003},
}
@article{reventlov:2,
  author  = {Giskard Reventlov and Someone Else},
  title   = {Turtles},
  date    = {2012},
}
@article{reventlov:1,
  author  = {Giskard Reventlov},
  title   = {Turtles},
  date    = {2011},
}
@article{reventlov:3,
  author  = {Giskard Reventlov and Ann Uthor and Bann Tuthor},
  title   = {Turtles},
  date    = {2013},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}

%   MY ARTICLES
\printbibliography[title={Published Articles}, type=article]

%   COURSES [BOOKS] BY OTHERS
\printbibliography[title={Courses Taken}, type=book]
\end{document}

2013 年(与 Ann Uthor 和 Bann Tuthor 合著)。“海龟”。In://2003 年 Humphrey Cppleby、Someone Else 和 A. Third Person。论公务员制度的重要性。

答案2

目前还未biblatex-publist准备好应对这种情况。但是,我认为您可能会(误用)类型@review来完成此类任务,因为该类型不考虑。或者,您可以基于plauthor定义新的驱动程序。@course@review

关于 的使用@review,请参考手册。

相关内容