格式化引用至:作者

格式化引用至:作者

我正在进行引用,类似于\cite{waseem16}:Waseem 和 Hovy [2016]。

但我想让它看起来像:Wassem and Hovy[WH16]。

我该如何格式化我的引文才能看起来像这样?谢谢

\usepackage{natbib} 
\bibliographystyle{plainnat}

% bibliography is in ``myrefs.bib''
\PrintBib{myrefs}

\newcommand{\PrintBib}[1]{%
\renewcommand{\bibname}{Refer\^{e}ncias}%
\if@numericrefs%
  \bibliographystyle{unsrt-pt}%
\else%
  \if@alpharefs%
    \bibliographystyle{alpha-pt}%
  \else%
    \bibliographystyle{plainnat-pt}%
  \fi%
\fi%
\cleardoublepage%
\phantomsection%
\addcontentsline{toc}{chapter}{Refer\^{e}ncias}%
\begin{singlespace}\bibliography{#1}\end{singlespace}}

以下代码只是 painnat-pt 文件的前面几行:

ENTRY
  { address
    author
    booktitle
    chapter
    doi
    eid
    edition
    editor
    howpublished
    institution
    isbn
    issn
    journal
    key
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
    type
    url
    volume
    year
  }
  {}
  { label extra.label sort.label short.list }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

答案1

您可以编辑为和abbrvnat.bst之间的某种混合。将结果文件另存为。请注意,这只是一个概念证明,它适用于 MWE,但它可能会在任何时候中断。alphaabbrvalphanat.bst

修改内容abbrvnat.bst如下。

  1. 将该函数format.lab.names(标签格式化函数)及其上方的几行(不加修改)复制到,并将alphanat.bst该函数重命名为format.lab.alphanames
INTEGERS { et.al.char.used }

FUNCTION {initialize.et.al.char.used}
{ #0 'et.al.char.used :=
}

EXECUTE {initialize.et.al.char.used}

FUNCTION {format.lab.alphanames}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
        { #3 'namesleft := }
        { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
        { namesleft #0 > }
        { nameptr numnames =
            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                { "{\etalchar{+}}" *
                  #1 'et.al.char.used :=
                }
                { s nameptr "{v{}}{l{}}" format.name$ * }
              if$
            }
            { s nameptr "{v{}}{l{}}" format.name$ * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      numnames #4 >
        { "{\etalchar{+}}" *
          #1 'et.al.char.used :=
        }
        'skip$
      if$
    }
    { s #1 "{v{}}{l{}}" format.name$
      duplicate$ text.length$ #2 <
        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
        'skip$
      if$
    }
  if$
}
  1. 更改函数author.key.label以连接常规标签格式的输出、开括号以及从中复制的函数的输出alpha.bst
FUNCTION {author.key.label}
{ author empty$
    { key empty$
        { cite$ #1 #3 substring$ }
        'key
      if$
    }
    { author format.lab.names "(" * author format.lab.alphanames * }
  if$
}
  1. 在评论中,有人指出另一个文件存在问题.bib,结果发现该解决方案对@book条目不起作用。这些条目调用函数author.editor.key.label而不是author.key.label。因此,该函数也应进行调整,类似于对的修改author.key.label
FUNCTION {author.editor.key.label}
{ author empty$
    { editor empty$
        { key empty$
            { cite$ #1 #3 substring$ }
            'key
          if$
        }
        { editor format.lab.names "(" * editor format.lab.alphanames * }
      if$
    }
    { author format.lab.names "(" * author format.lab.alphanames * }
  if$
}

请注意,对于涉及组织的条目,功能author.key.organization.label和也应进行相应修改。editor.key.organization.label

  1. 修改该函数calc.label以删除括号并仅打印年份的最后两位数字:
FUNCTION {calc.label}
{ calc.short.authors
  short.list
  year #-1 #2 substring$ duplicate$ empty$
  short.list key field.or.null = or
     { pop$ "" }
     'skip$
  if$
  *
  'label :=
}

最后,使用获取方括号的natbib选项进行加载,并加载新样式:squarealphanat

\documentclass{article}
\usepackage[square]{natbib}
\bibliographystyle{alphanat}
\begin{document}
See \cite{waseem16}.

\bibliography{myrefs}
\end{document}

结果:

在此处输入图片描述

编辑:当然,如果关键alpha信息也显示在参考书目本身中,那就太好了。为此,您应该将稍微修改过的函数版本复制到函数format.lab.alphanames上方format.authors大约 250 行的位置(这样修改后的函数在format.authors需要时就会被定义):

FUNCTION {format.lab.anames}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #4 >
        { #3 'namesleft := }
        { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
        { namesleft #0 > }
        { nameptr numnames =
            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                { "+" * }
                { s nameptr "{v{}}{l{}}" format.name$ * }
              if$
            }
            { s nameptr "{v{}}{l{}}" format.name$ * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      numnames #4 >
        { "+" * }
        'skip$
      if$
    }
    { s #1 "{v{}}{l{}}" format.name$
      duplicate$ text.length$ #2 <
        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
        'skip$
      if$
    }
  if$
}

不同之处在于format.lab.alphanames,超过 4 位作者的符号 ( +) 是硬编码的。

然后您可以修改format.authors以使用标签和年份:

FUNCTION {format.authors}
{ author empty$
    { "" }
    { "[" author format.lab.anames * year #-1 #2 substring$ * "] " * author format.names * }
  if$
}

结果:

在此处输入图片描述

请注意,这将是很多使用 BibLaTeX 更容易 - 但使用 BibTeX 问题更有趣:)

相关内容