[texhax] detect characters in strings

Brandon Kuczenski brandon at 301south.net
Wed Jul 7 19:59:46 CEST 2010


On Wed, 7 Jul 2010, Uwe Lueck wrote:

> Brandon Kuczenski <brandon at 301south.net>, 07.07.2010 13:58:08:
>> Say I have a macro \mymacro which expands to a number, like
>> '0.00346'.  Due to circumstances beyond my control, this macro sometimes
>> contains something unsightly, like '3.46e-03', which causes later commands
>> (in fp.sty) to barf.
>>
>> Is there a way I can detect an 'e' in a macro expansion?
>
> 1. see substr.sty,
>
>    http://ctan.org/pkg/substr,
>
> some enhanced documentation is
>
>    http://tug.ctan.org/tex-archive/macros/latex/contrib/nicetext/demo/substr.pdf
>

This looks really nice!

At least my urgent problem is solved-- the numbers that happen to come up 
in scientific notation are all very small and I'm now replacing them with 
zero for the time being.  But ultimately I want to convert them to fixed 
point.  I'd like to use \BeforeSubString and \BehindSubString, except I 
can't figure out how to use them:

\BeforeSubString{substring}{string} "Returns" the part of <string> that is 
before <substring>-- how does it "return" anything?  The following doesn't 
work:

\def\SciToFP#1#2{%
   \typeout#2
   \def\mantissa{\BeforeSubString{e}{#2}}
   \typeout\mantissa
   % ... do something with mantissa and FP
}

it fails with the error:
! Undefined control sequence.
\su at BeforeSubString #1#2->\def \su at rest
                                         ##1#1##2\@nil 
{##1}\IfSubStringInStr...

I tried with \let too and that didn't work:

\let\mantissa=\BeforeSubString{e}{#2}

gives me
! Argument of \mantissa has an extra }.
<inserted text>
                 \par




Then I have the problem of turning '-06' into '0.000001' which I was going 
to try to do with a \loop statement, but so far THAT doesn't play nice 
with fp either..





> 2. with LaTeX internals \in@, \ifin@:
>
>    \expandafter\in@\expandafter e\expandafter{\mymacro}
>    \ifin at ...\else...\fi
>
> ... these tests are not expandable

My macros have to be expanded since I'm storing the results in an array. 
At the moment, it looks like the right thing for me is to use substring.


> 3. The coolstr package
>
>    http://ctan.org/pkg/coolstr
>
> serves more general purposes regarding numbers.


Some helpful material-- I will study it.

-Brandon


More information about the texhax mailing list