[XeTeX] Fake italics for some characters only

John Was johnoxuk at gmail.com
Wed Dec 5 15:47:26 CET 2018


Ah, another quirk of LaTeX.  In plain one just says e.g. (to superimpose
two characters):

\def\overstrike#1#2{\setbox0=\hbox{#1}\setbox1=\hbox{#2}\copy0
   \kern -0.5\wd0 \kern -0.5\wd1 \copy1 \kern -0.5\wd1 \kern 0.5\wd0}

Maybe I'll learn LaTeX in my next life...

Best


John

On Wed, 5 Dec 2018 at 14:18, Zdenek Wagner <zdenek.wagner at gmail.com> wrote:

> Hello,
>
> you need braces around #1, otherwise \textit takes just the first
> token (character) and the rest will remain unchanged.
>
> Zdeněk Wagner
> http://ttsm.icpf.cas.cz/team/wagner.shtml
> http://icebearsoft.euweb.cz
>
> st 5. 12. 2018 v 15:12 odesílatel John Was <john.was at ntlworld.com> napsal:
> >
> > Hello
> >
> > I didn't realize that textit took an argument, but my solution will work
> > (I've used the \ifitalic trick for years for different purposes!), at
> least
> > in plain XeTeX language, if one just adds the argument to the definition:
> >
> > \def\Textit#1{{\italictrue \textit #1}}
> >
> > Anyway, I hope that helps in the search for an elegant solution which
> > doesn't clutter up the input file.
> >
> >
> > John
> >
> > -----Original Message-----
> > From: Zdenek Wagner
> > Sent: Wednesday, December 05, 2018 12:10 PM
> > To: Unicode-based TeX for Mac OS X and other platforms
> > Subject: Re: [XeTeX] Fake italics for some characters only
> >
> > Hi,
> >
> > this will not work. \textit is a macro which requires a parameter,
> > thus \textit} will report an unbalaced brace. Returning to my solution
> > I forgot to write that the active characters must first be defined.
> > You either activate them, define them and then deactivate them which
> > is tedious. It is better to define them inside a group but the
> > definition must be global, it cannot be done with \newcommand. If you
> > define just one character (i.e. A), \gdef is not needed, it can be
> > done by:
> >
> > \begingroup \catcode`\A=13
> > \expandafter\endgroup\expandafter\def\noexpand A{{\fakeslantfont A}}
> >
> > If you need several characters, i.e. A and B, you can either repet the
> > block or do it like that:
> >
> > \begingroup
> > \uccode`\x=A
> > \uccode`\y=B
> > \catcode`\A=13
> > \catcode`\B=13
> > \uppercase{
> >   \gdef A{{\fakeslantfont x}}
> >   \gdef B{{\fakeslantfont y}}
> > }
> > \endgroup
> >
> > Notice that the characters remain inactive, with chategory 11
> > (letter). They will be activated inside a group defined by \mytextit
> > from my previous mail. \mytextit must not have a parameter because
> > once set tha categories cannot be changed (unless you use lua or
> > possibly eTeX). \dotextit will then take the parameter with active A
> > anb B and closes the group so that the categories return to 11. There
> > is no need to use \if.
> >
> > Zdeněk Wagner
> > http://ttsm.icpf.cas.cz/team/wagner.shtml
> > http://icebearsoft.euweb.cz
> > st 5. 12. 2018 v 12:39 odesílatel John Was <john.was at ntlworld.com>
> napsal:
> > >
> > > Hello
> > >
> > > I work in plain XeTeX, but I hope the following will work (and make
> sense)
> > > in XeLaTeX too.
> > >
> > > You could redefine \textit, but to keep things simple, set up a new
> > > command,
> > > say \Textit, and change all occurrences of \textit to \Textit in your
> > > document (or a copy thereof!).
> > >
> > > Thus:
> > >
> > > \def\Textit{{\italictrue \textit}} (double braces to keep things
> local).
> > >
> > > You will also need a new \if:
> > >
> > > \newif\ifitalic
> > >
> > > Now, supposing the character you want to influence as you describe is ć
> > > (Unicode 0107).
> > >
> > > Make that active:
> > >
> > > \catcode"0107=\active
> > > \defć{{\ifitalic  {\fakeslantfont \char"0107} \else \char"0107 \fi}}
> > >
> > >
> > > Obviously, change \fakeslantfont to whatever you have used to define
> the
> > > faked italic font.  Again I have used double {{ }} for safety.
> > >
> > > ć will then appear with artificial slanting whenever it occurs within
> > > \Textit.
> > >
> > > And so on for all the characters to be treated this way.
> > >
> > > (More elegantly, redefine \textit itself but I'm not experienced with
> the
> > > LaTeX \renewcommand etc. features.)
> > >
> > > Hope this helps (and I hope XeTeX picks up on the fact that I'm
> actually
> > > now
> > > at johnoxuk at gmail.com!)
> > >
> > > Best
> > >
> > >
> > > John
> > >
> > >
> > >
> > >
> > > -----Original Message-----
> > > From: Benct Philip Jonsson
> > > Sent: Tuesday, December 04, 2018 7:57 PM
> > > To: xetex at tug.org
> > > Subject: [XeTeX] Fake italics for some characters only
> > >
> > > I have a somewhat unusual problem. In a document produced using
> > > XeLaTeX I need to use four Unicode letters with scarce font
> > > support in italicized words and passages but the font which I have
> > > to use supports these characters only in roman. The obvious
> > > solution is to use the FakeSlant feature of fontspec but I don’t
> > > want to enclose these characters in a command argument, in the
> > > hope that a future version of the document can use an italic font
> > > which supports these characters, but neither do I (perhaps
> > > needless to say) want to use fake italics except for these four
> > > characters. In other words I would like to perform some kind of
> > > “keyhole surgery” in the preamble and use these characters
> > > normally in the body of the document, which I guess means having
> > > to make them active and somehow detect when they are inside the
> > > argument of `\textit`. (Note: it is appropriate to use `\textit`
> > > rather than `\emph` here because the purpose of the italicization
> > > is to mark text as being in an object language in a linguistic
> > > text.) Is that at all possible? I guess I could wrap `\textit` in
> > > a macro which locally redefines the active characters, but I’m not
> > > sure how to do that, nor how to access the glyphs corresponding to
> > > the characters once the characters are active. I am a user who
> > > isn’t afraid of using and making the most of various packages or
> > > of writing an occasional custom command to wrap up some repeatedly
> > > needed operation, but I am no expert. I am aware of all the
> > > arguments against fake italics — that is why I want to limit the
> > > damage as much as possible! — but I have no choice here. Waiting
> > > for the/an appropriate font to include italic versions of these
> > > characters is not an option at the moment.
> > >
> > > /Benct
> > >
> > >
> > >
> > > --------------------------------------------------
> > > Subscriptions, Archive, and List information, etc.:
> > >   http://tug.org/mailman/listinfo/xetex
> > >
> > >
> > >
> > > --------------------------------------------------
> > > Subscriptions, Archive, and List information, etc.:
> > >   http://tug.org/mailman/listinfo/xetex
> >
> >
> >
> > --------------------------------------------------
> > Subscriptions, Archive, and List information, etc.:
> >   http://tug.org/mailman/listinfo/xetex
> >
> >
> >
> > --------------------------------------------------
> > Subscriptions, Archive, and List information, etc.:
> >   http://tug.org/mailman/listinfo/xetex
>
>
>
> --------------------------------------------------
> Subscriptions, Archive, and List information, etc.:
>   http://tug.org/mailman/listinfo/xetex
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://tug.org/pipermail/xetex/attachments/20181205/c31aaf43/attachment-0001.html>


More information about the XeTeX mailing list