Прямая ссылка с заглавной первой буквой имени автора

Прямая ссылка с заглавной первой буквой имени автора

Я пытаюсь сделать прямую ссылку на свой текст, при этом мне нужно, чтобы только первая буква имени автора была заглавной.

По какой-то причине 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$команд может решить вашу проблему.

Связанный контент