From d1f4d483eee9d0c2e75c6915bb559c65992a7cde Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 9 Jun 2017 22:29:17 +0000 Subject: easyformat (9jun17) git-svn-id: svn://tug.org/texlive/trunk@44543 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/easyformat/easyformat.sty | 299 +++++++++------------ 1 file changed, 132 insertions(+), 167 deletions(-) (limited to 'Master/texmf-dist/tex/latex/easyformat') diff --git a/Master/texmf-dist/tex/latex/easyformat/easyformat.sty b/Master/texmf-dist/tex/latex/easyformat/easyformat.sty index ca3f6db334e..9b8bc4424dd 100644 --- a/Master/texmf-dist/tex/latex/easyformat/easyformat.sty +++ b/Master/texmf-dist/tex/latex/easyformat/easyformat.sty @@ -19,203 +19,168 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% NOTE TO FUTURE: Italics correction works because of \maybe@ic, -% this macro might become \xfss_maybe_ic: in LaTeX3 -% -% In LaTeX3 the `New Font Selection Scheme' is replaced -% by xfss (xfont). Moving will require some research. - - -%% WAIT! This package doesn't use the LaTeX3 naming conventions?! -% Yeah, since we make _ an active character, we can't. Sorry. +%% NOTE TO THE FUTURE: +% In LaTeX3 the `New Font Selection Scheme' is replaced +% by XFSS (xfont). Moving will require some research. %% Administration... -\RequirePackage{expl3}[2015/11/11] +\RequirePackage{expl3}[2016/04/21] \ProvidesExplPackage - {easyformat} - {2017/05/28} - {1.3.0} - {Easily add boldface, italics and smallcaps.} + {easyformat} + {2017/06/03} + {1.4.0} + {Easily add boldface, italics and smallcaps.} %% Public macros % Add macros to switch the syntax on or off. -\cs_new:Npn \setundact { - \char_set_catcode_active:N {\_} -} - -\cs_new:Npn \setundsub { - \char_set_catcode_math_subscript:N {\_} -} - -\cs_new:Npn \setciract { - \char_set_catcode_active:N {\^} -} - -\cs_new:Npn \setcirsup { - \char_set_catcode_math_superscript:N {\^} -} - -\cs_new:Npn \enableeasyformat { - \setundact - \setciract -} - -\cs_new:Npn \disableeasyformat { - \setundsub - \setcirsup -} - -% Add macros which change the fontshape, fontseries and fontfamily. -\cs_new:Npn \setffamily #1 { - \fontfamily{#1} - \selectfont -} - -\cs_new:Npn \setfshape #1 { - \fontshape{#1} - \selectfont -} - -\cs_new:Npn \setfseries #1 { - \fontseries{#1} - \selectfont -} - -% Add some macros which do small parts of what \normalfont does. -% Were needed in v1.1.0 but let's keep them because they are useful :) -\cs_new:Npn \nrfamily { - \setffamily {\familydefault} -} - -\cs_new:Npn \nrshape { - \setfshape {\shapedefault} -} - -\cs_new:Npn \nrseries { - \setfseries {\seriesdefault} -} +\cs_new:Npn \enableeasyformat + { + \char_set_catcode_active:N _ + \char_set_catcode_active:N ^ + } + +\cs_new:Npn \disableeasyformat + { + \char_set_catcode_math_subscript:N _ + \char_set_catcode_math_superscript:N ^ + } % Add a macro LaTeX should have... -% The protected to fix the double superscript error. -\cs_new_protected:Npn \cir {\char_generate:nn {`^} {12}} +% Which is protected to fix the double superscript error +% and able to give correct kerning in mathmode. +\cs_new_protected:Npn \cir + { + \mode_if_math:TF + { \hat{} } + { \c_circumflex_str } + } -%% Constants & Variables -% Yes I could use \sb and \sp but those are dependencies... -\tl_const:Nx \EFOR@subscript {\char_generate:nn {`_} {8}} -\tl_const:Nx \EFOR@superscript {\char_generate:nn {`^} {7}} - +%% Variables % Remember the style before changing to italics/boldface/smallcaps. -\str_new:N \EFOR@prev@shape@it -\str_new:N \EFOR@prev@shape@sc -\str_new:N \EFOR@prev@series@bf -\str_set:Nx \EFOR@prev@shape@it {\shapedefault} % Used by italics. -\str_set:Nx \EFOR@prev@shape@sc {\shapedefault} % Used by smallcaps. -\str_set:Nx \EFOR@prev@series@bf {\seriesdefault} % Used by boldface. +\str_new:N \l__prev_shape_str +\str_set_eq:NN \l__prev_shape_str \shapedefault + +\str_new:N \l__prev_case_str +% Case is the option used in XFSS, however do note that in +% LaTeX2e's NFSS, smallcaps is a kind of shape. +\str_set_eq:NN \l__prev_case_str \shapedefault + +\str_new:N \l__prev_series_str +\str_set_eq:NN \l__prev_series_str \seriesdefault %% Formating handling +% Add macros which change the font shape and font series. +\cs_new:Npn \__font_set_shape:n #1 + { + \fontshape {#1} + \selectfont + } + +\cs_new:Npn \__font_set_series:n #1 + { + \fontseries {#1} + \selectfont + } + % Switch italics on or off. -\cs_new:Npn \EFOR@handle@italics { - \str_if_eq:NNTF \f@shape \itdefault - { - \setfshape {\EFOR@prev@shape@it} - \str_set:Nx \EFOR@prev@shape@it {\shapedefault} - % \maybe@ic adds italics correction if needed. - % (might stop working in LaTeX3?) - \maybe@ic - }{ - \str_set:Nx \EFOR@prev@shape@it {\f@shape} - \itshape - } -} +\cs_new:Npn \__handle_italics: + { + \str_if_eq:NNTF \f@shape \itdefault + { + \__font_set_shape:n {\l__prev_shape_str} + \str_set_eq:NN \l__prev_shape_str \shapedefault + % \maybe@ic adds italics correction if needed. + % Probably becomes \xfss_maybe_ic: in LaTeX3. + \maybe@ic + } + { + \str_set_eq:NN \l__prev_shape_str \f@shape + \itshape + } + } % Switch smallcaps on or off. -\cs_new:Npn \EFOR@handle@smallcaps { - \str_if_eq:NNTF \f@shape \scdefault - { - \setfshape {\EFOR@prev@shape@sc} - \str_set:Nx \EFOR@prev@shape@sc {\shapedefault} - }{ - \str_set:Nx \EFOR@prev@shape@sc {\f@shape} - \scshape - } -} +\cs_new:Npn \__handle_smallcaps: + { + \str_if_eq:NNTF \f@shape \scdefault + { + \__font_set_shape:n {\l__prev_case_str} + \str_set_eq:NN \l__prev_case_str \shapedefault + } + { + \str_set_eq:NN \l__prev_case_str \f@shape + \scshape + } + } % Switch boldface on or off. -\cs_new:Npn \EFOR@handle@boldface { - \str_if_eq:NNTF \f@series \bfdefault - { - \setfseries {\EFOR@prev@series@bf} - \str_set:Nx \EFOR@prev@series@bf {\seriesdefault} - }{ - \str_set:Nx \EFOR@prev@series@bf {\f@series} - \bfseries - } -} - - -%% Aliases fo expl3 -% Make aliases for some LaTeX3 macros as _ isn't allowed later on. -\let\Expl@mode@if@math\mode_if_math:TF -\let\Expl@cs@gset@protected\cs_gset_protected:Npn -\let\Expl@peek@meaning@remove\peek_meaning_remove:NTF - - -%% Activate the systems! +\cs_new:Npn \__handle_boldface: + { + \str_if_eq:NNTF \f@series \bfdefault + { + \__font_set_series:n {\l__prev_series_str} + \str_set_eq:NN \l__prev_series_str \seriesdefault + } + { + \str_set_eq:NN \l__prev_series_str \f@series + \bfseries + } + } + + +%% Handling the syntax +% This is where the magic happens (also differentiates between +% text- and mathmode.) +% These are protected because they should also work in eg. \section{} + +% Syntax handling for the underscore: italics and boldface. +\cs_new_protected:Npn \__syntax_underscore: + { + \mode_if_math:TF + { \c_math_subscript_token } + { + \peek_charcode_remove:NTF _ + % The second underscore is removed when detected. + { \__handle_boldface: } + { \__handle_italics: } + } + } + +% Syntax handling for the circumflex: smallcaps. +\cs_new_protected:Npn \__syntax_circumflex: + { + \mode_if_math:TF + { \c_math_superscript_token } + { \__handle_smallcaps: } + } + +% Now give the underscore and the circumflex their behaviour. +\char_set_active_eq:NN _ \__syntax_underscore: +\char_set_active_eq:NN ^ \__syntax_circumflex: + + +%% Activate the systems. % First disable the Expl3 syntax as it will only cause trouble. \ExplSyntaxOff % Now enable the easyformat syntax. \enableeasyformat -% Now finally add the new syntax in the document part. -\AtBeginDocument{ - % We do not re-enable easyformat here, since that could - % cause unexpected behaviour. We tested if this causes errors. - - % NOTE: for some reason we have to use gset instead of new, no - % idea why though... - - % This is where the magic happens (also differentiates between - % the text and math mode.) - % It is protected because it should work in eg. \section{} - - \Expl@cs@gset@protected_{\Expl@mode@if@math - {\EFOR@subscript} - {\Expl@peek@meaning@remove_ - % The second underscore is removed when true. - {\EFOR@handle@boldface} - {\EFOR@handle@italics}% - }% - } - - \Expl@cs@gset@protected^{\Expl@mode@if@math - {\EFOR@superscript} - {\EFOR@handle@smallcaps}% - } -} - - -%% Cleanup aka: Disable the systems! -\AtEndDocument{ - % Why no \def_\undefined and \def^\undefined? - % Because if we use this syntax in eg. \section{}, - % the macro should still work in the .aux file... - \disableeasyformat -} - - -%% DONE! -% Unfortunately we can't add a \disableeasyformat here, -% since that breaks more stuff than it fixes... +% DONE!!! %% IMPLEMENTATION DETAILS: %% Why not \textit/bf/sc\bgroup and \egroup? % Well actualy that was the original solution. However this % doesn't differentiate between ending itallics or ending -% boldface. The current solution does and this makes the syntax -% more predictable and generally more useful. \ No newline at end of file +% boldface. The current solution does and this makes the +% syntax more predictable and generally more useful. + +%% Why no ^^typewriter^^? +% because this doesn't add much value, in most contexts +% where a monospace font is useful there is already +% other syntax available. -- cgit v1.2.3