\gentextcites 多本书/同一作者,biblatex-chicago

\gentextcites 多本书/同一作者,biblatex-chicago

biblatex-chicago使用命令引用同一作者的两本书时\gentextcites缺少撇号。一本书/作者没有问题,不同作者的两本书也能正常工作。这是错误还是我遗漏了什么?

\documentclass{article}
\usepackage{fontspec}
\usepackage[authordate, backend=biber]{biblatex-chicago}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{levi-strauss1981,
    Address = {New York},
    Author = {Lévi-Strauss, Claude},
    Publisher = {Harper \& Row},
    Title = {The Naked Man: Mythologiques, Vol. 4},
    Year = {1981}}
@book{levi-strauss1968,
    Address = {New York},
    Author = {Lévi-Strauss, Claude},
    Publisher = {Harper \& Row},
    Title = {The Raw and the Cooked: Mythologiques, Vol. 1},
    Year = {1968}}
@book{nimuendaju1952,
    Address = {Berkeley \& Los Angeles},
    Author = {Nimuendajú, Curt},
    Publisher = {University of California Press},
    Title = {The Tukuna},
    Year = {1952}}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
In \gentextcites{levi-strauss1981} magnum opus ... \\

In \gentextcites{levi-strauss1981,levi-strauss1968} magnum opus ... \emph{<= missing genitive here} \\

In \gentextcites{levi-strauss1981,nimuendaju1952} magna opera (sadly it's not magni opi) ...

\printbibliography
\end{document}

在列维-斯特劳斯 (1981) 的巨作中......
在列维-斯特劳斯 (1981, 1968) 的巨作中......< 缺少撇号
在列维-斯特劳斯 (1981) 和尼姆恩达胡 (1952) 的大型歌剧中......

答案1

该问题是由具有以下测试的几个宏引起的

\ifboolexpr{%
  togl {cms@gencite}%
  and
  (
  test {\iflastcitekey}%
  or
  togl {cms@genallnames}%
  )
}%

这表明,'s只有当我们处于最后一个引用键时,才会显示。但是,对于压缩样式,我们最好使用\iffinalcitedelim,因为它会检查我们是否处于要打印的最后一个名字。

因此上面的代码应该替换为

\ifboolexpr{%
  togl {cms@gencite}%
  and
  (
  test {\iffinalcitedelim}%
  or
  togl {cms@genallnames}%
  )
}%

textcite:authshorttextcite:citeshort

\makeatletter
\newbibmacro*{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}}%
    \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 ???

\newbibmacro*{textcite:citeshort}{%
  \iffieldequals{fullhash}{\cbx@lasthash}%
  {\iffieldundef{shorthand}%
    {\iffieldundef{postnote}%
      {\iffieldequals{fullhash}{\cbx@lastyear}%
        {\setunit{\multicitedelim}%
          \global\undef\cbx@lastyear}%
        {\iffieldequalstr{entrysubtype}{classical}%
          {\setunit{\multicitedelim}}%
          {\setunit{\compcitedelim}}}}%
      {\setunit{\multicitedelim}}%
      \iffieldequalstr{entrysubtype}{classical}%
      {\usebibmacro{cite:label}}%
      {\usebibmacro{cmscitesortdate}}}%
    {\iffieldundef{postnote}%
      {\iffieldequals{fullhash}{\cbx@lastyear}%
        {\setunit{\multicitedelim}%
          \global\undef\cbx@lastyear}%
        {\setunit{\compcitedelim}}}%
      {\setunit{\multicitedelim}}%
      \printtext[bibhyperref]{%
        \printfield{shorthand}}}}%
  {\ifthenelse{\ifnameundef{labelname}\OR
      \ifentrytype{inreference}\OR
      \ifentrytype{reference}\OR
      \ifentrytype{mvreference}}%
    {\iffieldundef{shorthand}%
      {\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}%
          }%
          {\thegen}%
          {}%
          \setunit{%
            \global\booltrue{cbx:parens}%
            \cms@testspace\bibopenparen}%
          \ifnumequal{\value{citecount}}{1}%
          {\usebibmacro{prenote}}%
          {}%
          \usebibmacro{cmscitesortdate}}}%
      {\printtext[bibhyperref]{%
          \printfield{shorthand}}}}%
    {\printnames{labelname}%
      \ifboolexpr{%
        togl {cms@gencite}%
        and
        test {\iffinalcitedelim}%
      }%
      {\thegen}%
      {}%
      \setunit{%
        \global\booltrue{cbx:parens}%
        \cms@testspace\bibopenparen}%
      \ifnumequal{\value{citecount}}{1}%
      {\usebibmacro{prenote}}%
      {}%
      \iffieldundef{shorthand}%
      {\iffieldequalstr{entrysubtype}{classical}%
        {\usebibmacro{cite:label}}%
        {\usebibmacro{cmscitesortdate}}}%
      {\printtext[bibhyperref]{%
          \printfield{shorthand}}}%
      \savefield{fullhash}{\cbx@lasthash}}%
    \stepcounter{textcitecount}}% Added ???
  \setunit{%
    \ifbool{cbx:parens}%
    {\bibcloseparen\global\boolfalse{cbx:parens}}%
    {}%
    \textcitedelim}}% Not \multicitedelim ???
