In LaTeX, how do I extract/isolate/determine the first and last characters of a macro argument?
Specifically, in the case I'm dealing with, the argument happens to be a base-10 integer (call it N). One way I can think of for the rightmost digit is to compute N mod 10, and for the leftmost digit to repeatedly divide by 10—except I haven't attempted anything like that yet and I don't know how reasonable that is or even if that is possible in (La)TeX. Extracting the characters as string entities would be fine too; I have no requirement of producing numeric values. (Edit: I forgot to mention earlier that I would prefer the solution to work for arbitrarily large numeric values—or at least up to, say, 7 or 10 digits—which might necessitate a string-base solution rather than a numeric solution.)
Ultimately, I just need the isolated characters in a form that I can compare using if/then constructs, e.g.:
\newcommand{\foo}[2]{%
(something to extract rightmost digit of #1)
(something to extract leftmost digit of #2)
...
\ifthenelse{\rightmost\equal 2}{\kern.02em}{}%
\ifthenelse{\rightmost\equal 4}{\kern.03em}{}%
\ifthenelse{\rightmost\equal 7}{\kern-.02em}{}%
...
\ifthenelse{\leftmost\equal 1}{\kern.02em}{}%
\ifthenelse{\leftmost\equal 4}{\kern-.03em}{}%
\ifthenelse{\leftmost\equal 5}{\kern.03em}{}%
\ifthenelse{\leftmost\equal 7}{\kern.03em}{}%
...
}
Additional background: This is for fine-tuning the kerning in the numerator and denominator of fractions (related question Improving kerning in fractions).
\let\leftmost\StrLeft{#1}{1}didn't do what I expected! :) – Todd Lehman Feb 02 '12 at 16:38\letis that it stores\StrLeftto\leftmostan ignores{#1}{1}so after that you could say\leftmost{#1}{1}but that doesn’t help ;-) After processing the\letoperation the{#1}{1}is interpreted as more or less normal text and printed out – Tobi Feb 02 '12 at 16:48\StrLeftand\StrRightare\IfBeginWithand\IfEndWith—also part ofstring—they don't require storing the value in a temporary variable. :) – Todd Lehman Feb 02 '12 at 17:27