使用自定义引用命令 (Biblatex) 对以名称索引结尾的标题进行去标记化

使用自定义引用命令 (Biblatex) 对以名称索引结尾的标题进行去标记化

处理通过via@incollections链接时,我必须找出一个新的 cite ( ) 命令,该命令可以解决在父集合之后引用集合的情况:@collectionscrossref\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}}

相关内容