summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/easyformat
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-06-09 22:29:17 +0000
committerKarl Berry <karl@freefriends.org>2017-06-09 22:29:17 +0000
commitd1f4d483eee9d0c2e75c6915bb559c65992a7cde (patch)
treefc20921ae81d866b0e5f7a9e35ead74befa410ec /Master/texmf-dist/tex/latex/easyformat
parent0e50cfb97606380fc472934646ed8ecb5beffa9f (diff)
easyformat (9jun17)
git-svn-id: svn://tug.org/texlive/trunk@44543 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/easyformat')
-rw-r--r--Master/texmf-dist/tex/latex/easyformat/easyformat.sty299
1 files changed, 132 insertions, 167 deletions
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.