diff options
author | Karl Berry <karl@freefriends.org> | 2020-05-07 21:27:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-05-07 21:27:27 +0000 |
commit | 4f11b4d0bdb77414ff4011c754536656f7708bf0 (patch) | |
tree | 3c118dfe94ed718aa12cd55783b9a69cba86a9bd /Master/texmf-dist/tex/lualatex | |
parent | 5fc116fc34329b711fe6a8a155f71c42a5ff03c7 (diff) |
unitconv (7may20)
git-svn-id: svn://tug.org/texlive/trunk@55060 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/unitconv/unitconv.sty | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/unitconv/unitconv.sty b/Master/texmf-dist/tex/lualatex/unitconv/unitconv.sty new file mode 100644 index 00000000000..9a16dcd2c9f --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/unitconv/unitconv.sty @@ -0,0 +1,128 @@ +%% $Id: unitconv.sty 1177 2020-05-07 15:38:43Z herbert $ +%% +%% This file is distributed under the terms of the LaTeX Project Public +%% License from CTAN archives in directory macros/latex/base/lppl.txt. +%% Either version 1.3 or, at your option, any later version. +%% +% +% Copyright 2020 Herbert Voss hvoss@tug.org +% +\RequirePackage{iftex,xparse,luacode} +\ProvidesPackage{unitconv}[% + 2020/05/07 v. 0.01 (Herbert Voss) Supports unit conversion of a length (only lualatex)] + +\ifluatex +\else + \ExplSyntaxOn + \msg_new:nnn {unitconv} {need-lualatex} + { + The~ unitconv~ package~ requires~ LuaLaTeX.\\\\ + You~ must~ change~ your~ typesetting~ engine~ to,~ + "lualatex" instead~ of~ "latex", ~"pdflatex",~ or~ + "xelatex". + } + \msg_fatal:nn {unitconv} {need-lualatex} + \ExpSyntaxOff + \endinput +\fi + +\newif\ifconv@Scientific + +\providecommand\text{\mbox} + +\begin{luacode} + convList = { ["bp"] = 1.00374, -- 1bp = 1.00374pt + ["cc"] = 12.8401, + ["cm"] = 28.45274, -- 1cm = 28.45274pt + ["dd"] = 1.07, + ["em"] = 10, + ["ex"] = 4.37, + ["in"] = 72.27, + ["km"] = 2.845274e6, + ["m"] = 2845.274, + ["mm"] = 2.84526, + ["mu"] = 0.05554, + ["pc"] = 12.0, + ["pt"] = 1.0, + ["px"] = 1.00374, + ["sp"] = 0.00005 } +\end{luacode} + +\def\convLength{\@ifnextchar*{\global\conv@Scientifictrue\conv@Length}{\global\conv@Scientificfalse\conv@Length*}} +\def\conv@Length*{\@ifnextchar[\convLength@i{\convLength@i[cm]}}% [unit] +\def\convLength@i[#1]{\@ifnextchar[{\convLength@ii[#1]}{\convLength@ii[#1][-1]}} +\def\convLength@ii[#1][#2]#3{\convLen@iii{#3}{#1}{#2}} + +\def\convTeXLength{\@ifnextchar*{\global\conv@Scientifictrue\conv@TeXLength}{\global\conv@Scientificfalse\conv@TeXLength*}} +\def\conv@TeXLength*{\@ifnextchar[\convTeXLength@i{\convTeXLength@i[cm]}}% [unit] +\def\convTeXLength@i[#1]{\@ifnextchar[{\convTeXLength@ii[#1]}{\convTeXLength@ii[#1][-1]}} +\def\convTeXLength@ii[#1][#2]#3{% + \conv@setlength\@tempdima{#3}% + \expandafter\convLen@iii\expandafter{\expandafter\rem@pt\the\@tempdima}{#1}{#2}} + +\def\convLen@iii#1#2#3{% #1 length; #2 unit; #3 decimals + \@ifnextchar[{\convLen@v{#1}{#2}{#3}}{\convLen@iv{#1}{#2}{#3}}} + +\def\convLen@iv#1#2#3{% + \@tempdima=1em \@tempdimb=1ex + \directlua{% + convList["em"]=\strip@pt\@tempdima; + convList["ex"]=\strip@pt\@tempdimb; + convList["mu"]=convList["em"]/18 + }% + \ifconv@Scientific + \luaexec{% + div0 = convList["#2"] + if (#3 < 0) then + tex.print(string.format("\%e",#1/div0)) + else + tex.print(string.format("\%#3e",#1/div0)) + end}% + \else + \luaexec{% + div0 = convList["#2"] + if (#3 < 0) then + tex.print(string.format(#1/div0)) + else + tex.print(string.format("\%.#3f",#1/div0)) + end}% + \fi + \text{\,#2}}% + +\def\convLen@v#1#2#3[#4]{% #1 length; #2 unit; #3 decimals; #4 orig unit + \@tempdima=1em \@tempdimb=1ex + \directlua{convList["em"]=\strip@pt\@tempdima; convList["ex"]=\strip@pt\@tempdimb; convList["mu"]=convList["em"]/18;}% + \ifconv@Scientific + \luaexec{% + divOrig = convList["#4"] + div0 = convList["#2"] + if (#3 < 0) then + tex.print(string.format("\%e",#1*divOrig/div0)) + else + tex.print(string.format("\%#3e",#1*divOrig/div0)) + end}% + \else + \luaexec{% + divOrig = convList["#4"] + div0 = convList["#2"] + if (#3 < 0) then + tex.print(string.format(#1*divOrig/div0)) + else + tex.print(string.format("\%.#3f",#1*divOrig/div0)) + end}% + \fi + \text{\,#2}}% + + +\newdimen\conv@unit \conv@unit 1cm +\def\conv@unit@off{\let\@conv@unit\ignorespaces\ignorespaces} +% +\def\conv@setlength#1#2{% + \let\@conv@unit\conv@unit + \afterassignment\conv@unit@off + #1 #2\@conv@unit% +} + + +\endinput + |