\makeatother

数学家协会

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[authordate, backend=biber]{biblatex-chicago}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{levi-strauss1981,
    Address = {New York},
    Author = {Lévi-Strauss, Claude},
    Publisher = {Harper \& Row},
    Title = {The Naked Man: Mythologiques, Vol. 4},
    Year = {1981}}
@book{levi-strauss1968,
    Address = {New York},
    Author = {Lévi-Strauss, Claude},
    Publisher = {Harper \& Row},
    Title = {The Raw and the Cooked: Mythologiques, Vol. 1},
    Year = {1968}}
@book{nimuendaju1952,
    Address = {Berkeley \& Los Angeles},
    Author = {Nimuendajú, Curt},
    Publisher = {University of California Press},
    Title = {The Tukuna},
    Year = {1952}}
\end{filecontents}
\addbibresource{\jobname.bib}




\makeatletter
\newbibmacro*{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}}%
    \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 ???

\newbibmacro*{textcite:citeshort}{%
  \iffieldequals{fullhash}{\cbx@lasthash}%
  {\iffieldundef{shorthand}%
    {\iffieldundef{postnote}%
      {\iffieldequals{fullhash}{\cbx@lastyear}%
        {\setunit{\multicitedelim}%
          \global\undef\cbx@lastyear}%
        {\iffieldequalstr{entrysubtype}{classical}%
          {\setunit{\multicitedelim}}%
          {\setunit{\compcitedelim}}}}%
      {\setunit{\multicitedelim}}%
      \iffieldequalstr{entrysubtype}{classical}%
      {\usebibmacro{cite:label}}%
      {\usebibmacro{cmscitesortdate}}}%
    {\iffieldundef{postnote}%
      {\iffieldequals{fullhash}{\cbx@lastyear}%
        {\setunit{\multicitedelim}%
          \global\undef\cbx@lastyear}%
        {\setunit{\compcitedelim}}}%
      {\setunit{\multicitedelim}}%
      \printtext[bibhyperref]{%
        \printfield{shorthand}}}}%
  {\ifthenelse{\ifnameundef{labelname}\OR
      \ifentrytype{inreference}\OR
      \ifentrytype{reference}\OR
      \ifentrytype{mvreference}}%
    {\iffieldundef{shorthand}%
      {\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}%
          }%
          {\thegen}%
          {}%
          \setunit{%
            \global\booltrue{cbx:parens}%
            \cms@testspace\bibopenparen}%
          \ifnumequal{\value{citecount}}{1}%
          {\usebibmacro{prenote}}%
          {}%
          \usebibmacro{cmscitesortdate}}}%
      {\printtext[bibhyperref]{%
          \printfield{shorthand}}}}%
    {\printnames{labelname}%
      \ifboolexpr{%
        togl {cms@gencite}%
        and
        test {\iffinalcitedelim}%
      }%
      {\thegen}%
      {}%
      \setunit{%
        \global\booltrue{cbx:parens}%
        \cms@testspace\bibopenparen}%
      \ifnumequal{\value{citecount}}{1}%
      {\usebibmacro{prenote}}%
      {}%
      \iffieldundef{shorthand}%
      {\iffieldequalstr{entrysubtype}{classical}%
        {\usebibmacro{cite:label}}%
        {\usebibmacro{cmscitesortdate}}}%
      {\printtext[bibhyperref]{%
          \printfield{shorthand}}}%
      \savefield{fullhash}{\cbx@lasthash}}%
    \stepcounter{textcitecount}}% Added ???
  \setunit{%
    \ifbool{cbx:parens}%
    {\bibcloseparen\global\boolfalse{cbx:parens}}%
    {}%
    \textcitedelim}}% Not \multicitedelim ???
\makeatother


\begin{document}
In \gentextcites{levi-strauss1981} magnum opus ...

In \gentextcites{levi-strauss1981,levi-strauss1968} magnum opus ...

In \gentextcites{levi-strauss1981,nimuendaju1952} magna opera (sadly it's not magni opi) ...
\end{document}

给出

In Lévi-Strauss’s (1981) magnum opus ...
In Lévi-Strauss’s (1981, 1968) magnum opus ...
In Lévi-Strauss (1981) and Nimuendajú’s (1952) magna opera (sadly it’s not
magni opi) ...

相关内容