summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/smart-eqn
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-08-06 21:38:00 +0000
committerKarl Berry <karl@freefriends.org>2021-08-06 21:38:00 +0000
commit13015c16b7f2c43e69a8d5409071f6092e27f0b7 (patch)
tree552b94bd6adfcb85d8f15ad246ee77529d1fe83b /Master/texmf-dist/tex/latex/smart-eqn
parent32cf0b157377d76197f354b2a4ea8ac391122a11 (diff)
smart-eqn (5aug21)
git-svn-id: svn://tug.org/texlive/trunk@60178 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/smart-eqn')
-rw-r--r--Master/texmf-dist/tex/latex/smart-eqn/smart-eqn.sty210
1 files changed, 210 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/smart-eqn/smart-eqn.sty b/Master/texmf-dist/tex/latex/smart-eqn/smart-eqn.sty
new file mode 100644
index 00000000000..d93752ec498
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/smart-eqn/smart-eqn.sty
@@ -0,0 +1,210 @@
+%%
+%% This is file `smart-eqn.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% smart-eqn.dtx (with options: `package')
+%%
+%% This is a generated file. This file is part of the smart-eqn package.
+%%
+%% Copyright (C) 2021 by Ziyue "Alan" Xiang <ziyue.alan.xiang@gmail.com>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3c of this license
+%% 28 or (at your option) any later version. The latest version of this
+%% 29 license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2006/05/20 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesExplPackage{smart-eqn}{08/05/2021}{1.0}{Automatic Math Symbol Styling}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RequirePackage{fancyvrb}
+\RequirePackage{expl3, xparse}
+
+\makeatletter
+\ExplSyntaxOn
+
+\tl_new:N \g_sme_op_arg_tl
+\ior_new:N \g_sme_tmpa_ior
+\iow_new:N \g_sme_tmpa_iow
+\prop_new:N \g_sme_symbols_prop
+\clist_new:N \l_sme_tmpa_clist
+\tl_new:N \l_sme_tmpa_tl
+\tl_new:N \l_sme_tmpb_tl
+\tl_new:N \l_sme_tmpc_tl
+\tl_new:N \l_sme_cur_math_tl
+
+\def\smeDefineVerbatimEnvironment#1#2#3{%
+ \@namedef{#1}{\smeFV@Environment{#3}{#2}}%
+ \@namedef{end#1}{\@nameuse{FVE@#2}}%
+}
+
+\def\smeFV@Environment#1#2{%
+ \def\FV@KeyValues{#1}%
+ \catcode`\^^M=\active
+ \tl_gclear:N \g_sme_op_arg_tl % clear optional arguments from previous calls
+ \@ifnextchar[%
+ {\catcode`\^^M=5 \smeFV@GetKeyValues{\@nameuse{FVB@#2}}}%
+ {\catcode`\^^M=5 \@nameuse{FVB@#2}}}
+
+\def\smeFV@GetKeyValues#1[#2]{%
+ \tl_gset:Nn \g_sme_op_arg_tl {#2}#1}
+
+\cs_set:Npn \sme_declare_math_env:n #1 {
+ \exp_args:Nc \def{sme#1}{\smeFV@Environment{}{sme#1}}
+
+ % this is a modified version of VerbatimOut environment which does not take any argument
+ \exp_args:Nc \def{FVB@sme#1}{%
+ \@bsphack
+ \begingroup
+ \FV@UseKeyValues
+ \FV@DefineWhiteSpace
+ \def\FV@Space{\space}%
+ \FV@DefineTabOut
+ \def\FV@ProcessLine{\immediate\write\FV@OutFile}%
+ \immediate\openout\FV@OutFile \jobname-sme.vrb\relax
+ \let\FV@FontScanPrep\relax
+ %% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
+ \let\@noligs\relax
+ %% DG/SR modification end
+ \FV@Scan}
+
+ \exp_args:Nc\def{FVE@sme#1}{\immediate\closeout\FV@OutFile\endgroup\@esphack
+ % call the function to process the content when the environment ends
+ \sme_read_process_math:n {#1}
+ }
+
+ \smeDefineVerbatimEnvironment{sme#1}{sme#1}{}
+}
+
+\let\smenewenv\sme_declare_math_env:n
+
+\cs_set:Npn \sme_read_process_math:n #1 {
+ \ior_open:Nn \g_sme_tmpa_ior {\jobname-sme.vrb}
+ \iow_open:Nn \g_sme_tmpa_iow {\jobname-sme-in.vrb}
+
+ \iow_now:Nx \g_sme_tmpa_iow {\c_backslash_str begin{#1} \g_sme_op_arg_tl}
+ \ior_map_inline:Nn \g_sme_tmpa_ior {
+ \sme_process_math:n {##1}
+ \exp_args:NNV \iow_now:Nn \g_sme_tmpa_iow \l_sme_cur_math_tl
+ }
+ \iow_now:Nx \g_sme_tmpa_iow {\c_backslash_str end{#1}}
+ \iow_close:N \g_sme_tmpa_iow
+ \ior_close:N \g_sme_tmpa_ior
+ \input{\jobname-sme-in.vrb}
+}
+
+\newcommand{\smesetsym}[2]{
+ \clist_set:Nn \l_sme_tmpa_clist {#2}
+ \clist_map_inline:Nn \l_sme_tmpa_clist {
+ \prop_gput:Nnn \g_sme_symbols_prop {##1} {#1}
+ }
+}
+
+\newcommand{\smeclearsym}{
+ \prop_gclear:N \g_sme_symbols_prop
+}
+
+\newcommand{\smeraw}[1]{#1}
+
+\cs_set:Npn \__sme_grouped:n #1 {
+ \exp_not:n {#1}
+}
+\cs_generate_variant:Nn \__sme_grouped:n {e}
+\cs_generate_variant:Nn \__sme_grouped:n {V}
+
+\cs_set:Npn \sme_construct_bm:Nn #1#2 {
+ \tl_if_head_is_group:nTF {#2} {
+ % if head is group, apply the algorithm recursively
+ %\tl_put_right:Nx #1 {{\tl_head:n {#2}}}
+ \tl_put_right:NV #1 \c_left_brace_str
+ \exp_args:NNx \sme_construct_bm:Nn #1 {\tl_head:n {#2}}
+ \tl_put_right:NV #1 \c_right_brace_str
+ \tl_if_empty:nF {#2} {\exp_args:NNx \sme_construct_bm:Nn #1 {\tl_tail:n {#2}}}
+ }{
+ \tl_if_head_is_space:nTF {#2} {
+ % ignore spaces
+ \exp_args:NNx \sme_construct_bm:Nn #1 {\tl_trim_spaces:n {#2}}
+ } {
+ \tl_if_head_eq_meaning:nNTF {#2} \smeraw {
+ % for \smeraw, ignore the next group
+ \tl_put_right:Nn #1 {\smeraw}
+ \tl_set:Nx \l_sme_tmpa_tl {\tl_tail:n {#2}}
+ \tl_put_right:Nx #1 {\tl_head:N \l_sme_tmpa_tl}
+ \tl_set:Nx \l_sme_tmpa_tl {\tl_tail:N \l_sme_tmpa_tl}
+ \exp_args:NNV \sme_construct_bm:Nn #1 \l_sme_tmpa_tl
+ } {
+ % common case
+ % extract head
+ \exp_args:NNx \prop_get:NnNTF \g_sme_symbols_prop {\tl_head:n {#2}} \l_sme_tmpc_tl {
+ % this symbol needs to be styled
+ \tl_set:No \l_sme_tmpa_tl {\csname\l_sme_tmpc_tl\endcsname}
+ \tl_put_right:Nx \l_sme_tmpa_tl {{\__sme_grouped:e {\tl_head:n {#2}}}}
+ \tl_put_right:Nx #1 {{\__sme_grouped:V \l_sme_tmpa_tl}}
+ } {
+ % otherwise, use the original symbol
+ \tl_put_right:Nx #1 {\tl_head:n {#2}}
+ }
+ \tl_if_empty:nF {#2} {\exp_args:NNx \sme_construct_bm:Nn #1 {\tl_tail:n {#2}}}
+ }
+ }
+ }
+}
+
+\cs_set:Npn \sme_process_math:n #1 {
+ \tl_clear:N \l_sme_cur_math_tl
+ \sme_construct_bm:Nn \l_sme_cur_math_tl {#1}
+}
+
+\begingroup
+\catcode`@=\active
+\gdef\makeatmath{% note the global \gdef
+ \catcode`@=\active
+ \def@##1@{
+ \sme_process_math:n{##1}
+ $\exp_args:NnV \tl_rescan:nn {} \l_sme_cur_math_tl$
+ }%
+}
+\endgroup
+
+\makeatother
+\ExplSyntaxOff
+
+\endinput
+%%
+%% End of file `smart-eqn.sty'.