Biblatex 打破了第二次同一作者引用的自定义设置

Biblatex 打破了第二次同一作者引用的自定义设置

此主题我对 Idem 的常规行为进行了一些自定义。现在我注意到,如果我引用同一作者的两篇文章,就会出现问题。

ATM,我得到了这个输出:

V.佩里,利昂三世和“和子说”。希腊式血管造影术,载于《意大利教堂历史》第 25 卷(1971 年),第 3-58 页,以及 V. Peri,阿德里亚诺一世和利昂三世的主教所著的《和子说》。一种合理的教条表述。摘自《意大利教堂历史》41(1987),第5-25页

我想要的是:

V.佩里,利昂三世和“和子说”。希腊式血管造影术, 《意大利教堂历史》第 25 卷 (1971 年),第 3-58 页及同上,阿德里亚诺一世和利昂三世的主教所著的《和子说》。一个可信的教条表述,载于《意大利教堂历史评论》41(1987 年),第 5-25 页

因此,基本上有两件事没有按预期进行:

  • 第二次引用的同上
  • 期刊标题之前的 IN(更准确地说,问题可能是 IN 之前的句号不应该出现在那里)

我该如何解决这一困境?

这是我的 MWE(相信我,我试图将其保持在最低限度)

% !BIB TS-program = biber
% !BIB program = biber
% !TEX encoding = UTF-8 Unicode
% !TeX TS-program = xelatexmk

\begin{filecontents}{archivio.bib}


@article{Per:Leo,
    Author = {Vittorio Peri},
    Journal = {Rivista di Storia della Chiesa in Italia},
    Pages = {3-58},
    Title = {Leone \textsc{iii} e il `Filioque'. Echi del caso nell'agiografia greca},
    Volume = {25},
    Year = {1971}}


@article{Per:Adr,
    Author = {Vittorio Peri},
    Journal = {Rivista di Storia della Chiesa in Italia},
    Pages = {5-25},
    Title = {Il «Filioque» nel magistero di Adriano \textsc{i} e di Leone \textsc{iii}. Una plausibile formulazione del dogma.},
    Volume = {41},
    Year = {1987}}


\end{filecontents}

\documentclass[11pt, openany]{book}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true]{italian}
\setotherlanguages{latin, english, french}


\usepackage[]{csquotes}
\usepackage{xpatch}
\usepackage[style=verbose-trad2,
            language=auto,
            ibidpage=true,
            autolang=other,% use new option name
            useprefix=true,
            giveninits=true,
            indexing=true,% or cite?
            citepages=separate,%
            dateabbrev=false,
            backend=biber,
        ]{biblatex}

\DeclareFieldFormat[article, inbook, incollection, inproceedings]{title}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{\textquotedblleft #1\textquotedblright}
\DeclareFieldFormat[book, inbook, incollection, inproceedings]{volume}{#1}




% This is to kill a comma between Editor and (Ed.)
\DeclareDelimFormat{editortypedelim}{\addspace}
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{translatortypedelim}{\addspace}
\DeclareFieldFormat{translatortype}{\mkbibparens{#1}}
\renewcommand*{\newunitpunct}{\addcomma\space}
\xpatchbibmacro{name:andothers}{%
  \bibstring{andothers}%
}{%
  \bibstring[\emph]{andothers}%
}{}{}

% NEW
\DeclareDelimAlias{finalnamedelim}{multinamedelim}% comma instead of AND between multiple authors

\renewbibmacro{in:}{\bibstring{in}\nopunct\space} %\nopunct aggiunto 30 mag 18 per evitare virgola in incollection

\NewBibliographyString{ibidemloccit,ibidemnoloccit}

\newcommand*{\mklangidem}[1]{%
  \DefineBibliographyStrings{#1}{%   era \DefineBibliographyStrings{italian}{%
    idem   = {Id\adddot},
    idemsm = {Id\adddot},
    idemsf = {Ead\adddot},
    idemsn = {Id\adddot},
    idempm = {Id\adddot},
    idempf = {Id\adddot},
    idempn = {Id\adddot},
    idempp = {Id\adddot},
    ibidemloccit   = {\mkbibemph{\autocap{i}bid\adddot}},
    ibidemnoloccit = {Ivi},
    opcit  = {cit\adddot}, %tolto \nopunct per avere la virgola 30 mag 2018
    loccit = {loc\adddotspace cit\adddot},
  }}

\forcsvlist{\mklangidem}{english,italian, german}

%%%%%%%%%%%%%%%%%%%%%%%%%%%CAMPO EDITOR TRA PARENTESI CON EDD%%%%%%%%%%%

\DefineBibliographyStrings{italian}{                    
    editor = {a cura di},
    editors={a cura di},
    byeditor = {a cura di}
}

\xpatchbibmacro{author}
  {\printnames{author}}
  {\iffootnote
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
       {\usebibmacro{cite:idem}}
       {\printnames{author}}}
     {\printnames{author}}}
  {}{}
\xpatchbibmacro{bbx:editor}
  {\printnames{editor}}
  {\iffootnote
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
        {\usebibmacro{cite:idem}}
        {\printnames{editor}}}
     {\printnames{editor}}}
  {}{}
\xpatchbibmacro{bbx:translator}
  {\printnames{translator}}
  {\iffootnote
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
        {\usebibmacro{cite:idem}}
        {\printnames{translator}}}
     {\printnames{translator}}}
  {}{}

\renewbibmacro*{cite:ibid}{%
  \printtext{%
    \bibhyperlink{cite\csuse{cbx@lastcite@\thefield{entrykey}}}{%
      \ifloccit
        {\bibstring[\mkibid]{ibidemloccit}%
         \global\toggletrue{cbx:loccit}}
        {\bibstring[\mkibid]{ibidemnoloccit}}}}}


\DeclareFieldFormat[article, inbook, incollection, inproceedings]{citetitle}{\mkbibemph{#1}}

\renewbibmacro*{publisher+location+date}{%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit*{\space}%
  \usebibmacro{date}%
  \newunit}

\renewbibmacro*{series+number}{%
  \iffieldundef{series}
    {}
    {\setunit{\addspace}%
     \printtext[parens]{%
       \printfield{series}%
       \setunit*{\addspace}%
       \printfield{number}}}%
  \newunit}



\begin{document}


\cite{Per:Leo} and \cite{Per:Adr}

\end{document}

答案1

对于 idem 问题,请注意 的修补代码authorbbx:editorbbx:translator明确仅在脚注中启用“idem”。您可以将其更改为

\xpatchbibmacro{author}
  {\printnames{author}}
  {\ifcitation
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
       {\usebibmacro{cite:idem}}
       {\printnames{author}}}
     {\printnames{author}}}
  {}{}
\xpatchbibmacro{bbx:editor}
  {\printnames{editor}}
  {\ifcitation
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
        {\usebibmacro{cite:idem}}
        {\printnames{editor}}}
     {\printnames{editor}}}
  {}{}
\xpatchbibmacro{bbx:translator}
  {\printnames{translator}}
  {\ifcitation
     {\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
        {\usebibmacro{cite:idem}}
        {\printnames{translator}}}
     {\printnames{translator}}}
  {}{}

因此它适用于所有引用。

相关内容