저자의 첫 글자를 대문자로 직접 인용

저자의 첫 글자를 대문자로 직접 인용

내 텍스트를 직접 인용하려고 하는데 저자 이름의 첫 글자만 대문자로 써야 합니다.

어떤 이유로 natbib의\Citet(대문자 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$명령을 제거하면 문제가 해결될 수 있다고 생각합니다.

관련 정보