biblatex (verbose-trad2) - 引文中的首字母和参考书目中的全名:合集和论文集

biblatex (verbose-trad2) - 引文中的首字母和参考书目中的全名:合集和论文集

这是一个子问题biblatex (verbose-trad2) - 引文中的首字母和参考书目中的全名。 这解决方案在处理书籍和文章时,全能的 Moewe 在这个问题中提供的方法非常有效,但在引用同一合集或会议记录中的多篇文章时,会发生一些奇怪的事情:

在此处输入图片描述

第二篇文章的引文完整显示了作者的姓名,而不是像同一集中的第一个引文那样只显示作者的姓名首字母和姓氏。

我想要获得的是: 在此处输入图片描述

解决方案不应该影响参考书目中项目的出现,这是可以的。

不幸的是,我对 biblatex 的掌握速度比 biblatex 本身给我带来的新问题数量要慢得多。然而,我觉得有必要尽快设计出自己的风格,因为这个东西变得太乱了。

最后再说一下这些问题的教育价值:我觉得我从这个论坛学到了很多东西。我根本不认为这是一个获取免费代码片段的地方:相反,我正在培养自己永远无法提高的技能和知识。谢谢大家。


平均能量损失

\documentclass[11pt, twoside, openany]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} 
\usepackage[italian]{babel}
\usepackage{slantsc}
\usepackage[autostyle,italian=guillemets]{csquotes} %per le citazioni (da approfondire)
\usepackage{xpatch} %patch delle macro
\usepackage[style=verbose-trad2,            
            language=italian,
            useprefix=true,                 
            citepages=omit,                 
            backend=biber, 
            ibidpage=true, %ibid solo se veramente idem
            sorting=nyt, %name year title
        ]{biblatex} 
