处理通过via@incollections
链接时,我必须找出一个新的 cite ( ) 命令,该命令可以解决在父集合之后引用集合的情况:@collections
crossref
\citecc
\DeclareCiteCommand*{\citetitle} % ridefinisco il tracking per avere la seconda citazione corretta
{ % Qui c'era \boolfalse{citetracker}% \boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexfield{indextitle}}
{}%
\printfield[citetitle]{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citela} % id est cite long author - anche qui come sopra ho tolto boolfalse x tracking
{\usebibmacro{prenote}} % usa il valore nel campo prenote se presente
{\ifciteindex
{\DeclareNameAlias{labelname}{given-family}% Ridefinisco la labelname per avere il nome lungo
\indexnames{labelname}} % andrà nell'indice?? verifica
{}%
\printnames{labelname}} % stampa la labelname
{\multicitedelim} % dividi i nomi multipli di autore con il modo definito
{\usebibmacro{postnote}} % scrivi le postnote se presenti
\newbibmacro*{postnotenew}{% Definisco una nuova macro secondo cui
\ifnameundef{labelname} % Se non è specificato autore o editore
{\hspace*{-0.5ex plus 0.5ex minus 0.5ex}} % Non voglio la virgola e compenso lo spazio vuoto lasciato dal nome
{\printtext{\addcomma}}} % Se invece è specificato voglio la virgola
\DeclareCiteCommand{\citeauthornew} % normale citeauthor ma che alla fine evoca la macro \postnotenew per la virgola condizionale
{%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnotenew}}
%Definisco un nuovo comando \citecc (collection-crossref) a due argomenti, la Incollection, poi la Collection di provenienza e come argomento opzionale il numero di pagina, con condizionale
\newcommand\citecc[3][]{% Definisco comando con tre argomenti e uno opzionale
\ifstrempty{#1}% Se quello opzionale è vuoto (no pagina indicata)
{\citela{#2}, \citetitle*{#2}, in \citeauthornew{#3} \citetitle{#3}, cit., p.~\citefield{#2}{pages}}% succede questo
{\citela{#2}, \citetitle*{#2}, in \citeauthornew{#3} \citetitle{#3}, p.~{#1}, cit.}} % altrimenti questo
一切都很顺利,但是我的名字索引现在也得到了一些标题,这当然是我所不想要的。
我尝试从此主题但我还没能解决所有问题。
我在 MWE 中只留下了可能涉及此事的定制:
% !BIB TS-program = biber
% !BIB program = biber
% !TEX encoding = UTF-8 Unicode
% !TeX TS-program = xelatexmk
\begin{filecontents}{archivio.bib}
@collection{Col1,
Editor = {Gino Autieri AND Gaspare Porro},
Publisher = {Routledge},
Shorttitle = {The Grand Theater},
Title = {The Grand Theater of the World. Music, Space, and the Performance of Identity in Early Modern Rome},
Year = {2019}}
@incollection{Inc1,
Author = {Mario Rossi AND Giovanni Bianchi},
Crossref = {Col1},
Pages = {151-163},
Title = {Cultural Life at Villa Lante di Bagnaia. Family, gardens and sociability},
Shorttitle = {Cultural Life}}
@book{rompi,
Author = {John Smith},
Publisher = {Laterza},
Title = {Title of a nice book},
Year = {2019}}
\end{filecontents}
% !BIB TS-program = biber
% !BIB program = biber
% !TEX encoding = UTF-8 Unicode
% !TeX TS-program = xelatexmk
\documentclass[A4, 11pt, twoside, openany]{book}%openany
\usepackage{fontspec}
\usepackage{polyglossia} % Per le sillabazioni
\setmainlanguage{italian}
%%%%%%%%%%%%%%%%%%%COMANDI DI BILIOGRAFIA%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[autostyle,italian=guillemets]{csquotes}
\usepackage{xpatch}
\usepackage{etoolbox} % necessario per il comando custom per le citazioni di incollection in crossref
\usepackage[style=verbose-trad2,
language=italian,
useprefix=true,
indexing=cite,
citepages=omit,
backend=biber,
ibidpage=true,
]{biblatex}
\NewBibliographyString{ibidemloccit,ibidemnoloccit}
\DefineBibliographyStrings{italian}{%
ibidemloccit = {Ibidem},
ibidemnoloccit = {Ivi}}
\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}}}}}
\renewbibmacro*{cite:title}{% Ciò che segue è per avere lo shorttitle alla seconda citazione (funge solo in trad2)
\printtext[bibhyperlink]{%
\printfield[citetitle]{labeltitle}%
\setunit{\addspace}%
\bibstring[\mkibid]{opcit}}}
%%%%%%%%%%%%%%% COMANDI PER CITAZIONE DI INCOLLECTION CON CROSSREF %%%%%%%%%%
\DeclareCiteCommand*{\citetitle} % ridefinisco il tracking per avere la seconda citazione corretta
{ % Qui c'era \boolfalse{citetracker}% \boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexfield{labelname}}
{}%
\printfield[citetitle]{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citela} % id est cite long author - anche qui come sopra ho tolto boolfalse x tracking
{\usebibmacro{prenote}} % usa il valore nel campo prenote se presente
{\ifciteindex
{\DeclareNameAlias{labelname}{given-family}% Ridefinisco la labelname per avere il nome lungo
\indexnames{labelname}} % andrà nell'indice?? verifica
{}%
\printnames{labelname}} % stampa la labelname
{\multicitedelim} % dividi i nomi multipli di autore con il modo definito
{\usebibmacro{postnote}} % scrivi le postnote se presenti
\newbibmacro*{postnotenew}{% Definisco una nuova macro secondo cui
\ifnameundef{labelname} % Se non è specificato autore o editore
{\hspace*{-0.5ex plus 0.5ex minus 0.5ex}} % Non voglio la virgola e compenso lo spazio vuoto lasciato dal nome
{\printtext{\addcomma}}} % Se invece è specificato voglio la virgola
\DeclareCiteCommand{\citeauthornew} % normale citeauthor ma che alla fine evoca la macro \postnotenew per la virgola condizionale
{%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnotenew}}
%Definisco un nuovo comando \citecc (collection-crossref) a due argomenti, la Incollection, poi la Collection di provenienza e come argomento opzionale il numero di pagina, con condizionale
\newcommand\citecc[3][]{% Definisco comando con tre argomenti e uno opzionale
\ifstrempty{#1}% Se quello opzionale è vuoto (no pagina indicata)
{\citela{#2}, \citetitle*{#2}, in \citeauthornew{#3} \citetitle{#3}, cit., p.~\citefield{#2}{pages}}% succede questo
{\citela{#2}, \citetitle*{#2}, in \citeauthornew{#3} \citetitle{#3}, p.~{#1}, cit.}} % altrimenti questo
%%%%%%%%%%%%%% RIDEFINISCO IL DRIVER COLLECTION%%%%%%%%%%%%
\DeclareBibliographyDriver{collection}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{maintitle+title}%
\setunit{\printdelim{nametitledelim}}\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\usebibmacro{editor+others}%
\newunit
\printlist{language}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit
\printfield{pagetotal}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\newunit\newblock
\iftoggle{bbx:related}
{\usebibmacro{related:init}%
\usebibmacro{related}}
{}%
\usebibmacro{finentry}}
\addbibresource{archivio.bib}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INDICI%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{morewrites} % Risolve il problema di Reledmac con gli indici multipli
\usepackage{imakeidx}
\indexsetup{othercode=\footnotesize}
\makeindex[intoc=true, title=Indice dei nomi, columns=2]
% \makeindex[name=cose, intoc=true, title=Indice delle cose notevoli, columns=1]
\renewbibmacro*{citeindex}{\indexnames{labelname}{}}
\makeindex
\renewbibmacro*{bibindex}{% Stessa cosa per i nomi che vengono stampati in bibliografia
\ifbibindex
{\ifnameundef{namea}{\indexnames{labelname}}{\indexnames{namea}}}
{}}
\DeclareIndexNameFormat{default}{% Formato del nome dell'autore
\usebibmacro{index:name}
{\index} %
{\namepartfamily}
{\namepartgiven} %namepartgiveni fornisce il nome abbreviato
{\namepartprefix}
{\namepartsuffix}}
%%%%%%%%%%%%%%%%%%% INIZIO DOCUMENTO %%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\textbf{Collection 1st cite citazione} -> long form \\
\cite{Col1}\\
something in the middle to avoid the ibidem: \cite{rompi}\\
\textbf{Incollection 1st cite} -> Fullcite for the Incollection and shortcite for the Collection\\
\citecc{Inc1}{Col1}\\
\printbibliography
\printindex
\end{document}
答案1
我真傻。问题只与有关\citetitle
,因此清空有关索引的字段使一切变得简单:
\DeclareCiteCommand*{\citetitle}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{}
{}%
\printfield[citetitle]{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citetitle}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{}
{}%
\printfield[citetitle]{labeltitle}}
{\multicitedelim}
{\usebibmacro{postnote}}