diff options
author | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
commit | 974640d66e61e81cb197ad96fdff7b08343e4c5a (patch) | |
tree | 2e1f75f32f312b7f24ba82b4590ae230bcd6f399 /Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx | |
parent | b4fa72e61230aca75f7f6fbf988821f71edfb6b2 (diff) |
context
git-svn-id: svn://tug.org/texlive/trunk@58167 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx b/Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx new file mode 100644 index 00000000000..1e30e701264 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/font-emp.mklx @@ -0,0 +1,268 @@ +%D \module +%D [ file=font-emp, +%D version=20120106, % (moved from font-ini) +%D title=\CONTEXT\ Font Macros, +%D subtitle=Emphasis, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Font Macros / Emphasis} + +\unprotect + +%D \macros +%D {em,emphasistypeface,emphasisboldface} +%D +%D The next macro started as a copy of Donald Arseneau's \type {\em} (\TUGNEWS\ +%D Vol.~3, no.~1, 1994). His implementation was a bit more sophisticated version of +%D the standard \LATEX\ one. We further enhanced the macro, so now it also adapts +%D itself to boldface mode. Because we favor {\sl slanted} type over {\it italic}, +%D we made the emphasis adaptable, for instance: +%D +%D \starttyping +%D \def\emphasistypeface {\it} +%D \def\emphasisboldface {\bi} +%D \stoptyping +%D +%D But we prefer: +%D +%D \starttyping +%D \protected\def\emphasistypeface{\sl} +%D \protected\def\emphasisboldface{\bs} +%D \stoptyping +%D +%D or even better: + +\let\m_font_emphasized_typeface\empty + +\def\font_emphasis_checked_typeface#slanted#italic% + {\edef\m_font_emphasized_typeface{\font_bodyfontvariable\s!em}% + \ifx\m_font_emphasized_typeface\v!slanted + #slanted% + \orelse\ifx\m_font_emphasized_typeface\v!italic + #italic% + \orelse\ifempty\m_font_emphasized_typeface + #slanted% + \else + \csname\m_font_emphasized_typeface\endcsname + \fi} + +\permanent\protected\def\emphasistypeface{\font_emphasis_checked_typeface\sl\it} +\permanent\protected\def\emphasisboldface{\font_emphasis_checked_typeface\bs\bi} + +\permanent\protected\def\normalboldface % public + {\relax + \ifx\fontalternative\s!it\bi\orelse + \ifx\fontalternative\s!sl\bs\else + \bf\fi} + +\permanent\protected\def\normalitalicface % public + {\relax + \ifx\fontalternative\s!tf\it\orelse + \ifx\fontalternative\s!bf\bi\else + \tf\fi} + +\permanent\protected\def\normalslantedface % public + {\relax \ifx\fontalternative\s!tf\sl + \orelse\ifx\fontalternative\s!bf\bs + \else \tf\fi} + +\permanent\protected\def\normaltypeface % public + {\relax + \ifx\fontalternative\s!bi \it \orelse + \ifx\fontalternative\s!bs \sl \else + \tf \fi} + +\permanent\protected\def\swaptypeface % public + {\relax + \ifx\fontalternative\s!it \tf \orelse + \ifx\fontalternative\s!sl \tf \orelse + \ifx\fontalternative\s!bf \emphasisboldface \orelse + \ifx\fontalternative\s!bs \bf \orelse + \ifx\fontalternative\s!bi \bf \else + \emphasistypeface \fi} + +\aliased\let\typeface \normaltypeface % public +\aliased\let\boldface \normalboldface % public +\aliased\let\slantedface\normalslantedface % public +\aliased\let\italicface \normalitalicface % public +\aliased\let\swapface \swaptypeface % public + +%D To be set with the default body font environment: \type {em} being \type +%D {slanted} or \type {italic}. + +% maybe a \csname...\fontalternative\endcsname + +\newconditional\c_font_emphasis_needed + +\permanent\protected\def\em + {\relax + \ifdim\slantperpoint>\zeropoint + \settrue\c_font_emphasis_needed + \else + \setfalse\c_font_emphasis_needed + \fi + \font_emphasis_set_emphasis_boldface % new + \ifx\fontalternative\s!it + \enforced\permanent\protected\def\emphasistypeface{\it}\tf + \orelse\ifx\fontalternative\s!sl + \enforced\permanent\protected\def\emphasistypeface{\sl}\tf + \orelse\ifx\fontalternative\s!bf + \emphasisboldface + \orelse\ifx\fontalternative\s!bs + \enforced\permanent\protected\def\emphasisboldface{\bs}\bf + \orelse\ifx\fontalternative\s!bi + \enforced\permanent\protected\def\emphasisboldface{\bi}\bf + \else + \emphasistypeface + \fi + \ifconditional\c_font_emphasis_needed\else + \expandafter\aftergroup + \fi + \emphasiscorrection} + +%D The next feature was not present in previous versions. It takes care of \type +%D {\em \bf ...} situations. + +\let\font_emphasis_saved_emphasis_boldface\relax + +\def\font_emphasis_set_emphasis_boldface + {\let\font_emphasis_saved_emphasis_boldface\bf + \let\font_emphasis_set_emphasis_boldface\relax + \enforced\let\bf\font_emphasis_bold_bold} + +\protected\def\font_emphasis_bold_bold + {%\relax + \enforced\let\bf\relax % new + \ifx\fontalternative\s!it + \bi + \orelse\ifx\fontalternative\s!sl + \bs + \else + \font_emphasis_saved_emphasis_boldface + \fi + \enforced\let\bf\font_emphasis_saved_emphasis_boldface} + +%D Donald's (adapted) macros take the next character into account when placing +%D italic correction. As a bonus we also look for something that looks like a dash, +%D in which case we don't correct. + +\aliased\let\normalitaliccorrection\/ % the tex primitive + +\let\italiccorrection\normalitaliccorrection % will be overloaded + +\permanent\protected\def\emphasiscorrection % public, not in raw alignment groups, else omit problem + {\ifhmode\ifnum\currentgrouptype=\aligngroupcode\else + \expandafter\expandafter\expandafter\font_emphasis_look + \fi\fi} + +\def\font_emphasis_look + {\begingroup + \futurelet\nexttoken\font_emphasis_test} + +\def\font_emphasis_test + {\ifcat\noexpand\nexttoken,% we can do better in luatex ... some day ... + \expandafter\font_emphasis_a + \else + \expandafter\font_emphasis_b + \fi} + +\def\font_emphasis_a + {\futurelet\nexttoken\font_emphasis_correction} + +\def\font_emphasis_correction + {\setbox\scratchbox\hbox{\nexttoken}% tricky as next can be a macro + \ifzeropt\ht\scratchbox % probably a space + \expandafter\font_emphasis_b + \orelse\ifdim\ht\scratchbox<.3\exheight + \expandafter\expandafter\expandafter\endgroup + \else + \expandafter\expandafter\expandafter\font_emphasis_b + \fi} + +\def\font_emphasis_b + {\scratchskip\lastskip + \ifzeropt\scratchskip + \italiccorrection\relax + \else + \unskip\italiccorrection\hskip\scratchskip + \fi + \endgroup} + +%D We end with some examples which show the behavior when some punctuation is met. +%D We also show how the mechanism adapts itself to bold, italic and slanted typing. +%D +%D \startbuffer +%D test {test}test \par +%D test {\sl test}test \par +%D test {\em test}test \par +%D test {\em test}--test \par +%D +%D test {test}, test \par +%D test {\em test}, test \par +%D +%D test {\em test {\em test {\em test} test} test} test \par +%D test {\bf test {\em test {\em test} test} test} test \par +%D test {\sl test {\em test {\em test} test} test} test \par +%D test {\it test {\em test {\em test} test} test} test \par +%D \stopbuffer +%D +%D \typebuffer +%D +%D We get: +%D +%D \startpacked +%D \getbuffer +%D \stoppacked + +%D \macros +%D {emphbf,emphit,emphsl,emphtf} +%D +%D The next emphasis alternatives are for \THANH. They adapt their style as good as +%D possible. These macros are obsolete in \MKIV. + +% \protected\def\emphbf{\groupedcommand{\bf\def\emphit{\bi}\def\emphsl{\bs}}{}} +% \protected\def\emphit{\groupedcommand{\it\def\emphbf{\bi}\def\emphsl{\sl}}{}} +% \protected\def\emphsl{\groupedcommand{\sl\def\emphbf{\bs}\def\emphit{\it}}{}} +% \protected\def\emphtf{\groupedcommand{\tf\def\emphbf{\bf}\def\emphit{\it}\def\emphsl{\sl}}{}} +% \protected\def\emph {\groupedcommand{\em}{}} + + +\permanent\protected\def\font_tf{\tf} \permanent\protected\def\font_bf{\bf} +\permanent\protected\def\font_sl{\sl} \permanent\protected\def\font_bs{\bs} +\permanent\protected\def\font_it{\it} \permanent\protected\def\font_bi{\bi} + +\protected\def\font_emphasis_bf{\bf\enforced\aliased\let\emphit\font_bi + \enforced\aliased\let\emphsl\font_bs} +\protected\def\font_emphasis_it{\it\enforced\aliased\let\emphbf\font_bi + \enforced\aliased\let\emphsl\font_sl} +\protected\def\font_emphasis_sl{\sl\enforced\aliased\let\emphbf\font_bs + \enforced\aliased\let\emphit\font_it} +\protected\def\font_emphasis_tf{\tf\enforced\aliased\let\emphbf\font_bf + \enforced\aliased\let\emphit\font_it + \enforced\aliased\let\emphsl\font_sl} + +\permanent\protected\def\emphbf{\triggergroupedcommandcs\font_emphasis_bf} +\permanent\protected\def\emphit{\triggergroupedcommandcs\font_emphasis_it} +\permanent\protected\def\emphsl{\triggergroupedcommandcs\font_emphasis_sl} +\permanent\protected\def\emphtf{\triggergroupedcommandcs\font_emphasis_tf} +\permanent\protected\def\emph {\triggergroupedcommandcs\em} + +\permanent\protected\def\emphasized{\bgroup\em\let\nexttoken} + +%D \startbuffer +%D TEXT {\emphbf text \emphit text \emphtf text \emphsl text} TEXT +%D TEXT \emphbf{text \emphit{text} \emphtf{text} \emphsl{text}} TEXT +%D \stopbuffer +%D +%D \typebuffer +%D \startlines +%D \getbuffer +%D \stoplines + +\protect \endinput |