%
\usepackage{biblatex-opcit-booktitle}
%
%queste tre linee di codice per la compatibilità del titolo corrente della bib. in sc
\defbibheading{sc-comp}[\bibname]{%
  \chapter*{#1}\markboth{#1}{}%
  \addcontentsline{toc}{chapter}{\bibname} %questo per far venire la bib. nel toc
}
%
\ExecuteBibliographyOptions{
                                               giveninits=false, 
                                               dashed=false, 
                                               dateabbrev=false
                                               }
\DeclareNameAlias{sortname}{last-first}
\NewBibliographyString{ibidemloccit,ibidemnoloccit}
\DefineBibliographyStrings{italian}{%
  bibliography = {Bibliografia},
  editor           = {a cura di},
  editors          = {a cura di},
  idem           = {\textsc{Id}\adddot},
  idemsf         ={\textsc{Ead}\adddot},
  ibidemloccit   = {\mkbibemph{\autocap{i}bid\adddot}},
  ibidemnoloccit = {\autocap{i}vi},
  and             = {\addcomma},%{\textendash}, %fa diventare la "e" per gli autori plurimi un trattino en
}
%
\DefineBibliographyExtras{italian}{\protected\def\bibrangedash{-}} %imposta trattino come separatore pagine invece di en-dash
%
\renewbibmacro*{publisher+location+date}{%
   \iflistundef{publisher}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit*{\addspace}
  \usebibmacro{date}%
 \printfield{edition}%
  \newunit}
%
%chiama id o ead in bibl. funziona con dashed=true
\renewcommand*{\bibnamedash}{\bibstring[\mkibid]{idem\thefield{gender}}}
%
%prima occorrenza nome aut. puntata
\renewbibmacro*{cite:full}{%
  \usebibmacro{cite:full:citepages}%
  \global\toggletrue{cbx:fullcite}%
  \printtext[bibhypertarget]{%
    \usedriver
      {\toggletrue{abx@bool@giveninits}%
       \DeclareNameAlias{sortname}{default}}
      {\thefield{entrytype}}}%
  \usebibmacro{shorthandintro}}
%
%questa mette l'edizione in apice
\DeclareFieldFormat{edition}{%
  \ifinteger{#1}
    {\textsuperscript{#1}}
    {#1\isdot\setunit{\addcomma\space}}}
%
%questa per togliere la prima occorrenza del numero di edizione
\newcommand{\replaceedition}[1]{%
  \xpatchbibdriver{#1}
    {\printfield{edition}%
     \newunit}
    {}%
    {}
    {\typeout{failed to patch driver #1}}
}
\replaceedition{book}
\replaceedition{collection}
\replaceedition{inbook}
\replaceedition{incollection}
\replaceedition{manual}
%
%questa stampa l'anno di edizione originale
\renewbibmacro*{date}{%
  \printdate
  \iffieldundef{origyear}{%
  }{%
    \setunit*{\addspace}%
    \printtext[parens]{ed. or. \printorigdate}%
  }%
}
%
% sostituisce "e" fra autori con virgola
\AtBeginBibliography{
\renewcommand*{\finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{}{}%
\addspace\addcomma\space}%
}

%volumi riviste
\renewbibmacro*{volume+number+eid}{%
 \setunit*{\addcomma\space}% 
  \printfield{volume}%
 %invece di \setunit*{\adddot}% 
  \setunit*{\addslash}% 
  \printfield{number}%
  }
%
\renewcommand*{\revsdnamepunct}{} %toglie virgola fra cognome e nome aut.
\renewcommand*{\intitlepunct}{\space} %toglie ":" dopo "in" dopo elementi in raccolte (art, inproc, incoll)
\renewcommand*{\newunitpunct}{\addcomma\space} %virgola fra aut. e titolo
\renewcommand*{\mkbibnamegiven}[1]{\textsc{#1}} %nome autore sc
\renewcommand*{\mkbibnameprefix}[1]{\textsc{#1}} %particella autore sc
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}} %cognome autore sc
%
%
\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {\usebibmacro{byeditor+othersstrg}%
     \setunit{\addspace}%
     \printnames[byeditor]{editor}%
     \clearname{editor}%
     \addspace}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}
%
 %toglie "in" dopo titoli art. (solo art.) in riviste
\renewbibmacro{in:}{%
  \ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}}}
%
\nocite{*} %stampa tutta la bibliografia, anche roba non citata nel testo
%
\DeclareFieldFormat{journaltitle}{\enquote{#1\isdot}} %nome rivista in tondo fra caporali (=enquote)
\DeclareFieldFormat[article]{title}{\textit{#1}} %titolo art. in corsivo
\DeclareFieldFormat[article]{citetitle}{\textit{#1}} %titolo art. in corsivo in cit.
\DeclareFieldFormat[article]{volume}{\textsc{#1}} %vol. in sc (per num. romani)
\DeclareFieldFormat[collection]{volume}{vol. \textsc{#1}} %vol. in sc per curatele
\DeclareFieldFormat[incollection]{title}{\textit{#1}} %nome art. in miscell. in corsivo
\DeclareFieldFormat[incollection]{citetitle}{\textit{#1}} %nome art. in miscell. in corsivo in cit.
\DeclareFieldFormat[inproceedings]{title}{\textit{#1}}%come sopra
\DeclareFieldFormat[inproceedings]{citetitle}{\textit{#1}}%come sopra
\DeclareFieldFormat{editortype}{\mkbibparens{#1}} %a cura di fra parentesi
\DeclareDelimFormat{editortypedelim}{\addspace} %toglie virgola prima di (a cura di)
%
%segue macro per impostare ibidem, ivi, id. in maniera corretta
\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}}}}}

\begin{filecontents}{\jobname.bib}
@collection{raonap,
editor = {Rao, Anna Maria}, 
title = {Napoli e il Mediterraneo nel Settecento. Scambi, immagini, istituzioni},
shorttitle = {Napoli e il Mediterraneo nel Settecento},
location = {Bari},
date = {2017},
gender = {sf},
} 

@incollection{aglietti,
author = {Aglietti, Marcella},
title = {Prerogative di Stato e conflitti giurisdizionali dalle carte di Giuseppe Bonechi, console toscano a Napoli (1765-1796)},
crossref = {raonap},
}

@incollection{carrino,
author = {Carrino, Annastella},
title = {Il Levante \emph{<<que tenemos a la puerta>>}. Progetti e pratiche del commercio mediterraneo nel Regno di Napoli di secondo Settecento},
crossref = {raonap},
}

@proceedings{occimed,
editor        = {Crocetti, Renzo},
title         = {La crescita economica dell’Occidente medievale. Un tema storico non ancora esaurito. \emph{Atti del venticinquesimo convegno internazionale di studi (Pistoia, 14-17 maggio 2015)}}, 
shorttitle = {La crescita economica dell'Occidente medievale},
date          = {2017},
location      = {Roma},
}

@inproceedings{feniello,
author = {Feniello, Amedeo}, 
title = {Mercati, mercanti, diritto mercantile in uno spazio di confine: il Mezzogiorno italiano (\textsc{ix}-\textsc{xii} secolo)},
crossref = {occimed},
}

@incollection{alba,
author = {Albanese, Maria Chiara},
title =  {Il concetto di dominio dei mari nel secolo \textsc{xviii}: la Regia Marina del Regno di Napoli e i barbareschi},
crossref = {occimed},
}
\end{filecontents}
\addbibresource{\jobname.bib}
%\addbibresource{biblatex-examples.bib}

\begin{document}
What I get:\\[1em]

\cite{aglietti} 

\cite{carrino}

\cite{aglietti} %second quote of same essay, correct

\cite{carrino} %same

\cite{feniello} %this and the next one show the behaviour of proceedings

\cite{alba}\\[2em]

What I want:\\[1em]

{\sc M. Aglietti}, \emph{Prerogative di Stato e conflitti giurisdizionali dalle carte di Giuseppe Bonechi, console toscano a Napoli (1765-1796)}, in {\sc A. M. Rao} (a cura di), \emph{Napoli e il Mediterraneo nel Settecento. Scambi, immagini, istituzioni}, Bari 2017

{\sc A. Carrino}, \emph{Il Levante \emph{<<que tenemos a la puerta>>}. Progetti e pratiche del commercio mediterraneo nel Regno di Napoli di secondo Settecento}, in {\sc Rao} (a cura di), \emph{Napoli e il Mediterraneo nel Settecento}, cit.
\printbibliography[heading=sc-comp] %bibliography, correct as well
\end{document}

答案1

biblatex-opcit-booktitlecite改变了bibmacro的默认定义verbose-trad2,并引入了一些我们需要关心的情况。

您还需要添加\toggletrue{abx@bool@giveninits}到宏related:infobiblatex-opcit-booktitle

\makeatletter
\renewbibmacro*{related:info}{%
  \usebibmacro{related:info:booktitle}%
  \usebibmacro{cite:full:citepages}%
  \printtext[bibhypertarget]{\usedriver%
    {\toggletrue{abx@bool@giveninits}%
     \DeclareNameAlias{sortname}{default}}%
    {inbook:rel:\blx@cbxfile}}%
}
\makeatother

相关内容