Is there a way to tell LaTeX to automatically capitalize the first letters of words in chapters and sections?

I imagine something that checks a dictionary for words like for, of, the, in ... and leaves them small (if it's not the first word).

I couldn't find anything on the internet but I think it would be useful, especially for switching between one of the many conventions of capitalization of titles in English to another one.

migrated from stackoverflow.com Jul 19 '11 at 10:22

This question came from our site for professional and enthusiast programmers.


Hows this:


\usepackage{ltxcmds} % get commands: \ltx@empty, \ltx@carzero

\catcode`\@=11 % allow @ to be apart of control sequences

\def\@aaa#1 {\@capital#1 \@bbb}  % Grap word delimited by space and capitalise first char
                                 % (used for first word)

\def\@bbb#1 {\@Capital{#1} \@bbb}% Grap word delimited by space and capitalise first char
                                 % provided its not exempt (used for subsequent words).

\def\:#1\@bbb{}                  % used so we can get a space token at the end of a control sequence,
                                 % and to gobble up all the junk between \: and \bbb inclusive

\def\@capital#1{\uppercase{#1}}  % Capitalises one character.

\def\@Capital#1{%                  Checks whether #1 is exempt and capitalise if not
  \@stripcolon #1\:\ltx@empty%     Make sure that #1 does not have \: appended to end                
    \ifx\@token\ltx@empty%         if no more tokens in exception list
      \let\@result\ltx@carzero%    delete everything up to and including \@nil
      \ifx\@token\@word%           if in exception list
        \let\@result\@check%       check next token in exception list.

\newcommand{\smartuppercase}[1]{\@aaa#1\: }

\catcode`\@=12 % disallow @ to be apart of control sequences


\exempt{the,a,of} %comma separated list of words not to capitalise - no spaces allowed

\smartuppercase{hello people of earth}

\smartuppercase{the people of the earth}


This is something that I wrote these past two days. It seems to do the job. I sure that it will fail if you start hyphenating words, using quotation marks, etc. I'm am sure it can be cleaned up further, but I leave that for someone else.

  • This actually works very good. I combined it with [this suggestion] (tex.stackexchange.com/questions/22980/…) to capitalize the first words of reports, books etc. I just switched the MakeSentenceCase for your smartuppercase. The exclude list you added makes it really versatile. It has worked as expected on everything I tried so far. – niclas ericsson Aug 25 '15 at 21:44

Your Answer

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