diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/synthslant/synthslant.sty | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/synthslant/synthslant.sty b/Master/texmf-dist/tex/latex/synthslant/synthslant.sty new file mode 100644 index 00000000000..0cd75e5e330 --- /dev/null +++ b/Master/texmf-dist/tex/latex/synthslant/synthslant.sty @@ -0,0 +1,306 @@ +%% +%% This is file `synthslant.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% synthslant.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2024 by Ch. L. Spiel +%% +%% This work may be distributed and/or modified under the conditions +%% of the LaTeX Project Public License, either version 1.3 of this +%% license or (at your option) any later version. The latest version +%% of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Ch. L. Spiel. +%% +%% This work consists of the files synthslant.dtx and synthslant.ins +%% and the derived files synthslant.sty, synthslant-gauge.tex, +%% shear-transform.mp, and title.mp. +%% +%% +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{synthslant} + [2024/05/07 v0.1 Synthetically Slant glyphs] + +\RequirePackage{iftex} +\RequirePackage{xkeyval} + +\providecommand*{\synthslant}{.2} +\providecommand*{\synthnegslant}{-.2} + +\def\synthslant@engine{-1} + +\DeclareOptionX{slant}{% + \xdef\synthslant{\fpeval{#1}}% + \xdef\synthnegslant{\fpeval{-(#1)}}} +\DeclareOptionX{negslant}{\xdef\synthnegslant{\fpeval{#1}}} +\DeclareOptionX{posslant}{\xdef\synthslant{\fpeval{#1}}} + +\DeclareOptionX{auto}{\def\synthslant@engine{-1}} +\DeclareOptionX{PDF}{\def\synthslant@engine{0}} +\DeclareOptionX{pdf}{\def\synthslant@engine{0}} +\DeclareOptionX{l3draw}{\def\synthslant@engine{1}} +\DeclareOptionX{ps}{\def\synthslant@engine{2}} +\DeclareOptionX{PS}{\def\synthslant@engine{2}} +\DeclareOptionX{tikz}{\def\synthslant@engine{3}} +\DeclareOptionX{TikZ}{\def\synthslant@engine{3}} +\DeclareOptionX{fontspec}{\def\synthslant@engine{4}} +\DeclareOptionX{disable}{\def\synthslant@engine{10000}} + +\ProcessOptionsX\relax + +\ExplSyntaxOn +\fp_compare:nNnTF {\synthslant} < {.0} + {\PackageError{synthslant}{\string\synthslant\space <\space 0} + {Pass\space a\space value\space that\space is\space non-negative.}} + {} +\fp_compare:nNnTF {\synthnegslant} > {.0} + {\PackageError{synthslant}{\string\synthnegslant\space >\space 0} + {Pass\space a\space value\space that\space is\space non-positive.}} + {} +\ExplSyntaxOff + +\PackageInfo{synthslant}{\string\synthslant=\synthslant} +\PackageInfo{synthslant}{\string\synthnegslant=\synthnegslant} + +\ifnum\synthslant@engine<0 + \PackageInfo{synthslant}{auto-selecting slant engine} + + \ifpdftex + \ifnum\pdfoutput>0 + \def\synthslant@engine{0} + \else + \def\synthslant@engine{1} + \fi + \else + \ifluatex + \def\synthslant@engine{4} + \else + \def\synthslant@engine{1} + \fi + \fi +\fi + +\newcommand*{\synthslant@engine@name}{% + \ifcase\synthslant@engine + PDF% + \or% 1 + l3draw% + \or% 2 + PSTricks% + \or% 3 + TikZ% + \or% 4 + fontspec% + \else + null-implementation% + \fi +} + +\ifcase\synthslant@engine% 0: PDF + \PackageInfo{synthslant}{shearing done by PDF} + + \newbox{\synthslant@box} + + \newcommand*{\synthslant@pdf@shear@box}[2]{% + \mbox{\sbox{\synthslant@box}{#2}% + \hskip\wd\synthslant@box + \pdfsave + \pdfsetmatrix{1 0 #1 1}% + \llap{\usebox{\synthslant@box}}% + \pdfrestore}% + } + + \let\synthslant@shear@box=\synthslant@pdf@shear@box +\or% 1: LaTeX3 draw subsystem + \PackageInfo{synthslant}{shearing delegated to l3draw} + + \RequirePackage{l3draw} + + \ExplSyntaxOn + \NewDocumentCommand{\synthslant@latex@shear@box}{mm}{ + \hbox_set:Nn \l_tmpa_box {#2} + \dim_set:Nn \l_tmpa_dim {\box_wd:N \l_tmpa_box} + \dim_set:Nn \l_tmpb_dim {\box_ht:N \l_tmpa_box} + \draw_begin: + \draw_transform_xslant:n {#1} + \box_set_dp:Nn \l_tmpa_box {\z@} + \fp_compare:nNnTF {#1} >= {.0} + { + \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim - #1\l_tmpb_dim} + } + { + \draw_suspend_begin: + \kern#1\l_tmpb_dim + \draw_suspend_end: + \box_set_wd:Nn \l_tmpa_box {\l_tmpa_dim + #1\l_tmpb_dim} + } + \draw_box_use:N \l_tmpa_box + \draw_end: + } + \ExplSyntaxOff + + \let\synthslant@shear@box=\synthslant@latex@shear@box +\or% 2: PSTricks + \PackageInfo{synthslant} + {shearing deferred to PostScript via PSTricks} + + \RequirePackage{pst-3d}% \pstilt + + \newcommand*{\synthslant@pstricks@shear@box}[2]{% + \pstilt{\fpeval{57.2958 * acos(#1)}}{#2}% + } + + \let\synthslant@shear@box=\synthslant@pstricks@shear@box +\or% 3: TikZ + \PackageInfo{synthslant}{shearing by TikZ} + + \RequirePackage{tikz} + + \newcommand*{\synthslant@tikz@shear@box}[2]{% + \tikz[baseline = (ANCHOR.base), xslant = #1] + \node[inner sep = 0pt, xslant = #1] (ANCHOR) {#2}; + } + + \let\synthslant@shear@box=\synthslant@tikz@shear@box +\or% 4: fontspec + \PackageInfo{synthslant} + {use fontspec's artificial font transformations} + + \RequirePackage{fontspec} + + \ExplSyntaxOn + \newcommand*{\synthslantbox@fontspect@shear@box}[2]{ + \begingroup + \expandafter\fontspec[FakeSlant = #1]{\l_fontspec_family_tl} + #2 + \endgroup + } + \ExplSyntaxOff + + \let\synthslant@shear@box=\synthslantbox@fontspect@shear@box +\else% >=5: Null implementation + \PackageWarning{synthslant}{shearing disabled} + + \newcommand*{\synthslant@identity@shear@box}[2]{#2} + + \let\synthslant@shear@box=\synthslant@identity@shear@box +\fi + +\def\synthslant@nolinebreak{% + \ifnum\synthslant@engine=1% l3draw + \nolinebreak + \else + \ifnum\synthslant@engine=3% TikZ + \nolinebreak + \fi + \fi +} + +\def\synthslantbox@soft@hyphen#1\-#2\relax{% + \synthslant@shear@box{\synthslant@slant@value}{#1}% + \ifx\relax#2% + \relax + \else + \synthslant@nolinebreak + \discretionary{-}{}{}% + \synthslantbox@soft@hyphen#2\relax + \fi +} + +\def\synthslantbox@hard@hyphen#1-#2\relax{% + \synthslantbox@soft@hyphen#1\-\relax + \ifx\relax#2% + \relax + \else + \synthslant@nolinebreak + \synthslant@shear@box{\synthslant@slant@value}{-}% + \synthslant@nolinebreak + \discretionary{}{}{}% + \synthslantbox@hard@hyphen#2\relax + \fi +} + +\def\synthslantbox@space#1 #2\relax{% + \synthslantbox@hard@hyphen#1-\relax + \ifx\relax#2% + \relax + \else + \space + \synthslantbox@space#2\relax + \fi +} + +\ifnum\synthslant@engine=4% fontspec + \newrobustcmd*{\synthslantbox}[2]{% + \edef\synthslant@slant@value{#1}% definition for compatibility of both branches + \synthslantbox@fontspect@shear@box{\synthslant@slant@value}{#2}% + } +\else + \newrobustcmd*{\synthslantbox}[2]{% + \edef\synthslant@slant@value{#1}% + \expandafter\synthslantbox@space#2 \relax\relax + } +\fi + +\newcommand*{\synthslantbox@right@slant@correction}{% + \dimen0=\fontdimen5\font + \kern\synthslant\dimen0\relax +} + +\newcommand*{\slantcontext}{tracking=synthslant} + +\NewDocumentEnvironment{slantenvironment}{} + {\upshape + \ifcsdef{microtypecontext} + {\expandafter\microtypecontext\expandafter{\slantcontext}} + {}} + {\ifcsdef{endmicrotypecontext} + {\endmicrotypecontext} + {}% + \synthslantbox@right@slant@correction} + +\NewDocumentCommand{\textsynthslant}{m} + {\ifmmode + \synthslantbox{\synthslant}{#1}% + \else + {\slantenvironment + \synthslantbox{\synthslant}{#1}% + \endslantenvironment}% + \fi} + +\newcommand*{\synthslantbox@right@negslant@correction}{} + +\newcommand*{\negslantcontext}{tracking=synthnegslant} + +\NewDocumentEnvironment{negslantenvironment}{} + {\itshape + \ifcsdef{microtypecontext} + {\expandafter\microtypecontext\expandafter{\negslantcontext}} + {}} + {\ifcsdef{endmicrotypecontext} + {\endmicrotypecontext} + {}% + \synthslantbox@right@negslant@correction} + +\NewDocumentCommand{\textsynthuprightitalic}{m} + {\ifmmode + \synthslantbox{\synthnegslant}{#1}% + \else + {\negslantenvironment + \synthslantbox{\synthnegslant}{#1}% + \endnegslantenvironment}% + \fi} + +\endinput +%% +%% End of file `synthslant.sty'. |