8

I'm working on a paper that deals with foreign words and a lot of diacritics. To help with this, I've created a series of macros, so that if I write \wufen it comes out as "wǔfēn". Usually this is mid-sentence, so that's fine. However in a few cases, I've got the following:

\begin{enumerate}
    \item \wufen something something
    \item Something \wufen something...
\end{enumerate}

Is there a way to force \items to always capitalise the first letter? I want to see this as the result of the above:


Wǔfēn something something

• Something wǔfēn something...


Is this possible?

I'm relatively new to LaTeX so apologies if this is a terrible question. I'm honestly not too clear on what I should be searching for, though past attempts haven't produced anything yet.

5
  • 6
    Why not make uppercase versions of your macros? \Wufen etc. and use these.
    – Alan Munn
    Nov 28, 2013 at 12:41
  • Why not to use unicode and get rid of these macros? /holding the AGAINST MACROS FOR WORDS sign very high...
    – yo'
    Nov 28, 2013 at 14:01
  • 3
    @tohecz if you plan on saying that often you could use \def\amfw{AGAINST MACROS FOR WORDS} :-) Nov 28, 2013 at 14:07
  • @DavidCarlisle As a person who often reads code of others: no, never!
    – yo'
    Nov 28, 2013 at 14:17
  • @AlanMunn It kinda defeats the purpose of the shorthand then. What I'm hoping to be able to do is change all cases of the macro once, so maybe before I finish, I decide I want "wǔfen" to be "wuufen", and I only have to change it in one place. In this case the macro is for reflecting a word under a certain romanisation system and I'd like to be able to switch systems without too much trouble.
    – Yhilan
    Mar 4, 2014 at 6:54

2 Answers 2

12

Please always post complete documents, not just fragments.

enter image description here

TeX is in vertical mode at that point, so you can do:

\documentclass{article}

\newcommand\wufen{\ifvmode W\else w\fi ufen}

\begin{document}

\begin{enumerate}
    \item \wufen\ something something
    \item Something \wufen\ something...
\end{enumerate}

\end{document}
6
  • +1 so kool! Would \ifvmode\expandafter\uppercase\fi wufen work?
    – yo'
    Nov 28, 2013 at 13:59
  • 2
    @tohecz no because uppercase needs explict {} but you don't need the \expandafter either so you can do \newcommand\wufen{\ifvmode \uppercase\else \lowercase\fi {w}ufen} if you want. (you need the lowercase to remove the {} so as not to break any inter-letter kerns. Nov 28, 2013 at 14:02
  • ok, so \MakeUppercase ...
    – yo'
    Nov 28, 2013 at 14:03
  • @tohecz \MakeUppercase wufen produces {W}ufen so would break any kern between W and u Nov 28, 2013 at 14:05
  • damn, always problems. Seems that your original one is the best. I only don't like the fact that you have to seperate the first letter of the word...
    – yo'
    Nov 28, 2013 at 15:09
5

Personally I would use uppercase versions of the macros as suggested in the comments. However, if you want to do it automatically, you could use the command \capitalize from the stringstrings package.

MWE:

\documentclass{article}

\usepackage{stringstrings}
\newcommand{\citem}{\item \capitalize}

\newcommand{\abc}{abcdefghijklmnopqrstuvwxyz} % A simple macro

\begin{document}

\begin{enumerate}
    \item Abc % for comparison
    \citem abc % capitalize 
    \citem Abc % no effect if already capitalized
    \citem \abc % works for simple macros
\end{enumerate}

\end{document
2
  • If you wanted something that works for "complicated macros", go for {\item\expandafter\uppercase} or {\item\expandafter\capitalize}. However, your current approach kills the optional argument to \item.
    – yo'
    Nov 28, 2013 at 13:58
  • @tohecz: I fully agree. To save the optional argument one could do something like \newcommand{\citem}[1][\stepcounter{enumi}\labelenumi]{\item[#1] \capitalize}, which is quite messy. Hence +1 for David Carlisle's elegant solution.
    – crixstox
    Nov 28, 2013 at 14:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .