我曾用来makebst.tex
生成与 AGPS v6 匹配的样式(PDF 风格指南简介),但是,我不知道如何获得两种“and”样式的文内引用。使用\citet{}
我想要使用"and"
,但对于\citep{}
我想要"\&"
。
例如
\citet{Smith2014}
:史密斯和亚当斯(2014)
\citep{Smith2014}
:(Smith & Adams 2014)
在我的.bst文件中,我创建了一个新函数bbl.amp
用于"\&"
我的参考列表。
FUNCTION {bbl.amp} { "\&"}
但是,似乎只有一个函数用于文内引用,format.full.names
。
FUNCTION {format.full.names}
{'s :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
"{vv~}{ll}" format.name$
't :=
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{
" " * bbl.etal emphasize *
}
{
numnames #2 >
{ "," * }
'skip$
if$
bbl.and
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
这有点超出我的技能范围。如果我bbl.and
用我的新东西代替bbl.amp
,那么我就会遇到相反的问题,并且"\&"
一直如此。
如能得到任何帮助,我们将不胜感激,欢呼。
答案1
一种可能的解决方案是定义一个新的命令来扩展为\&
或and
取决于它是在\citep
还是在中执行\citep
。
为此,第一步是定义bbl.amp
函数如下:
FUNCTION {bbl.amp}
{ "\protect\myamp "}
\protect\myamp
这会产生在文件中插入适当位置的效果.bbl
,特别是我们需要在用于打印引用的可选参数中\bibitem
使用它。natbib
下一步是确定我们是否处于括号引用中(\citep
)。我们可以使用该etoolbox
包创建一个切换按钮来指示我们处于这种情况。
\newtoggle{myamp}
\preto{\citep}{\toggletrue{myamp}}
myamp
当我们输入括号引用时,上面的第二行将切换设置为true。
最后一步是提供 的定义\myamp
。
\newcommand{\myamp}{%
\iftoggle{myamp}{\&\ }{and }%
}
在定义中我们使用了条件。条件确定切换是否my amp
为真(因此我们处于括号引用中),然后指示打印“&”或“and”。然后我们滥用\setcitestyle
将切换设置为假。
\setcitestyle{open={[},close={]\global\togglefalse{myamp}}}
以下是完整的 MWE 及其示例:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{natbib}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{Goossens1994LaTeX,
author = {Michel Goossens and Frank Mittelbach},
title = {The \LaTeX{} Companion, $2^{nd}$ Edition},
publisher = {Addison-Wesley},
year = {1994},
url = {www.tex.stackexchange.com}
}
@book{Goossens1993LaTeX,
author = {Frank Mittelbach and Michel Goossens},
title = {The \LaTeX{} Companion, $2^{nd}$ Edition},
publisher = {Addison-Wesley},
year = {1993},
url = {www.tex.stackexchange.com}
}
\end{filecontents*}
\newcommand{\myamp}{%
\iftoggle{myamp}{\&\ }{and }%
}
\setcitestyle{open={[},close={]\global\togglefalse{myamp}}}
\newtoggle{myamp}
\preto{\citep}{\toggletrue{myamp}}
\begin{document}
\verb|\citet|: \citet{Goossens1994LaTeX}
\verb|\citep|: \citep{Goossens1994LaTeX,Goossens1993LaTeX}
\verb|\citeauthor|: \citeauthor{Goossens1994LaTeX}
\verb|\citep|: \citep{Goossens1994LaTeX,Goossens1993LaTeX}
\verb|\cite|: \cite{Goossens1994LaTeX,Goossens1993LaTeX}
\verb|\citep*|: \citep*{Goossens1994LaTeX}
\verb|\citeauthor|: \citeauthor{Goossens1994LaTeX}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
输出为: