0

Dealing with @incollections linked with @collections via crossref, I had to figure out a new cite (\citecc)command which could tackle the case of an incollection cited after the parent collection:

\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

Everything works great, BUT my index of names now gets also some titles, which of course I don't want.

I tried to pick code from this thread but I haven't been able to fix everything.

I left in the MWE just the customisations probably involved in the matter:

% !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}
0

Silly me. The problem was related just to the \citetitle, so emptying the fields about indexing made the day:

\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}}
| improve this answer | |
  • 1
    You can just remove the \ifciteindex{}{}% completely: It checks if you have enabled indexing and then does noting in both cases. – moewe May 3 at 12:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.