使用 bibtex 的引用真的很短吗?

使用 bibtex 的引用真的很短吗?

我正在处理一个文档,文档长度限制为 8 页,而且绝对不可能容纳整个引用列表,因此我正在寻找一种方法来在行内添加非常短的引用(即后面没有参考列表)。例如

... this has been studied in (Smith et. al., Phys. Rev. Lett. 100, 123456 (2012)) ...

我对特定风格非常灵活,尽管基于 revtex4 的风格也不错。我的大部分参考资料都是期刊文章,而我手头的几本书,如果这样可以简化事情,我也可以手写。

我正在尝试使用 bibentry 包,但仍然找不到适合我需要的样式。有什么想法吗?例如,当有多个作者、没有名字首字母、没有出版物标题时,我需要“et al”。我需要期刊缩写(虽然我认为这是另一个问题)。

任何帮助都将不胜感激...

谢谢

答案1

这是一个 biblatex 解决方案。它不需要 Biber(当然,它可以与 Biber 配合使用)。它并非旨在成为一个完善的解决方案,例如人们可以将其组合成一个完整的样式:它假设您的要求适用:仅书籍和文章;没有参考书目。它允许您使用\cite\parencite

我不知道该如何处理后记。最后我把它们放在了引文的中间,年份之前。

我不确定如何处理重复引用;事实上,我只是保留了它们,但没有重复年份——因为你试图节省空间!不过,它可能足够简单,你可以相当清楚地了解它在做什么,并自己摆弄细节。

(不要将此视为对此类引用系统的认可!但必须如此,而且这很好地展示了 Biblatex 的灵活性。)

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{smith,
  author = {Smith and others},
  journaltitle = {Phys. Rev. Lett.},
  volume = {100},
  pages  = {123--456},
  date   = {2012},
}
@BOOK{jones,
  author = {Jones, Arthur},
  title  = {Something about physics},
  date   = {2011},
  publisher = {Dont Print Me},
}
\end{filecontents}
\usepackage[style=authoryear, backend=bibtex, citetracker=true]{biblatex}

% For compression, we just give the *first* page of an article
\DeclareFieldFormat{pages}{%
  \mkfirstpage*{#1}}

\renewbibmacro{postnote}{%
  \ifboolexpr{ test {\iffieldundef{postnote}}
               or test {\iftoggle{postnoteprinted}}}
  {}
  {\setunit{\addcomma\space at\space}%
  \ifboolexpr{ test {\iffieldundef{pagination}}
               or test {\iffieldequalstr{pagination}{page}}}
    {\printfield[default]{postnote}}
    {\printfield{postnote}}
 \global\toggletrue{postnoteprinted}}}


\newtoggle{postnoteprinted}


\renewbibmacro*{cite}{%
  \global\togglefalse{postnoteprinted}%
  \iffieldundef{shorthand}
    {\ifboolexpr{ test {\ifentrytype{article}}
                  or test {\ifentrytype{book}} }
     {\DeclareFieldAlias{journaltitle}{default}%
      \usedriver{}{\thefield{entrytype}:abbrv}}
     {{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
        {\usebibmacro{cite:label}%
         \setunit{\addspace}}
        {\printnames{labelname}%
         \setunit{\nameyeardelim}}%
      \usebibmacro{cite:labelyear+extrayear}}}}
    {\usebibmacro{cite:shorthand}}}

\DeclareBibliographyDriver{article:abbrv}{%
  \usebibmacro{begentry}%
  \printnames{labelname}
  \setunit{\addcomma\space}%
  \usebibmacro{journal+issuetitle}%
  \setunit{\addcomma\space}%
  \usebibmacro{note+pages}%
  \usebibmacro{postnote}%
  \setunit{\addspace}%
  \usebibmacro{bracketedyear}%
  \usebibmacro{finentry}}

\DeclareBibliographyDriver{book:abbrv}{%
  \usebibmacro{begentry}%
  \printnames{labelname}%
  \setunit{\addcomma\space}%
  \usebibmacro{maintitle+title}%
  \usebibmacro{postnote}%
  \setunit{\addspace}%
  \usebibmacro{bracketedyear}%
  \usebibmacro{finentry}}

% Always uses parentheses, because that was what the
% example showed. \mkbibparens would be better IMO.
\newbibmacro{bracketedyear}{%
 \ifciteseen
    {}
    {\iffieldundef{year}
    {}
    {\printtext{(\printfield{year})}}}}

\addbibresource{\jobname.bib}
\begin{document}

Parenthetical citation: \parencite{smith}. Repeated \parencite[125]{smith}

Citation to a book: \cite[456]{jones}.

\end{document}

在此处输入图片描述

相关内容