# How to make contextual framed letters get proportional size automatically?

I am creating a question sheet using a method (I don't know the exact name, maybe bubble sheet format) as follows:

My question is how to improve the appearance such that the framed letters get proportional size based on the context. If the frame letter must work as an exponent, it must be smaller. If it works as a lower index in integral or sum, it also must be smaller.

Here is my code snippet after "normalization" :-)

\documentclass[dvipsnames,dvips,cmyk]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{bera}

\fboxsep=2pt
\fboxrule=0.8pt

\newcommand{\boxy}[1]{\ensuremath{\,\fbox{\;\,{\color{red}\bf#1}\,\;}\,}}

\newcommand{\ltr}[1]{{\color{red}\bf#1}}

\begin{document}
\noindent%
Each letter \ltr{A}, \ltr{B}, \ltr{C}, etc in the equations represents a numeral (from 0 to 9) or the minus sign ($-$).

$\int_{\boxy{A}}^{\boxy{B}}f(x)\,\textrm{d}x=\frac{1-\boxy{P}}{\boxy{Q}+\boxy{R}}$

$-2 x^{\boxy{XYZ}}-\boxy{W}\sqrt{\boxy{V}+1}$

$\sum_{i=\boxy{A}}^{\boxy{BC}}=\tan\left(\boxy{D}-\boxy{E}\right)$
\end{document}


use the \text command, it takes the correct font setting:

\documentclass{article}
\usepackage{xcolor}
\usepackage{amsmath}
\fboxsep=2pt
\fboxrule=0.8pt

\newcommand\boxy[1]{\text{\,\fbox{\;\,{\color{red}$\mathbf{#1}$}\,\;}\,}}

\newcommand{\ltr}[1]{{\color{red}\bf#1}}

\begin{document}
\noindent%
Each letter \ltr{A}, \ltr{B}, \ltr{C}, etc in the equations
represents a numeral (from 0 to 9) or the minus sign ($-$).
%
$\int\limits_{\boxy{A}}^{\boxy{B}}f(x)\,\textrm{d}x=\frac{1-\boxy{P}}{\boxy{Q}+\boxy{R}}$
%
$-2 x^{\boxy{XYZ}}-\boxy{W}\sqrt{\boxy{V}+1}$
%
$\sum_{i=\boxy{A}}^{\boxy{BC}}=\tan\left(\boxy{D}-\boxy{E}\right)$
\end{document}

• Wow, I'm surprised! Why does this work? Commented Dec 28, 2010 at 8:58
• @Hendrik: \text expands to \text@ which expands to a \mathchoice which uses \everymath to set the appropriate style.
– TH.
Commented Dec 28, 2010 at 9:03
• @Hendrik: it uses the definitions from mathcoice: \let\f@size#2\selectfont
– user2478
Commented Dec 28, 2010 at 9:18
• @TH.: Ah, \everymath is something I'm not well-acquainted with. No wonder I didn't get it. Commented Dec 28, 2010 at 9:41
• thanks for giving me the simplest or most compact (hopely) solution. Commented Dec 28, 2010 at 10:11

You'll want to use \mathpalette: Replace your definition of \boxy with

\makeatletter
\newcommand{\boxy}[1]{\ensuremath{\mathpalette\boxy@helper{#1}}}
\newcommand{\boxy@helper}[2]{\,\fbox{\;\,{\color{red}$\m@th#1\mathbf{#2}$}\,\;}\,}
\makeatother


Note that I made another change to your macro: I use \$s and \mathbf in the \fbox, and I added \m@th to ensure that you don't get additional horizontal space.

• Might be worth adding \m@th as well.
– TH.
Commented Dec 28, 2010 at 8:34
• @TH.: Thanks! Hope that what I wrote is correct. Commented Dec 28, 2010 at 8:52
• thanks for the solution. Even though your solution and Herbert's work, Herbert's is simpler than yours. So I choose Herbert's. :-) Commented Dec 28, 2010 at 10:10
• @xport: Good choice! Commented Dec 28, 2010 at 10:12