著者の最初の文字を大文字にした直接引用

著者の最初の文字を大文字にした直接引用

私は自分のテキストで直接引用をしようとしていますが、著者名の最初の文字だけを大文字にする必要があります。

何らかの理由で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$コマンドを削除するだけで問題が解決すると思います。

関連情報