\parencites 不重复作者姓名

\parencites 不重复作者姓名

我有以下内容:

\documentclass[11pt,a4paper,oneside,notitlepage]{book}

\usepackage[authordate,backend=biber,cmsdate=both,useprefix=false,ibidtracker=false]{biblatex-chicago}
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}

@book{armstrong:universals,
author = {Armstrong, D.\ M.},
title = {Universals},
subtitle = {An Opinionated Introduction},
year = 1989,
location = {Boulder, CO},
publisher = {Westview Press},
}

@book{armstrong:truth_and_truthmakers,
author = {Armstrong, D.\ M.},
title = {Truth and Truthmakers},
year = 2004,
location = {cambridge, UK},
publisher = {Cambridge University Press},
}

\end{filecontents}

\begin{document}

\parencites[94]{armstrong:universals}[see also][46--48]{armstrong:truth_and_truthmakers}

\end{document}

输出以下内容:

在此处输入图片描述

当然,该\parencites命令会打印两次作者姓名。但这并不是引用同一作者的不同出版物的通常方式:作者姓名应仅出现在第一个引用的出版物中。

但是,我不能简单地使用它,\parencite因为我需要通过“另见”来介绍第二个参考文献。我也不能使用它\citeyear作为第二个参考文献,因为我希望年份能够超链接参考文献列表中的条目(我尚未将其包含在 MWEB 中)。

我确信我遗漏了一个简单的解决方案。

答案1

正如您提到的,您无法使用的原因\citeyear是您希望它的超链接能够工作,然后您可以使用\cite*它将在您的设置中按预期工作:

\documentclass[11pt,a4paper,oneside,notitlepage]{book}

\usepackage[authordate,backend=biber,cmsdate=both,useprefix=false,ibidtracker=false]{biblatex-chicago}
\usepackage{hyperref}
\addbibresource{\jobname.bib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}

@book{armstrong:universals,
author = {Armstrong, D.\ M.},
title = {Universals},
subtitle = {An Opinionated Introduction},
year = 1989,
location = {Boulder, CO},
publisher = {Westview Press},
}

@book{armstrong:truth_and_truthmakers,
author = {Armstrong, D.\ M.},
title = {Truth and Truthmakers},
year = 2004,
location = {cambridge, UK},
publisher = {Cambridge University Press},
}

\end{filecontents}

\begin{document}

\parencites[94]{armstrong:universals}[see also][46--48]{armstrong:truth_and_truthmakers}

(\cite[94]{armstrong:universals}; \cite*[see also][46--48]{armstrong:truth_and_truthmakers})

\printbibliography

\end{document}

导致:

在此处输入图片描述

答案2

你会发现

\parencites[94]{knuth:ct:a}[46--48]{knuth:ct:b}

给出你期望的输出,即

(Knuth 1984,94;1986,46-48)

但事情出了问题

\parencites[94]{knuth:ct:a}[see][46--48]{knuth:ct:b}

即,当您在后面的引文中有前注论证时。我猜这里的想法是,第二次引文的年份(引文标签)可能会被前后注淹没。

biblatex即使引文中有预先说明,你也可以省略名字

\documentclass[11pt,a4paper,oneside,notitlepage]{book}

\usepackage[authordate,backend=biber,cmsdate=both,useprefix=false,ibidtracker=false]{biblatex-chicago}
\addbibresource{biblatex-examples.bib}

\makeatletter
\renewbibmacro*{cite:init}{%
  \ifnumless{\value{multicitecount}}{2}%
    {\global\boolfalse{cbx:parens}%
     \global\undef\cbx@lasthash%
     \global\undef\cbx@lastyear}%
    {}}%
\makeatother

\begin{document}
\parencites[94]{knuth:ct:a}[46--48]{knuth:ct:b}

\parencites[94]{knuth:ct:a}[see][46--48]{knuth:ct:b}
\end{document}

“(Knuth 1984, 94; 1986, 46–48)”和“(Knuth 1984, 94; 参见 1986, 46–48)”


事实证明,如果\textcites使用的话,还需要做更多的工作:

\makeatletter
\renewbibmacro*{textcite:authshort}{%
  \iffieldequals{fullhash}{\cbx@lasthash}%
  {\iffieldundef{postnote}%
    {\iffieldequals{fullhash}{\cbx@lastyear}%
      {\setunit{\multicitedelim}%
        \global\undef\cbx@lastyear}%
      {\iffieldequalstr{entrysubtype}{classical}%
        {\setunit{\multicitedelim}}%
        {\setunit{\compcitedelim}}}}%
    {\setunit{\multicitedelim}}%
    \ifnumequal{\value{citecount}}{1}%
      {\usebibmacro{prenote}}%
      {}%
    \iffieldequalstr{entrysubtype}{classical}%
      {\usebibmacro{cite:label}}%
      {\usebibmacro{cmscitesortdate}}}%
  {\iffieldundef{shorthand}%
    {\ifthenelse{\ifnameundef{labelname}\OR
        \ifentrytype{inreference}\OR
        \ifentrytype{reference}\OR
        \ifentrytype{mvreference}}%
      {\iffieldequalstr{entrysubtype}{classical}%
        {\setunit{%
            \global\booltrue{cbx:parens}%
            \cms@testspace\bibopenparen}%
          \ifnumequal{\value{citecount}}{1}%
          {\usebibmacro{prenote}}%
          {}%
          \usebibmacro{cite:label}}%
        {\usebibmacro{cite:label}%
          \ifboolexpr{%
            togl {cms@gencite}%
            and
            (
            test {\iffinalcitedelim}%
            or
            togl {cms@genallnames}%
            )
          }%
          {\thegen}%
          {}%
          \setunit{%
            \global\booltrue{cbx:parens}%
            \cms@testspace\bibopenparen}%
          \ifnumequal{\value{citecount}}{1}%
          {\usebibmacro{prenote}}%
          {}%
          \usebibmacro{cmscitesortdate}}}%
      {\printnames{labelname}%
        \ifboolexpr{%
          togl {cms@gencite}%
          and
          (
          test {\iffinalcitedelim}%
          or
          togl {cms@genallnames}%
          )
        }%
        {\thegen}%
        {}%
        \setunit{%
          \global\booltrue{cbx:parens}%
          \cms@testspace\bibopenparen}%
        \ifnumequal{\value{citecount}}{1}%
        {\usebibmacro{prenote}}%
        {}%
        \iffieldequalstr{entrysubtype}{classical}%
        {\usebibmacro{cite:label}}%
        {\usebibmacro{cmscitesortdate}}%
        \savefield{fullhash}{\cbx@lasthash}}}%
    {\printfield{shorthand}%
      \ifboolexpr{%
        togl {cms@gencite}%
        and
        (
        test {\iffinalcitedelim}%
        or
        togl {cms@genallnames}%
        )
      }%
      {\thegen}%
      {}%
      \setunit{%
        \global\booltrue{cbx:parens}%
        \cms@testspace\bibopenparen}%
      \ifnumequal{\value{citecount}}{1}%
      {\usebibmacro{prenote}}%
      {}%
      \iffieldequalstr{entrysubtype}{classical}%
      {\usebibmacro{cite:label}}%
      {\usebibmacro{cmscitesortdate}}%
      \savefield{fullhash}{\cbx@lasthash}}%
    \stepcounter{textcitecount}}% Added ???
  \setunit{%
    \ifbool{cbx:parens}%
    {\bibcloseparen\global\boolfalse{cbx:parens}}%
    {}%
    \textcitedelim}}% Not \multicitedelim ???
\makeatother

相关内容