直接引用作者首字母大寫

直接引用作者首字母大寫

我試圖直接引用我的文本,只需將作者姓名的第一個字母大寫即可。

因為某種原因 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$即可解決您的問題。

相關內容