Not quite a generic solution, as it assumes that the first letter is unique in the operator name. The \relax
are perhaps a bit optional I am always confused about when I should put some or not ;-)
\documentclass{amsart}
\usepackage[english,spanish]{babel}
\makeatletter
\newcommand\Max{\@tempcnta=\mathcode`\m\relax
\mathcode`\m=\mathcode`\M\max\mathcode`\m=\@tempcnta\relax}
\makeatother
\begin{document}
\begin{equation*}
\max_0^\infty = \Max_0^\infty \Max\nolimits_0^\infty m M
\end{equation*}
\selectlanguage{english}
\begin{equation*}
\max_0^\infty = \Max_0^\infty \Max\nolimits_0^\infty m M
\end{equation*}
\end{document}
Thanks to egreg for his comment(s). After having temporarily incorporated his simplification (of the code of my initial proposal) to the extension I am now proposing, I now return to the original thing, but also incorporate the later improvements signaled by egreg
.
The same restriction as above applies (the operator name should contain its initial letter only once).
\documentclass{amsart}
\usepackage[english,spanish]{babel}
\pagestyle{empty}
\makeatletter
\def\Tr@nsmogrify#1#2.{\expandafter\newcommand\csname #1#2\endcsname
{\mathchardef\Tr@ns@temp=\mathcode\lccode`#1\relax
\mathcode\lccode`#1=\mathcode`#1\lowercase{\csname#1#2\endcsname}%
\mathcode\lccode`#1=\Tr@ns@temp\relax}}
\@for\x:=Sin,Cos,Max,Min,Lim,Limsup,Liminf,Inf\do{%
\expandafter\Tr@nsmogrify \x.}
\makeatother
\begin{document}
\thispagestyle{empty}
\noindent
\begin{minipage}{.5\linewidth}
\begin{align*}
\min_0^\infty &= \Min_0^\infty\\
\min\nolimits_0^\infty &= \Min\nolimits_0^\infty\\
\max_0^\infty &= \Max_0^\infty\\
\lim_{x\to\infty} &= \Lim_{x\to\infty}\\
\liminf_{x\to\infty} &= \Liminf_{x\to\infty}\\
\limsup_{x\to\infty} &= \Limsup_{x\to\infty}\\
\inf_{x\in A} &= \Inf_{x\in A}\\
\sin^2 x +\cos^2 x &= \Sin^2 x +\Cos^2 x \\
\limsup_{x\to\infty} &= \Limsup_{x\to\infty}\\
m,M,l,L&,s,S,c,C
\end{align*}
\end{minipage}
\begin{minipage}{.5\linewidth}
\selectlanguage{english}%
\begin{align*}
\min_0^\infty &= \Min_0^\infty\\
\min\nolimits_0^\infty &= \Min\nolimits_0^\infty\\
\max_0^\infty &= \Max_0^\infty\\
\lim_{x\to\infty} &= \Lim_{x\to\infty}\\
\liminf_{x\to\infty} &= \Liminf_{x\to\infty}\\
\limsup_{x\to\infty} &= \Limsup_{x\to\infty}\\
\inf_{x\in A} &= \Inf_{x\in A}\\
\sin^2 x +\cos^2 x &= \Sin^2 x +\Cos^2 x \\
\limsup_{x\to\infty} &= \Limsup_{x\to\infty}\\
m,M,l,L&,s,S,c,C
\end{align*}
\end{minipage}
\end{document}
Here is the result:
Addendum:
The above definitions make \Xyzt
behave like \xyzt
with respect to the positions of limits, in inline as well as display style. But there is a difference: \[\sin\limits_a^b\]
or $\sin\limits_a^b$
do not put the a
and b
in limits positions, whereas \[\Sin\limits_a^b\]
and $\Sin\limits_a^b$
do. I would call this an unintended feature rather than a bug! This is illustrated by the following:
Note the asymmetry of behavior of the amsmath
operators \sin
and \min
. Whereas for the first \limits
does nothing, for the second \nolimits
does work. I will not qualify this as a bug of amsmath
(or rather amsopn.sty
), as there must be reasons beyond me, but I had never realized that until now.
PS: obviously the above image comes from a source with \usepackage[spanish]{babel}
but I checked that the exact same behavior is observed without any loading of babel. Note also that \sin
and \min
in amsopn.sty
are not defined via \DeclareMathOperator
, respectively \DeclareMathOperator*
, but only by some part of the code of these macros, but this is another not relevant detail.
PS2: as a matter of fact the [spanish]{babel}
defined operator names behave differently from the analogous amsmath
provided names with respect to limits.
You might do
\newcommand{\ver}[1]{\hat{\mathbf{#1}}}
but the result of \ver{i}
would not be nice, because the i should lose the dot.
\documentclass{article}
\usepackage{amsmath}
\DeclareSymbolFont{mathbf}{OT1}{\familydefault}{\bfdefault}{n}
\DeclareSymbolFontAlphabet{\mathbf}{mathbf}
\DeclareMathSymbol{\boldimath}{\mathord}{mathbf}{"10}
\DeclareMathSymbol{\boldjmath}{\mathord}{mathbf}{"11}
\newcommand{\ver}[1]{% we assume #1 is a single Latin letter
\if#1i%
\hat{\boldimath}%
\else
\if#1j%
\hat{\boldjmath}%
\else
\hat{\mathbf{#1}}%
\fi
\fi
}
\begin{document}
$\ver{a}+\ver{c}+\ver{i}+\ver{j}+\ver{k}+\ver{x}$
\end{document}
A version that also works with Greek letters.
\documentclass{article}
\usepackage{amsmath,bm}
% for the dotless i and j in bold face upright
\DeclareSymbolFont{mathbf}{OT1}{\familydefault}{\bfdefault}{n}
\DeclareSymbolFontAlphabet{\mathbf}{mathbf}
\DeclareMathSymbol{\boldimath}{\mathord}{mathbf}{"10}
\DeclareMathSymbol{\boldjmath}{\mathord}{mathbf}{"11}
\ExplSyntaxOn
\NewDocumentCommand{\ver}{m}
{% Assumption: the argument is
% either a single Latin letter or
% or a single command for a Greek letter
\token_if_cs:NTF #1
{ \hat{\bm{#1}} } % single Greek letter
{% check for i or j
\str_case:nnF { #1 }
{
{i}{\hat{\boldimath}}
{j}{\hat{\boldjmath}}
}
{ \hat{\mathbf{#1}} } % single Latin letter not i nor j
}
}
\ExplSyntaxOff
\begin{document}
$\ver{a}+\ver{c}+\ver{i}+\ver{j}+\ver{k}+\ver{x}+\ver{\alpha}+\ver{\Gamma}$
\end{document}
Remember to add \usepackage{xparse}
if this seems not to work (and update your TeX system).
Best Answer
Here I defined a new operator name using
\DeclareMathOperator{\myRe}{Re}
. Then I used the new operator name in a new command\myReCommand
that has an optional argument. Not sure if that helps.Unrelated to LaTeX, I found this about the notation
\sin^2(t)
. In addition, see here or here for more discussions.