我正在进行引用,类似于\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,但它可能会在任何时候中断。alpha
abbrv
alphanat.bst
修改内容abbrvnat.bst
如下。
- 将该函数
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$
}
- 更改函数
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$
}
- 在评论中,有人指出另一个文件存在问题
.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
- 修改该函数
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
选项进行加载,并加载新样式:square
alphanat
\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 问题更有趣:)