# Redefining a command and special character

I am trying to redefine \v command (wedge above character) to do what \vec does in mathmode and preserve \v in a command called, say \hac. This code works perfect

\documentclass{article}
\let\hac\v%
\renewcommand{\v}[1]{\ensuremath{\vec{#1}}}%
\begin{document}
line 1: š č ř

line 2: \hac{s} \hac{c} \hac{r} \v{s} \v{c} \v{r}
\end{document}


(line 1 does not print ''š č ř'' as it does not recognize the characters). However, when I add

 \usepackage[cp1250]{inputenc}%


into the preamble, the first line prints ''s c r'' with a \vec over them. I do not understand where this behaviour is coming from and how to fix it. (Line 2 is always correct, first ''s c r'' is with a wedge and the second is with a \vec). Can anyone please explain?

Alternative way to achieve what I am trying to achieve is to find out syntax of the \v command. I did this using \showcmd in show2e package, finding ''> \v=macro: ->\OT1-cmd \v \OT1\v . \v '', but do not understand the syntax.

Thank you, J

• š is defined in cp1250 encoding to be \v s so if you redefine \v you redefine š. – David Carlisle Jul 28 '14 at 14:03
• Welcome to TeX.SX! You have discovered why redefining commands, especially those for accents, is dangerous. ;-) – egreg Jul 28 '14 at 14:03

š is defined in cp1250 encoding (and other encodings) to be \v s so if you redefine \v you redefine š. Redefining a core LaTeX command like \v is unlikely to be worth the effort, it makes your document fragments incompatible with every other LaTeX setup unless you redefine all of LaTeX's accent and encoding support not to use \v.
You can just redefine \v to be \vec in math mode, but stay the original \v in text mode. That way you don't have the portability problems the others mentioned.
\let\textv\v

• This is fantastic, thank you. Could you explain how it works? I've never seen the command \TextOrMath before. Also, it seems that it does not work if \vec is replaced with a more complex expression. – pglpm May 29 at 7:07