[XeTeX] Fake italics for some characters only

John Was john.was at ntlworld.com
Wed Dec 5 14:47:13 CET 2018


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.


-----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


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:

  \gdef A{{\fakeslantfont x}}
  \gdef B{{\fakeslantfont y}}

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
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.:

More information about the XeTeX mailing list