Sign up ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

This question already has an answer here:

How can I create a newcommand that automictically capitalises the first letter, when the command is used after a full stop (or question mark, exclamation mark, etc.)?

\newcommand{\tinycommand}{tiny command}

The desired input:

This is some text and a \tinycommand. This is some text. \tinycommand.

The desired result:

This is some text and a tiny command. This is some text. Tiny command.

share|improve this question

marked as duplicate by Andrew, Jubobs, darthbith, egreg macros Jun 15 at 13:08

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

You can not use _ in command names/ – David Carlisle Apr 17 '13 at 12:14
Either stringstrings or titlecaps packages may give you some tools to work with. – Steven B. Segletes Apr 17 '13 at 12:16
@StevenB.Segletes; A search for titlecaps on CTAN gives nill results. A link to more info, please. – Johan_E Apr 17 '13 at 12:26
@DavidCarlisle : thanks. I edited the question accordingly. – ClintEastwood Apr 17 '13 at 12:38
@Johan_E The package was just uploaded last week. Perhaps it is not yet installed at CTAN. – Steven B. Segletes Apr 17 '13 at 12:51

1 Answer 1

up vote 16 down vote accepted

enter image description here

\newcommand{\tinycommand}{\hmm{t}iny command}

\newcommand\hmm[1]{\ifnum\ifhmode\spacefactor\else2000\fi>1000 \uppercase{#1}\else#1\fi}


The desired input:

This is some text and a \tinycommand. This is some text. \tinycommand.


If you use \frenchspacing then you would need

\def\frenchspacing{\sfcode`\.1001 \sfcode`\?1001 \sfcode`\!1001
  \sfcode`\:1001 \sfcode`\;1001 \sfcode`\,1001 }

So that end of sentence is flagged but the change of spacing won't be noticeable.

csquotes has its own french spacing values, from csquotes.sty


so a value of greater than 1005 is end of sentence, so you just need to adjust the values


   % \def\frenchspacing{\sfcode`\.1001 \sfcode`\?1001 \sfcode`\!1001 \sfcode`\:1000 \sfcode`\;1000 \sfcode`\,1000 }  % autocapitalise auch mit frenchspacing
\frenchspacing                  % remove extra space after punctuation
\newcommand{\tinycommand}{\hmm{t}iny command}

\newcommand\hmm[1]{\ifnum\ifhmode\spacefactor\else2000\fi>1005 \uppercase{#1}\else#1\fi}


The desired input:

This is some text and a \tinycommand. This is some text. \tinycommand. And, \tinycommand. 
And; \tinycommand.
\textquote{And;} \tinycommand.

share|improve this answer
Nice “hack”... But it doesn’t work with \frenchspacing... – Johan_E Apr 17 '13 at 12:22
@Johan_E It would work if you used almost frenchspacing that set the spacefactor codes to 1001 which will not make a visible difference to the space but would enable end of sentence to be triggered. – David Carlisle Apr 17 '13 at 12:25
@Johan_E code updated for frenchspacing case – David Carlisle Apr 17 '13 at 12:28
\tinicommand. placed in the beginning of a new paragraph gives Improper spacefactor error. – g.kov Apr 17 '13 at 14:15
@ClintEastwood \makeatletter \let\old@footnotetext\@footnotetext \long\def\@footnotetext#1{\old@footnotetext{\spacefactor1001 #1}} \makeatother – David Carlisle Sep 2 '13 at 19:56

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