\cite 包含大量 citekeys

\cite 包含大量 citekeys

我的 latex 文档有一个 .sty 文件,我在其中创建了参考书目类别(见下文 [1])。我的文档中有以下几行,它起作用了:

\addtocategory{papers}{sushil}   

但这样一来,我必须手动为大量文章添加 citekey。因此,有人建议我使用这个:

\AtEveryCitekey{%
   \ifentrytype{article}{%
     \iffieldundef{journaltitle}{%
       \addtocategory{subpapers}{\thefield{entrykey}}%
       }{%
         \addtocategory{papers}{\thefield{entrykey}}%
       }{%
           }%
       } 
  }      

我猜想这是一样的,但会自动执行。但如果我不使用,这种情况就不会起作用,\cite{sushil}这又让我想到了我必须手动为大量文章添加 citekeys 的同一点。我以为这可以工作,但我的文件中\nocite{*}已经有了。\nocite{*}.sty

有人知道如何解决这个问题吗?我不想手动添加那么多 citekey,因为这很耗时。


[1]

来自我的.sty文件:

% Bibliography categories
\def\makebibcategory#1#2{\DeclareBibliographyCategory{#1}\defbibheading{#1}{\section*{#2}}}
\makebibcategory{papers}{Refereed Research Papers}
\makebibcategory{subpapers}{Submitted Papers to Journals and arXiv}


\setlength{\bibitemsep}{2.65pt}
\setlength{\bibhang}{.8cm}
\renewcommand{\bibfont}{\small}

\renewcommand*{\bibitem}{\addtocounter{papers}{1}\item \mbox{}\hskip-0.85cm\hbox to 0.85cm{\hfill\arabic{papers}.~~}}
\defbibenvironment{bibliography}
{\list{}
  {\setlength{\leftmargin}{\bibhang}%
   \setlength{\itemsep}{\bibitemsep}%
   \setlength{\parsep}{\bibparsep}}}
{\endlist}
{\bibitem}

\newenvironment{publications}{\section{\LARGE Publications}\label{papersstart}\vspace*{0.2cm}\small
\titlespacing{\section}{0pt}{1.5ex}{1ex}\itemsep=0.00cm
}{\label{papersend}\addtocounter{sumpapers}{-1}\refstepcounter{sumpapers}\label{sumpapers}}

\def\printbib#1{\printbibliography[category=#1,heading=#1]\lastref{sumpapers}}

答案1

确保您使用 biber 作为后端,然后您可以通过将其放入 biber.cfg 中来自动添加它,因为 biber 会读取您的 .bib 文件:

<sourcemap>
  <maps datatype="bibtex">
    <map final="true">
      <per_type>ARTICLE</per_type>
      <map_step map_field_source="JOURNAL/>
      <map_step map_field_set="KEYWORDS" map_field_value="subpapers"/>
    </map>
    <map>
      <per_type>ARTICLE</per_type>
      <map_step map_field_set="KEYWORDS" map_field_value="subpapers"/>
    </map>
  </maps>
</sourcemap>

或者,如果您使用的是 biblatex 2.0 和 biber 1.0 betas,您也可以在序言中针对每个文档执行此操作:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{article}
      \step[fieldsource=journal, final=true]
      \step[fieldset=keywords, fieldvalue={papers}]
    }
    \map{
      \pertype{article}
      \step[fieldset=keywords, fieldvalue={subpapers}]
    }
  }
}

\printbibliography[keyword=papers]然后您可以简单地使用“等”来过滤关键字。

答案2

如果你愿意向 bib 文件添加一些额外的信息,你可以添加一个entrysubtype带有 papers\subpapers 的字段。然后\nocite{*}加上\printbibliography[subtype=papers]或可能更容易\printbibliography[notsubtype=subpapers]

答案3

不,我有这个例子,我想以自动方式将 citekeys 添加到 \cite{} 命令中,而不是手动输入。因为我正在处理 bib 文件中的 500 多个条目,手动添加它们很困难。


\documentclass{article}

\usepackage[defernumbers=true]{biblatex}

\DeclareBibliographyCategory{articlepublished}
\DeclareBibliographyCategory{articleunpublished}

\AtEveryCitekey{%
  \ifentrytype{article}{%
    \iffieldundef{journaltitle}{%
      \addtocategory{articleunpublished}{\thefield{entrykey}}%
    }{%
      \addtocategory{articlepublished}{\thefield{entrykey}}%
    }%
  }{%
  }%
}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{AX12,
      author         = "Authors1",
      title          = "{Ttile of articles}",
      collaboration  = "Collaboration",
      year           = "2012",
}
@article{AY11,
      author         = "Authors2",
      title          = "{Ttile of articles}",
      collaboration  = "Collaboration",
      year           = "2011",
      journal        = "Phys.Lett.",  
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\cite{AX12,AY11}

\printbibliography[category=articlepublished,title={Published Articles}]

\printbibliography[category=articleunpublished,title={Unpublished Articles}]

\end{document}

相关内容