2

I'm trying to make a direct citation on my text, where I need only the first letter of the author's name to be capitalized.

For some reason natbib's \Citet (with capital C) does not capitalize the first letter of the in-text citation, hence \citet and \Citet have the exact same output:

Current scenario

\citet[p. 32]{Christensen1997} --> CHRISTENSEN (1997, p. 32)    
\Citet[p. 32]{Christensen1997} --> CHRISTENSEN (2013, p. 32)

Intended output

\Citet[p.32]{Christensen1997} --> Christensen (1997, p. 32)

Please note that this has to be true also when I don't add the page number:

\Citet{Christensen1997} --> Christensen (1997)

Here's the entry on my .bib file

@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}
}

The bibliography style I'm using is ABNT (link)

Please let me know if you need more info. Thanks!

1

You can change line 383 of abnt.bst, inside the function format.family.names, from

        "u" change.case$

to

        "t" change.case$

This will change the string used in citation commands, but not affect the printing the bibliography. The "u" made the sting upper case; "t" will make it title case.

Sample output

\documentclass{article}

\usepackage{natbib}
\bibliographystyle{abnt}

\begin{document}

\citet{Christensen1997}

\Citet{Christensen1997}

\bibliography{\jobname.bib}

\end{document}

If you use the \citeauthor* command you should make a similar change to the function format.family.names.all.

Depending on your actual requirements, you might prefer to make the string lowercase using "l" instead of "t". Then \citet will give the name in lower case and \Citet will have the first letter capitalised.

0

There are a couple of name formatting commands in lines 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
}

I do not really know the .bst language, but I think just removing the change.case$ commands may solve your problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.