Com uma versão recente do biblatex (e biber 2.0)

Com uma versão recente do biblatex (e biber 2.0)

Tenho que criar num documento duas bibliografias (fácil), que devem ser numeradas (fácil) que são preenchidas por \citecomandos distintos (o que pode ser feito por exemplo com categorias). O problema é que é possível que alguns verbetes estejam em ambas as bibliografias e aqui começam os problemas como pode ser visto neste exemplo:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=numeric,defernumbers,sortcites]{biblatex}
\DeclareBibliographyCategory{related}
\DeclareBibliographyCategory{main}

\DeclareCiteCommand{\cite}[\mkbibbrackets]
  {\usebibmacro{prenote}}
  {\addtocategory{main}{\thefield{entrykey}}%
   \usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citer}[\mkbibparens]
  {\usebibmacro{prenote}}
  {\addtocategory{related}{\thefield{entrykey}}%
   \usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\addbibresource{biblatex-examples.bib}  

\begin{document}
\cite{shore,sarfraz,spiegelberg}

\citer{spiegelberg}

\cite{weinberg}

\citer{sigfridsson}


\printbibliography[category=main,title=Main List,resetnumbers]

\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\printbibliography[category=related,resetnumbers,title=Related Documents]

\end{document}

insira a descrição da imagem aqui

A entrada de Spiegelberg deveria ter o número 3 na primeira bibliografia (e quando citado por \cite, e 2 na segunda e quando citado por \citer. Estive olhando agora refsection(funcionaria, se alguém pudesse "interrompê-lo e retomá-lo"), \DeclareSourceMap(para copie a entrada) e outras coisas, mas nada parece muito bom. Alguém tem uma ideia de como fazer isso?

Responder1

Encontrei duas soluções para a questão

Com uma versão recente do biblatex (e biber 2.0)

Lá é possível "clonar" entradas: (veja tambémhttps://github.com/plk/biblatex/issues/297)

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=numeric,defernumbers,sortcites]{biblatex}
\DeclareBibliographyCategory{related}
\DeclareBibliographyCategory{main}

\DeclareCiteCommand{\cite}[\mkbibbrackets]
  {\usebibmacro{prenote}}
  {\addtocategory{main}{\thefield{entrykey}}%
   \usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citer}[\mkbibparens]
  {\usebibmacro{prenote}}
  {\addtocategory{related}{\thefield{entrykey}}%
   \usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\addbibresource{biblatex-examples.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \perdatasource{biblatex-examples.bib}
      \step[fieldsource=entrykey, match=\regexp{(.*)}, final]
      \step[entryclone={rel-$1}]
    }
  }
}

\begin{document}\nocite{*}
\cite{shore,sarfraz,spiegelberg}

\citer{rel-spiegelberg,rel-springer}

\printbibliography[category=main,title=Main List,resetnumbers]

\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\printbibliography[category=related,resetnumbers,title=Related Documents]

\end{document}

insira a descrição da imagem aqui

Usando "reflexões divididas"

Isso coloca os diferentes comandos de citação em diferentes seções de referência. O desafio aqui era encontrar uma maneira de pausar e reiniciar uma reflexão. Como a refsection não pode ser aninhada, não se pode usar esta solução em documentos com refsections "reais"! Uma discussão sobre esta solução está aquihttps://github.com/plk/biblatex/issues/307. Se eu encontrar algum tempo, talvez o converta em um pacote.

atualizado em 2018 para se adaptar a algumas mudanças internas no \blx@refsection@i.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[sortcites]{biblatex}
\usepackage{xparse,zref}
\addbibresource{biblatex-examples.bib}

\makeatletter

% Commands to label and reference the refsections
% by name. As a refsection can be behind
% \printbibliography a fallback label in the aux is used too
\newcommand\UFblx@labelrefsection[1]{%
 \csxdef{refsection@label@#1@num}{\the\c@refsection}%
 \zref@setcurrent{default}{\the\c@refsection}%
 \zref@labelbyprops{refsection@auxlabel@#1}{default}}


\newcommand\getrefsection[1]{%
 \ifcsname refsection@label@#1@num\endcsname
  \csname refsection@label@#1@num\endcsname
 \else
  \zref@extractdefault{refsection@auxlabel@#1}{default}{0}%
 \fi}

% a hook at the begin can be useful
\newcommand\splitrefinit[2]{%
 \csdef{UFblx@splitrefsection@#1@inithook}{#2}}

\newcommand\UFblx@refsectioncont@i{}
\newcommand\UF@refsectioncont@name{}



  \def\UFblx@refsectioncont@i[#1]{%an adapted version of \blx@refsection@i
  \endgroup
  \ifcsdef{refsection@label@\csuse{UF@refsectioncont@name}@num}%
  {\blx@maxsection=\numexpr\csname refsection@label@\csuse{UF@refsectioncont@name}@num\endcsname\relax}%
  {\PackageWarning{test}{refsection \UF@refsectioncont@name\space unknown, using refsection 0}{}%
   \blx@maxsection=0
  }%
  \xifinlist{\the\c@refsection}\blx@allrefsections
    {}
    {\listxadd\blx@allrefsections{\the\c@refsection}}%
  \ifcsdef{blx@defaultrefcontexts@\the\c@refsection}
    {}
    {\global\cslet{blx@defaultrefcontexts@\the\c@refsection}\@empty}%
  \ifcsdef{blx@maxsegment@\the\c@refsection}{}%
  {\expandafter\newcount\csname blx@maxsegment@\the\c@refsection\endcsname}%
  \ifcsdef{blx@sectionciteorder@\the\c@refsection}{}%
  {\expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
  \global\c@refsection\blx@maxsection
  \blx@inf@refsec
  \blx@secinit
  \if@filesw
    \blx@auxwrite\@mainaux{}{%
      \string\abx@aux@refsection{\the\c@refsection}{\the\c@page}}%
    \ifblank{#1}
      {}
      {\let\blx@bibfiles\@empty
       % globals should be first as it might contain macros needed for others
       \forlistloop{\listadd\blx@bibfiles}\blx@bibfiles@global}%
       \blx@xsanitizeafter{\forcsvlist\blx@refsection@addfile}{#1}%
    \blx@refsection@ii
  \fi
  \endgroup}%

\ExplSyntaxOn
\tl_new:N\l_UFbbx_tmp_biblist_tl

\keys_define:nn {UFbbx}
 {
  name    .tl_set:N = {\UF@refsectioncont@name},
 }

\newenvironment{splitrefsection}[1][]%[2][]
{\keys_set_known:nnN {UFbbx} {#1} \l_UFbbx_tmp_biblist_tl
 %a hook
 \csname UFblx@splitrefsection@\csuse{UF@refsectioncont@name}@inithook\endcsname
 %test if new name
 \ifcsdef{refsection@label@\csuse{UF@refsectioncont@name}@num}
  {%continue known refsection
   \let\blx@refsection@i\UFblx@refsectioncont@i
   \expandafter\refsection\expandafter[\l_UFbbx_tmp_biblist_tl]
  }
  {%new labeled refsection:
   \expandafter\refsection\expandafter[\l_UFbbx_tmp_biblist_tl]
   \UFblx@labelrefsection{\UF@refsectioncont@name}
  }
 }
 {\endrefsection}

\ExplSyntaxOff

\NewDocumentCommand\splitrefcite {r<> o o m}
 {\begin{splitrefsection}[name=#1]%
  \let\mkbibbrackets\mkbibparens
  \IfNoValueTF{#3}
   {\IfNoValueTF{#2}
    {\cite{#4}}
    {\cite[#2]{#4}}}
    {\cite[#2][#3]{#4}}%
  \end{splitrefsection}}


\DeclareMultiCiteCommand{\@splitrefcites}[\@splitrefwrapper]{\cite}{\multicitedelim}
\newcommand\@splitrefwrapper{}

\NewDocumentCommand\splitrefcites {r<>}
 {\renewcommand\@splitrefwrapper[1]{\begin{splitrefsection}[name=#1]\mkbibparens{##1}\end{splitrefsection}}%
  \@splitrefcites}


%for the example cites are in parens in splitref.
\splitrefinit{myrefsec}{\let\mkbibbrackets\mkbibparens}
\makeatother

\begin{document}
\cite{shore,sarfraz,spiegelberg}

\splitrefcite<related>{spiegelberg,springer}

\printbibliography[title=Main List]

\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\printbibliography[section=\getrefsection{related},title=Related Documents]
\end{document}    

insira a descrição da imagem aqui

informação relacionada