
Я пытаюсь сделать прямую ссылку на свой текст, при этом мне нужно, чтобы только первая буква имени автора была заглавной.
По какой-то причине natbib's\Ссылка(с заглавной буквой 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
Вы можете изменить строку 383 abnt.bst внутри функции 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$
команд может решить вашу проблему.