summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-05-07 20:02:04 +0000
committerKarl Berry <karl@freefriends.org>2024-05-07 20:02:04 +0000
commita62b77909ea0eb3c53ea2909898a8384f470be3d (patch)
tree4af9ab43149fe9940f0516d90e3d42c4f8587fb7 /Master/texmf-dist/tex/latex
parent5ca0efce6da23cc050495c823bc455d2ff3f623e (diff)
synthslant (7may24)
git-svn-id: svn://tug.org/texlive/trunk@71200 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/synthslant/synthslant.sty306
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'.