我正在尝试在我的文本上进行直接引用,其中只需要将作者名字的首字母大写。
由于某种原因,natbib的\西岱(大写 C)不将文内引用的首字母大写,因此 \citet 和 \Citet 具有完全相同的输出:
当前情况
\citet[p. 32]{Christensen1997} --> CHRISTENSEN (1997, p. 32)
\Citet[p. 32]{Christensen1997} --> CHRISTENSEN (2013, p. 32)
预期输出
\Citet[p.32]{Christensen1997} --> Christensen (1997, p. 32)
请注意,当我不添加页码时,这也必须正确:
\Citet{Christensen1997} --> Christensen (1997)
这是我的 .bib 文件中的条目
@book{Christensen1997,
address = {Boston},
author = {Christensen, Clayton M},
booktitle = {The management of innovation and change series},
publisher = {Harvard Business School Press},
title = {{The Innovator's Dilemma: When New Technologies Cause Great Firms to Fail}},
year = {1997}
}
我使用的参考书目样式是 ABNT(关联)
如果您需要更多信息,请告诉我。谢谢!
答案1
您可以将函数内部的 abnt.bst 第 383 行format.family.names
从
"u" change.case$
到
"t" change.case$
这将改变引用命令中使用的字符串,但不会影响参考书目中的打印。“u”使字符串变为大写;“t”将使其成为标题大小写。
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{abnt}
\begin{document}
\citet{Christensen1997}
\Citet{Christensen1997}
\bibliography{\jobname.bib}
\end{document}
如果您使用该\citeauthor*
命令,您应该对该功能进行类似的更改format.family.names.all
。
根据您的实际需求,您可能希望使用"l"
而不是将字符串变为小写"t"
。然后\citet
将名称变为小写,\Citet
并将首字母大写。
答案2
319-419 行中有几个名称格式化命令
%==============================================================================
% Formata uma lista de nomes.
%
% Parm:
% os nomes a serem formatados
%==============================================================================
FUNCTION {format.names}
{
duplicate$ num.names$ 'n :=
#1 'i :=
"" 'names :=
{i n #1 + <}
{
duplicate$ duplicate$ i "{ll}{~jj}" format.name$
duplicate$ "others" =
n #3 >
i #2 =
and
or
{
pop$ pop$ names " et~al." *
n 'i :=
}{
"u" change.case$ swap$
i "{, f.}{~vv}" format.name$ *
names swap$ add.to.namelist
} if$ 'names :=
#1 i + 'i :=
} while$
pop$
names
duplicate$ #-1 #1 substring$ "." = {
#-2 global.max$ substring$
"\@." *
}
'skip$
if$
}
%==============================================================================
% Formata uma lista de sobrenomes.
%
% Parm:
% os nomes a serem formatados
%==============================================================================
FUNCTION {format.family.names}
{
duplicate$ num.names$ 'n :=
#1 'i :=
"" 'names :=
{i n #1 + <}
{
duplicate$ i "{ll}{~jj}" format.name$
duplicate$ "others" =
n #3 >
i #2 =
and
or
{
pop$ names " et~al." *
n 'i :=
}{
"u" change.case$
names swap$ add.to.namelist
} if$ 'names :=
#1 i + 'i :=
} while$
pop$
names
}
%==============================================================================
% Formata uma lista de sobrenomes com todos os autores.
%
% Parm:
% os nomes a serem formatados
%==============================================================================
FUNCTION {format.family.names.all}
{
duplicate$ num.names$ 'n :=
#1 'i :=
"" 'names :=
{i n #1 + <}
{
duplicate$ i "{ll}{~jj}" format.name$
duplicate$ "others" =
{
pop$ names " et~al." *
n 'i :=
}{
"u" change.case$
names swap$ add.to.namelist
} if$ 'names :=
#1 i + 'i :=
} while$
pop$
names
}
我不太了解 .bst 语言,但我认为只需删除命令change.case$
就可以解决您的问题。