Take the 2-minute tour ×
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.

My institute's format standards require that author's name in \citet{} citations should appear with first letter in uppercase, whereas in \citep{}, all letter should be in uppercase.

For example: \citet{Wooldridge2002} should give Wooldridge(2002) whereas \citep{Wooldridge2002} should give (WOOLDRIDGE, 2002).

How can I accomplish that? I tried a naive solution with \MakeUppercase, but it didn't worked. See example (\bibitem extracted from .bbl generated from .bib with our style):

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{natbib}

\begin{document}
  I want the first letter of author's name in uppercase here: \citet{Wooldridge2002} (ok).

  I want all letters of author's name in uppercase here: \MakeUppercase\expandafter{\citep{Wooldridge2002}} (not ok).

  \begin{thebibliography}{9}
  \bibitem[Wooldridge(2002)WOOLDRIDGE]{Wooldridge2002} WOOLDRIDGE, M.~J\@.
  \textbf{An Introduction to Multiagent Systems}. Chichester: John Wiley \&
  Sons, 2002.
  \end{thebibliography}
\end{document}

EDIT: I rephrased the paragraphs in the code to reflect better my intentions.

share|improve this question
1  
I think it would take much effort to do this... Why don't simply use \textsc{\citep{Wooldridge2002}} to get it in small caps? –  karlkoeller Sep 6 '13 at 5:50
    
BTW: Welcome to TeX.SX! You can have a look at our starter guide to familiarize yourself further with our format. –  karlkoeller Sep 6 '13 at 5:50
    
This is another case where an ac (all caps) font shape would come very handy. –  egreg Sep 6 '13 at 6:42
    
Your solution worked, @karlkoeller! Very simple and functional. However, I'm using @MBR's answer as a solution because it redefines \citep so that I don't need to add \textsc{...} in all occurrences. –  andertavares Sep 6 '13 at 12:38
add comment

1 Answer

up vote 2 down vote accepted

You can add in your preamble

\makeatletter
\DeclareRobustCommand\citep
   {\begingroup\NAT@swatrue\let\NAT@ctype\z@\NAT@partrue
         \@ifstar{\scshape\NAT@fulltrue\NAT@citetp}{\scshape\NAT@fullfalse\NAT@citetp}}
\makeatother

It simply redefines the \citep command, with extra \scshape to get the name of the authors in uppercase.

share|improve this answer
1  
But is small caps what the OP('s institute) requires? I understood it to be all caps. –  Chris H Sep 6 '13 at 9:55
    
This worked! A little "caveat", however, is that the first letter is slightly bigger than the rest. Thank you very much! –  andertavares Sep 6 '13 at 12:25
    
Unfortunately it is not easy to get all caps. I tried different things (using the TeX command \uppercase as well as the LaTeX macro \MakeUppercase) but couldn't find a way to have it easily in all caps. Problem is that small caps are defined directly by the font (so you can easily switch from normal to small caps font), whereas if you want all caps it is not just a "font flavor" to choose, you have to translate the catcode of each letter in lowercase in uppercase (if I undersand well the behaviour of \uppercase). If I find a way I'll let you know! –  MBR Sep 6 '13 at 12:33
    
Would it be easier to make \citet{} lowercase (except for first letter)? I mean, if the bibitem is like: \bibitem[WOOLDRIDGE(2002)WOOLDRIDGE], then \citep would use the uppercased name, so we would need to change \citet to lowercase it, right? –  andertavares Sep 6 '13 at 12:45
    
To switch from upper to lowercase is as problematic as to switch from lower to uppercase, for the same reason, as far as I understand. David Carlisle could probably give you more insightful details about all that! –  MBR Sep 6 '13 at 12:50
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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