[texhax] What's wrong with \catcode`\_=12
Yue Wu
vanopen at gmail.com
Thu Oct 6 15:21:02 CEST 2011
On Thu, Oct 06, 2011 at 12:06:08PM +0200, Heiko Oberdiek wrote:
> On Thu, Oct 06, 2011 at 10:52:43AM +0800, Yue Wu wrote:
>
> > On Thu, Oct 06, 2011 at 02:53:00AM +0200, Heiko Oberdiek wrote:
> > > On Thu, Oct 06, 2011 at 08:29:21AM +0800, Yue Wu wrote:
> > >
> > > > I want to define a macro to let _ can be directly used in it but failed,
> > > > The minimum failed example:
> > > >
> > > > \def\mytest#1{{\chardef\_=95 \catcode`\_=12 #1}}
> > > > \mytest{foo_bar}
>
> > > What's the purpose of "\chardef\_=95"?
> >
> >
> > I want the char `_' to produce a literal `_' as it is, but with the
> > macros following, it will produce a `??'.
> >
> >
> > > That "\_" prints as "_"?
> > >
> > > \def\mytest{%
> > > \begingroup
> > > \catcode`\_=12 %
> > > \mytesti
> > > }
> > > \def\mytesti#1{%
> > > \chardef\_=95 %
> > > #1%
> > > \endgroup
> > > }
> > > \mytest{foo_bar\_bla}
>
> The `_' and `\_' both print the character 95 of the current font
> in the current font encoding. Font encoding T1 works:
>
> \font\eclmr=ec-lmr10
> \eclmr
>
> In OT1 is different, because OT1 is not consistent.
> Typewriter (cmtt) does have the underscore in that position:
>
> \tt
>
> LaTeX users can use \textunderscore:
>
> \documentclass{article}
>
> \begingroup
> \catcode`\_=\active
> \makeatletter
> \@firstofone{%
> \endgroup
> \newcommand*{\mytest}{%
> \begingroup
> \catcode`\_=\active
> \mytest at i
> }%
> \newcommand*{\mytest at i}[1]{%
> \def_{\textunderscore}%
> \def\_{\textunderscore}%
> #1%
> \endgroup
> }%
> }
>
> \begin{document}
> \mytest{foo_bar\_bla}
> \end{document}
>
Thank you for clear explanation, I got it :)
--
Regards,
Yue Wu
Key Laboratory of Modern Chinese Medicines
Department of Traditional Chinese Medicine
China Pharmaceutical University(中國藥科大學)
No.24, Tongjia Xiang Street, Nanjing 210009, China
More information about the texhax
mailing list