Created
August 7, 2022 16:36
-
-
Save zr-tex8r/d9cbbfa2faf54a02cc80c44445a98152 to your computer and use it in GitHub Desktop.
新しい画期的なLaTeX実装⛄
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| \input sclatex | |
| \dump |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| %% | |
| %% This is file 'sclatex.tex'. | |
| %% | |
| %% Copyright (c) 2022 Takayuki YATO (aka. "ZR") | |
| %% GitHub: https://github.com/zr-tex8r | |
| %% Twitter: @zr_tex8r | |
| %% | |
| %% This package is distributed under the MIT License. | |
| %% | |
| % | |
| %--------------------------------------- prologue | |
| % | |
| %% avoid multiple loading | |
| \csname\if11sclxLoaded\fi\endcsname% | |
| \let\sclxLoaded\endinput% | |
| % | |
| %% check current format | |
| \chardef\sclxEqCC\catcode61\catcode61\catcode48% | |
| \chardef\sclxSpCC\catcode32\catcode32=10\relax% | |
| \chardef\sclxFormat=0 % unknown | |
| \ifnum\catcode35=12 \ifnum\catcode123=12 \ifnum\catcode125=12 % | |
| \chardef\sclxFormat=1 % iniTeX | |
| \fi\fi\fi% | |
| \ifnum\catcode35=6 \ifnum\catcode123=1 \ifnum\catcode125=2 % | |
| \def\sclxTempA{plain}\ifx\fmtname\sclxTempA% | |
| \chardef\sclxFormat=2 % plain | |
| \fi% | |
| % but \fmtname of plain (u)pTeX is weird... | |
| \def\sclxTempA{ptex}\ifx\fmtname\sclxTempA% | |
| \chardef\sclxFormat=2 % | |
| \fi% | |
| \def\sclxTempA{uptex}\ifx\fmtname\sclxTempA% | |
| \chardef\sclxFormat=2 % | |
| \fi% | |
| \fi\fi\fi% | |
| \ifnum\sclxFormat=0 % quit when format is unknown | |
| \begingroup \catcode123=1 \catcode125=2 \catcode58=12 % | |
| \errhelp{This is fatal error. Process is aborted.}% | |
| \errmessage{scLaTeX Error: Unsupported format}% | |
| \endgroup% | |
| \catcode61\sclxEqCC \catcode32\sclxSpCC% | |
| \sclxLoaded\fi\relax% | |
| % | |
| % when in INI-mode, load plain.tex | |
| \ifnum\sclxFormat=1 % | |
| \endlinechar=13 \catcode13=5 % | |
| \chardef\sclxEqCC=12 \chardef\sclxSpCC=10 % don't restore | |
| \input plain % | |
| \fi% | |
| % | |
| % code guards | |
| \edef\sclxTempA{% | |
| \catcode61=\the\sclxEqCC% | |
| \catcode32=\the\sclxSpCC% | |
| \catcode13=\the\catcode13% | |
| \catcode33=\the\catcode33% | |
| \catcode34=\the\catcode34% | |
| \catcode39=\the\catcode39% | |
| \catcode40=\the\catcode40% | |
| \catcode41=\the\catcode41% | |
| \catcode42=\the\catcode42% | |
| \catcode43=\the\catcode43% | |
| \catcode45=\the\catcode45% | |
| \catcode46=\the\catcode46% | |
| \catcode47=\the\catcode47% | |
| \catcode58=\the\catcode58% | |
| \catcode59=\the\catcode59% | |
| \catcode60=\the\catcode60% | |
| \catcode62=\the\catcode62% | |
| \catcode63=\the\catcode63% | |
| \catcode64=\the\catcode64% | |
| \catcode91=\the\catcode91% | |
| \catcode93=\the\catcode93% | |
| \catcode94=\the\catcode94% | |
| \catcode96=\the\catcode96% | |
| \catcode124=\the\catcode124% | |
| \endlinechar=\the\endlinechar% | |
| \relax}% | |
| \catcode13=5 \endlinechar=13 % | |
| \catcode33=12 % <!> | |
| \catcode34=12 % <"> | |
| \catcode39=12 % <'> | |
| \catcode40=12 % <(> | |
| \catcode41=12 % <)> | |
| \catcode42=12 % <*> | |
| \catcode43=12 % <+> | |
| \catcode45=12 % <-> | |
| \catcode46=12 % <.> | |
| \catcode47=12 % </> | |
| \catcode58=12 % <:> | |
| \catcode59=12 % <;> | |
| \catcode60=12 % <<> | |
| \catcode62=12 % <>> | |
| \catcode63=12 % <?> | |
| \catcode64=11 % <@> | |
| \catcode91=12 % <[> | |
| \catcode93=12 % <]> | |
| \catcode94=7 % <^> | |
| \catcode96=12 % <`> | |
| \catcode124=12 % <|> | |
| \let\sclx@restore@codes\sclxTempA | |
| \let\sclxTempA\relax | |
| %% declarations | |
| \def\sclxFmtName{scLaTeX} | |
| \def\sclxFmtVersion{2022-08-08} | |
| \ifx\bxDebug\@undefined \long\def\bxDebug#1{} \fi | |
| \def\sclx@debug#1{\bxDebug{\sclxFmtName> #1}} | |
| %--------------------------------------- job start-up | |
| %% \sclx@show@banner | |
| \edef\sclx@show@banner{% | |
| \immediate\write128{\sclxFmtName\space<\sclxFmtVersion>}% | |
| } | |
| %% show the banner | |
| \ifnum\sclxFormat=1 % iniTeX | |
| \everyjob\expandafter{\the\everyjob\sclx@show@banner} | |
| \fi | |
| \sclx@show@banner | |
| %--------------------------------------- general | |
| %% layout parameters | |
| \let\sclxDVIDriver\relax | |
| \newdimen\sclxPaperWidth | |
| \newdimen\sclxPaperHeight | |
| \newcount\sclxColumnCount | |
| \def\sclxMufflerColor{red,blue} | |
| %% packages | |
| \input ifluatex.sty | |
| \input ifpdf.sty | |
| \input infwarerr.sty | |
| \input kvdefinekeys.sty | |
| \input kvsetkeys.sty | |
| \input ltxcmds.sty | |
| %% unique tokens | |
| \def\sclx@end{\sclx@end@} | |
| \let\sclx@mk\indent % unexpandable | |
| %% variables | |
| \newif\ifsclx@ok | |
| \newif\ifsclx@process@ok | |
| \newif\ifsclx@landscape | |
| \newif\ifsclx@meta@column@count | |
| \newcount\sclx@cnta | |
| \newcount\sclx@cntb | |
| \let\sclx@driver\relax | |
| \let\sclx@option@list\relax | |
| \let\sclx@class@name\relax | |
| \let\sclx@metadata\relax | |
| %% \sclx@org@end : primitive '\end' | |
| \let\sclx@org@end\end | |
| %% \sclx@typeout{<message>} | |
| % NB. \typeout is equated to it if undefined. | |
| \def\sclx@typeout#1{% | |
| \begingroup | |
| \immediate\write\sclx@term{#1}% | |
| \endgroup | |
| } | |
| \chardef\sclx@term=\ifluatex 128 \else 16 \fi | |
| \ifx\typeout\@undefined | |
| \let\typeout\sclx@typeout | |
| \fi | |
| %% \sclx@cond\ifXXX...\fi{<true>}{<false>} | |
| \ltx@gobbletwo\if\if \def\sclx@cond#1\fi{% | |
| #1\expandafter\ltx@firstoftwo\else\expandafter\ltx@secondoftwo\fi | |
| } | |
| %% \sclx@check@same@str{<str1>}{<str2>} | |
| % Sets switch sclx@ok. | |
| \def\sclx@check@same@str#1#2{% | |
| \sclx@okfalse | |
| \begingroup | |
| \edef\sclx@next{#1}\edef\sclx@next{\meaning\sclx@next}% | |
| \edef\sclx@tmpa{#2}\edef\sclx@tmpa{\meaning\sclx@tmpa}% | |
| \ifx\sclx@next\sclx@tmpa \aftergroup\sclx@oktrue \fi | |
| \endgroup | |
| } | |
| %% \sclx@check@primitive\CS | |
| % Sets switch sclx@ok. | |
| \def\sclx@check@primitive#1{% | |
| \sclx@okfalse | |
| \begingroup | |
| \edef\sclx@tmpa{\meaning#1}\edef\sclx@tmpb{\string#1}% | |
| \ifx\sclx@tmpa\sclx@tmpb \aftergroup\sclx@oktrue \fi | |
| \endgroup | |
| } | |
| %% \sclx@exit | |
| % Stops reading this file. | |
| % For safety it should be used either as: | |
| % \sclx@exit% | |
| % \sclx@exit\fi% | |
| \def\sclx@exit{% | |
| \sclxLoaded | |
| \sclx@restore@codes | |
| } | |
| %--------------------------------------- error messages | |
| %% \sclx@cute@oops / \sclx@shrieks | |
| \begingroup | |
| \def\do#1{\catcode`#1=12\relax}\def\nxt{\gdef\sclx@shrieks} | |
| \catcode`\^^?=14 \catcode`\^^\=0 \catcode`\^^[=1 \catcode`\^^]=2 | |
| \endlinechar=10 \catcode10=12 \catcode96=7 | |
| \dospecials``\gdef``\sclx@cute@oops``[``? | |
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
| ! ____ | |
| ! ___HHHH _____ ``\sclxFmtName ERROR! | |
| ! / . . \ |Oops!| Something is wrong! | |
| ! \ --- / |~~~~~ | |
| ! V :#######: Y | |
| ! \/ o*"*\/ | |
| ! { o } | |
| ! \_______/ Cheers!!``]``\nxt``[``? | |
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!``]``? | |
| ``\endgroup% NICE! | |
| %% \sclx@error{<message>}{<help>} | |
| \def\sclx@error#1#2{% | |
| \InfWarErr@GenericError | |
| {\space\@spaces\@spaces\@spaces\@spaces}% | |
| {\sclxFmtName\space Error: #1\sclx@error@a}% | |
| {\empty\sclx@cute@oops\sclx@error@b}% | |
| {#2}% | |
| } | |
| \def\sclx@error@a#1\empty{.^^J} | |
| \def\sclx@error@b#1...{^^J\sclx@shrieks} | |
| %% \sclx@fatal@error{<message>} | |
| \def\sclx@fatal@error#1{% | |
| \sclx@error{#1}% | |
| {This is fatal error. Process is aborted.}% | |
| \sclx@process@okfalse | |
| } | |
| %% \sclx@panic{<message>} | |
| \def\sclx@panic#1{% | |
| \sclx@error{#1}% | |
| {This is fatal error. The current job is aborted.}% | |
| \sclx@org@end | |
| } | |
| %% \sclx@warning{<message>} | |
| \def\sclx@warning#1{% | |
| \InfWarErr@GenericWarning | |
| {\space\@spaces\@spaces\@spaces\@spaces}% | |
| {\sclxFmtName\space Warning: #1}% | |
| } | |
| %% \sclx@warning@no@line{<message>} | |
| \def\sclx@warning@no@line#1{% | |
| \sclx@warning{#1\@gobble}% | |
| } | |
| %% \sclx@info{<message>} | |
| \def\sclx@info#1{% | |
| \InfWarErr@GenericInfo | |
| {\space\space\@spaces\@spaces\@spaces}% | |
| {\sclxFmtName\space Info: #1}% | |
| } | |
| %% \sclx@info@no@line{<message>} | |
| \def\sclx@info@no@line#1{% | |
| \sclx@info{#1\@gobble}% | |
| } | |
| %--------------------------------------- driver settings | |
| %% driver constants | |
| \chardef\sclx@driver@@unknown=0 | |
| \chardef\sclx@driver@@dvips=1 | |
| \chardef\sclx@driver@@dvipdfmx=2 | |
| \chardef\sclx@driver@@xetex=3 | |
| \chardef\sclx@driver@@pdftex=4 | |
| \chardef\sclx@driver@@luatex=5 | |
| %% \sclx@driver@name{<driver>} | |
| \def\sclx@driver@name#1{% | |
| \ifcase#1unknown% | |
| \or dvips% | |
| \or dvipdfmx% | |
| \or xetex% | |
| \or pdftex% | |
| \or luatex% | |
| \fi | |
| } | |
| %% \sclx@dvidriver@list | |
| \def\sclx@dvidriver@list{% | |
| \do{dvips}% | |
| \do{xdvi}% | |
| \do{dviout}% | |
| \do{dvipdfmx}% | |
| \do{dvipdfm}% | |
| } | |
| %% DVI-driver constants | |
| \chardef\sclx@dvidriver@@dvips=\sclx@driver@@dvips | |
| \chardef\sclx@dvidriver@@xdvi=\sclx@driver@@dvips | |
| \chardef\sclx@dvidriver@@dviout=\sclx@driver@@dvips | |
| \chardef\sclx@dvidriver@@dvipdfmx=\sclx@driver@@dvipdfmx | |
| \chardef\sclx@dvidriver@@dvipdfm=\sclx@driver@@dvipdfmx | |
| %% \sclx@dvidriver@default | |
| \def\sclx@dvidriver@default{dvips} | |
| %% \sclx@set@papersize | |
| \let\sclx@set@papersize\relax | |
| %% \sclx@set@papersize@inner | |
| \let\sclx@set@papersize@inner\relax | |
| %% check engine types | |
| % Here \sclx@driver is (tentatively) set to \sclx@driver@@dvips | |
| % when the engine is in normal DVI mode. | |
| \sclx@check@primitive\eTeXversion\ifsclx@ok\else | |
| % e-TeX is required (because TikZ needs it) | |
| \sclx@fatal@error | |
| {The TeX engine in use is not supported} | |
| \sclx@exit\fi% | |
| %---- Now e-TeX features can be used freely. | |
| \let\sclx@driver\sclx@driver@@unknown | |
| \ifpdf % in PDF-mode | |
| \let\sclx@driver\sclx@driver@@pdftex | |
| \ifluatex | |
| \let\sclx@driver\sclx@driver@@luatex | |
| \fi | |
| \fi | |
| \ifnum\sclx@driver=\sclx@driver@@unknown % not in PDF-mode | |
| \let\sclx@driver\sclx@driver@@dvips | |
| \sclx@check@primitive\XeTeXversion\ifsclx@ok | |
| \let\sclx@driver\sclx@driver@@xetex | |
| \fi | |
| \fi | |
| % check for unsupported engines | |
| \sclx@check@primitive\VTeXversion\ifsclx@ok | |
| \let\sclx@driver\sclx@driver@@unknown | |
| \fi | |
| \sclx@check@primitive\HINTversion\ifsclx@ok | |
| \let\sclx@driver\sclx@driver@@unknown | |
| \fi | |
| \sclx@debug{check engine: type=\the\sclx@driver} | |
| \ifnum\sclx@driver=\sclx@driver@@unknown | |
| \sclx@fatal@error | |
| {The TeX engine in use is not supported}% | |
| \sclx@exit\fi% | |
| %%<+> \sclxSetupDriver | |
| \def\sclxSetupDriver{% | |
| \global\let\sclxSetupDriver\relax | |
| % re-set \sclx@driver according to \sclxDVIDriver | |
| \sclx@process@oktrue | |
| \if \ifnum\sclx@driver=\sclx@driver@@dvips F% | |
| \else\ifx\sclxDVIDriver\relax F% | |
| \else T\fi\fi T% | |
| \sclx@fatal@error | |
| {A driver option is used on the wrong engine:\MessageBreak | |
| \space\space\sclxDVIDriver}% | |
| \let\sclxDVIDriver\relax | |
| \fi | |
| \ifsclx@process@ok \ifnum\sclx@driver=\sclx@driver@@dvips | |
| \ifx\sclxDVIDriver\relax | |
| \let\sclxDVIDriver\sclx@dvidriver@default | |
| \fi | |
| \lettocs\sclx@tmpa{sclx@dvidriver@@\sclxDVIDriver}% | |
| \ifdefined\sclx@tmpa | |
| \let\sclx@driver\sclx@tmpa | |
| \else % unknown name | |
| \sclx@fatal@error | |
| {An unknown driver name is given:\MessageBreak | |
| \space\space\sclxDVIDriver}% | |
| \fi | |
| \fi\fi | |
| \ifsclx@process@ok | |
| \sclx@debug{driver: \sclx@driver@name\sclx@driver}% | |
| % load TikZ | |
| \edef\pgfsysdriver{pgfsys-\sclx@driver@name\sclx@driver.def}% | |
| \sclx@suppress@newwrite | |
| \input tikz.tex\relax | |
| \sclx@unsuppress@newwrite | |
| % enable papersize setter | |
| \ifdefined\pdfpagewidth \ifdefined\pdfpageheight | |
| \def\sclx@set@papersize{% | |
| \pdfpagewidth=\sclxPaperWidth | |
| \pdfpageheight=\sclxPaperHeight | |
| }% | |
| \fi\fi | |
| \ifdefined\pagewidth \ifdefined\pageheight | |
| \def\sclx@set@papersize{% | |
| \pagewidth=\sclxPaperWidth | |
| \pageheight=\sclxPaperHeight | |
| }% | |
| \fi\fi | |
| \unless\ifx\sclxDVIDriver\relax | |
| \def\sclx@set@papersize@inner{% | |
| \special{papersize=\the\sclxPaperWidth,\the\sclxPaperHeight}% | |
| }% | |
| \fi | |
| \fi | |
| } | |
| %--------------------------------------- general (e-TeX) | |
| %% packages | |
| \input texapi | |
| %% \sclx@provide{<definer>}\CS | |
| % Defines a stuff only when it is undefined. | |
| \def\sclx@provide#1#2{% | |
| \ifcommand#2{#1\sclx@next}{#1#2}% | |
| } | |
| %--------------------------------------- generate document | |
| %% parameters | |
| \def\sclxMinPaperEdge{32mm} | |
| \def\sclxMinBodyEdge{60mm} | |
| \def\sclxMaxMargin{20mm} | |
| \def\sclxColumnRuleWidth{1pt} | |
| \def\sclxColumnRuleColor{black!40} | |
| \def\sclxEssentialRatio{0.85} | |
| %% variables | |
| \newdimen\sclx@col@width | |
| \newdimen\sclx@col@height | |
| \newdimen\sclx@hmargin | |
| \newdimen\sclx@vmargin | |
| \newdimen\sclx@ess@size | |
| \let\sclx@color@count\relax | |
| %\[sclx@color/<idx>] | |
| %% errors | |
| \def\sclx@error@too@small#1{% | |
| \sclx@fatal@error | |
| {The #1 is too small}% | |
| } | |
| \def\sclx@error@no@colors{% | |
| \sclx@fatal@error | |
| {No color is specified}% | |
| } | |
| %%<+> \sclxWriteDocument | |
| \def\sclxWriteDocument{% | |
| \sclxSetupDriver | |
| \ifsclx@process@ok % if not ok then do nothing | |
| \sclx@set@layout | |
| \fi | |
| \ifsclx@process@ok | |
| \begingroup | |
| \sclx@set@papersize | |
| \shipout\vbox{% | |
| \sclx@set@papersize@inner | |
| \vskip-1in | |
| \moveleft1in\vbox{% | |
| \sclx@essential@page | |
| }% | |
| }% | |
| \endgroup | |
| \fi | |
| } | |
| %% \sclx@set@layout | |
| \def\sclx@set@layout{% | |
| \ifnum\sclxColumnCount<1 | |
| \sclxColumnCount=1 | |
| \else\ifnum\sclxColumnCount>8 | |
| \sclxColumnCount=8 | |
| \fi\fi | |
| \ifdim\sclxPaperWidth<\sclxMinPaperEdge\relax | |
| \sclx@error@too@small{paper width}% | |
| \sclxPaperWidth=\sclxMinPaperEdge\relax | |
| \fi | |
| \ifdim\sclxPaperHeight<\sclxMinPaperEdge\relax | |
| \sclx@error@too@small{paper height}% | |
| \sclxPaperHeight=\sclxMinPaperEdge\relax | |
| \fi | |
| \sclx@set@layout@a\sclxPaperWidth\sclx@col@width\sclx@hmargin{width}% | |
| \divide\sclx@col@width\sclxColumnCount | |
| \sclx@set@layout@a\sclxPaperHeight\sclx@col@height\sclx@vmargin{height}% | |
| \ifdim\sclx@col@width>\sclx@col@height | |
| \sclx@ess@size=\sclxEssentialRatio\sclx@col@height | |
| \else | |
| \sclx@ess@size=\sclxEssentialRatio\sclx@col@width | |
| \fi | |
| \sclx@debug{column-width: \the\sclx@col@width}% | |
| \sclx@debug{essential-size: \the\sclx@ess@size}% | |
| % colors | |
| \sclx@cnta=0 | |
| \edef\sclx@tmpa{\sclxMufflerColor,}% | |
| \passexpanded\sclx@set@layout@b\sclx@tmpa | |
| \ifnum\sclx@cnta=0 | |
| \sclx@error@no@colors | |
| \fi | |
| \chardef\sclx@color@count\sclx@cnta | |
| \sclx@debug{color-count: \the\sclx@color@count}% | |
| } | |
| \def\sclx@set@layout@a#1#2#3#4{% | |
| \ifdim#1<\sclxMinBodyEdge\relax | |
| #3=0pt #2=#1\relax | |
| \else | |
| #2=\sclxMinBodyEdge #3=.5\dimexpr#1-#2\relax | |
| \ifdim#3>\sclxMaxMargin\relax | |
| #3=\sclxMaxMargin #2=\dimexpr#1-2#3\relax | |
| \fi | |
| \fi | |
| \sclx@debug{#4: paper=\the#1; body=\the#2; margin=\the#3}% | |
| } | |
| \newfor\sclx@set@layout@b#1,{% | |
| \ltx@ifblank{#1}{}{%else | |
| \edefcs{sclx@color/\the\sclx@cnta}{\trim{#1}}% | |
| \advance\sclx@cnta1 | |
| }% | |
| \sclx@cond\ifnum\sclxColumnCount=\sclx@cnta\fi{\breakfor{}}% | |
| } | |
| %% \sclx@essential@page | |
| \def\sclx@essential@page{% | |
| \vskip\sclx@vmargin | |
| \hbox{\hskip\sclx@hmargin | |
| \sclx@cnta=0 | |
| \count@=\sclxColumnCount\relax | |
| \loop\ifnum\count@>0 | |
| \begingroup | |
| \passexpandedcs\sclx@essential@box{sclx@color/\the\sclx@cnta}% | |
| \endgroup | |
| \advance\count@-1 | |
| \ifnum\count@>0 | |
| \dimen@\sclxColumnRuleWidth\relax | |
| \kern-.5\dimen@ | |
| \begingroup | |
| \color{\sclxColumnRuleColor}% | |
| \vrule width\dimen@ height\sclx@col@height depth\z@ | |
| \endgroup | |
| \kern-.5\dimen@ | |
| \fi | |
| \advance\sclx@cnta1 | |
| \ifnum\sclx@color@count=\sclx@cnta \sclx@cnta=0 \fi | |
| \repeat | |
| }% | |
| } | |
| %% \sclx@essential@box{<color>} | |
| \def\sclx@essential@box#1{% | |
| \sclx@debug{essential: muffler=#1}% | |
| \vbox to \sclx@col@height{% | |
| \vskip 0pt plus 2fil\relax | |
| \hbox to \sclx@col@width{% | |
| \hfil \sclxDrawEssential{\sclx@ess@size}{#1}\hfil | |
| }% | |
| \vskip 0pt plus 3fil\relax | |
| }% | |
| } | |
| %--------------------------------------- PGF hacks | |
| %% \sclx@suppress@newwrite | |
| \def\sclx@suppress@newwrite{% | |
| \letcstocs{sclx@saved@newwrite}{newwrite}% | |
| \letcstocs{newwrite}{sclx@noop@newwrite}% | |
| \letcstocs{sclx@saved@openout}{openout}% | |
| \letcstocs{openout}{sclx@noop@openout}% | |
| } | |
| %% \sclx@unsuppress@newwrite | |
| \def\sclx@unsuppress@newwrite{% | |
| \letcstocs{newwrite}{sclx@saved@newwrite}% | |
| \letcstocs{openout}{sclx@saved@openout}% | |
| } | |
| %% \sclx@noop@newwrite | |
| \def\sclx@noop@newwrite#1{% | |
| \let#1\ltx@minusone | |
| } | |
| %% \sclx@noop@openout | |
| % MB. A delimiting space is assumed. | |
| \def\sclx@noop@openout#1 {} | |
| %--------------------------------------- the essential one | |
| %%<+> \sclxDrawEssential{<size>}{<muffler-color>} | |
| \def\sclxDrawEssential#1#2{% | |
| \tikzpicture[x=#1,y=#1,line width=#1*0.013888,% | |
| line join=round,line cap=round] | |
| \useasboundingbox (0,0) rectangle (1,1); | |
| \draw % body | |
| (0.5,0.72) .. controls (0.64,0.72) and (0.76,0.65) .. | |
| (0.76,0.55) .. controls (0.76,0.51) and (0.72,0.47) .. | |
| (0.67,0.44) .. controls (0.79,0.41) and (0.84,0.32) .. | |
| (0.84,0.25) .. controls (0.84,0.13) and (0.75,0.08) .. | |
| (0.68,0.08) -- | |
| (0.32,0.08) .. controls (0.25,0.08) and (0.16,0.13) .. | |
| (0.16,0.25) .. controls (0.16,0.32) and (0.21,0.41) .. | |
| (0.33,0.44) .. controls (0.28,0.47) and (0.24,0.51) .. | |
| (0.24,0.55) .. controls (0.24,0.65) and (0.36,0.72) .. | |
| (0.5,0.72) -- | |
| cycle; | |
| % eyes | |
| \fill (0.40,0.56) circle (0.02 and 0.03); | |
| \fill (0.60,0.56) circle (0.02 and 0.03); | |
| % mouth | |
| \draw (0.40,0.48) .. controls (0.45,0.45) and (0.55,0.45) .. (0.60,0.48); | |
| \filldraw % hat | |
| (0.58,0.90) -- | |
| (0.77,0.81) -- | |
| (0.74,0.61) .. controls (0.66,0.60) and (0.50,0.66) .. | |
| (0.46,0.72) -- | |
| (0.58,0.90) -- | |
| cycle; | |
| \filldraw % right arm | |
| (0.20,0.31) .. controls (0.19,0.33) and (0.14,0.41) .. | |
| (0.13,0.42) .. controls (0.12,0.43) and (0.10,0.43) .. | |
| (0.07,0.44) .. controls (0.04,0.46) and (0.06,0.46) .. | |
| (0.08,0.46) .. controls (0.09,0.46) and (0.11,0.44) .. | |
| (0.12,0.44) .. controls (0.14,0.46) and (0.14,0.47) .. | |
| (0.15,0.49) .. controls (0.16,0.51) and (0.16,0.49) .. | |
| (0.16,0.48) .. controls (0.16,0.46) and (0.14,0.44) .. | |
| (0.15,0.43) .. controls (0.16,0.42) and (0.21,0.35) .. | |
| (0.22,0.33) .. controls (0.23,0.31) and (0.21,0.30) .. | |
| (0.20,0.31) -- | |
| cycle; | |
| \filldraw % left arm | |
| (0.80,0.31) .. controls (0.81,0.33) and (0.86,0.41) .. | |
| (0.87,0.42) .. controls (0.88,0.43) and (0.90,0.43) .. | |
| (0.93,0.44) .. controls (0.96,0.46) and (0.94,0.46) .. | |
| (0.92,0.46) .. controls (0.91,0.46) and (0.89,0.44) .. | |
| (0.88,0.44) .. controls (0.86,0.46) and (0.86,0.47) .. | |
| (0.85,0.49) .. controls (0.84,0.51) and (0.84,0.49) .. | |
| (0.84,0.48) .. controls (0.84,0.46) and (0.86,0.44) .. | |
| (0.85,0.43) .. controls (0.84,0.42) and (0.79,0.35) .. | |
| (0.78,0.33) .. controls (0.77,0.31) and (0.79,0.30) .. | |
| (0.80,0.31) -- | |
| cycle; | |
| \filldraw[#2] % muffler | |
| (0.27,0.48) .. controls (0.42,0.38) and (0.58,0.38) .. | |
| (0.73,0.48) .. controls (0.75,0.46) and (0.76,0.44) .. | |
| (0.77,0.41) .. controls (0.77,0.39) and (0.75,0.37) .. | |
| (0.73,0.36) .. controls (0.74,0.33) and (0.74,0.31) .. | |
| (0.76,0.26) .. controls (0.75,0.25) and (0.72,0.24) .. | |
| (0.66,0.23) .. controls (0.66,0.27) and (0.65,0.30) .. | |
| (0.63,0.34) .. controls (0.42,0.30) and (0.32,0.35) .. | |
| (0.24,0.41) .. controls (0.25,0.45) and (0.26,0.47) .. | |
| (0.27,0.48) -- | |
| cycle; | |
| % buttons | |
| \filldraw (0.50,0.16) circle (0.03); | |
| \filldraw (0.50,0.26) circle (0.03); | |
| % snow | |
| \draw (0.07,0.28) circle (0.04); | |
| \draw (0.13,0.55) circle (0.04); | |
| \draw (0.08,0.68) circle (0.04); | |
| \draw (0.23,0.76) circle (0.04); | |
| \draw (0.42,0.89) circle (0.04); | |
| \draw (0.74,0.89) circle (0.04); | |
| \draw (0.88,0.73) circle (0.04); | |
| \draw (0.92,0.53) circle (0.04); | |
| \draw (0.94,0.23) circle (0.04); | |
| \endtikzpicture | |
| } | |
| %--------------------------------------- bits of LaTeX | |
| %% variables | |
| %[sclx@env/<env>] : (pseudo-)environment starter | |
| %% errors | |
| \def\sclx@warn@ignore@cmd#1{% | |
| \sclx@warning | |
| {Command '\string#1' is ignored,\MessageBreak | |
| since it is not *essential*}% | |
| } | |
| \def\sclx@warn@ignore@env#1{% | |
| \sclx@warning | |
| {Environment '#1' is ignored,\MessageBreak | |
| since it is not *essential*}% | |
| } | |
| %% \sclx@check@star{<cont>} | |
| % Sets switch sclx@ok. | |
| \def\sclx@check@star#1{% | |
| \def\sclx@next{#1}% | |
| \sclx@okfalse | |
| \ltx@ifnextchar*{\sclx@check@star@a}{\sclx@next}% | |
| } | |
| \def\sclx@check@star@a*{% | |
| \sclx@oktrue | |
| \sclx@next | |
| } | |
| %% \sclx@gobble@opt{<cont>} | |
| \def\sclx@gobble@opt#1{% | |
| \def\sclx@next{#1}% | |
| \ltx@ifnextchar[{\sclx@gobble@opt@a}{\sclx@gobble@opt@a[]}% | |
| } | |
| \def\sclx@gobble@opt@a[#1]{% | |
| \sclx@next | |
| } | |
| %% \begin{<env>} | |
| \def\begin#1{% | |
| \lettocs\sclx@tmpa{sclx@env/#1}% | |
| \ifcommand\sclx@tmpa{% | |
| \sclx@tmpa | |
| }{%else | |
| \sclx@warn@ignore@env{#1}% | |
| }% | |
| } | |
| %% \end{<env>} | |
| \def\end#1{% | |
| % no check ;) | |
| } | |
| %% \DocumentMetadata{<metadata>,...} | |
| \sclx@provide{\long\def}\DocumentMetadata#1{% | |
| \def\sclx@metadata{#1}% | |
| \sclx@process@metadata | |
| } | |
| %% \documentclass[<option>,...]{<class>}[<version>] | |
| \sclx@provide\def\documentclass{% | |
| \ltx@ifnextchar[{\sclx@documentclass@a}{\sclx@documentclass@a[]}% | |
| } | |
| \def\sclx@documentclass@a[#1]#2{% | |
| \edef\sclx@option@list{#1}% | |
| \edef\sclx@class@name{#2}% | |
| \sclx@process@class | |
| \sclx@leave@latexish | |
| \sclxWriteDocument | |
| \sclx@org@end % quit, so <version> need not be read | |
| } | |
| %% \RequirePackage[<option>,...]{<package>}[<version>] | |
| \sclx@provide\def\RequirePackage{% | |
| \sclx@warn@ignore@cmd\RequirePackage | |
| \sclx@gobble@opt{\sclx@loadfile}% | |
| } | |
| \def\sclx@loadfile#1{% | |
| \sclx@gobble@opt{}% | |
| } | |
| %% environment 'filecontents(*)' | |
| \defcs{sclx@env/filecontents}{% | |
| \sclx@filecontents{filecontents}% | |
| } | |
| \defcs{sclx@env/filecontents*}{% | |
| \sclx@filecontents{filecontents*}% | |
| } | |
| \def\sclx@filecontents#1{% | |
| \sclx@warn@ignore@env{#1}% | |
| \begingroup | |
| \sclx@filecontents@a{#1}% | |
| \catcode13=12 | |
| \def\do##1{\catcode`##1=12 }\dospecials | |
| \sclx@next | |
| } | |
| \setcatcodes{\\\{\}\^^M=12,\|=0,\[=1,\]=2}% | |
| |def|sclx@filecontents@a#1[% | |
| |def|sclx@next##1\end{#1}##2^^M[|endgroup]% | |
| ]% | |
| |restorecatcodes% | |
| %% environment 'document' | |
| \defcs{sclx@env/document}{% | |
| \sclx@panic | |
| {The font size command \string\normalsize\space | |
| is not defined:\MessageBreak | |
| there is probably something wrong with the class file}% | |
| } | |
| %% \newcommand[*]\CS[<n>]{<code>} | |
| %% \providecommand[*]\CS[<n>]{<code>} | |
| % Ignored. | |
| \sclx@provide\def\newcommand{% | |
| \sclx@warn@ignore@cmd\newcommand | |
| \sclx@check@star{\sclx@new@command}% | |
| } | |
| \sclx@provide\def\providecommand{% | |
| \sclx@warn@ignore@cmd\newcommand | |
| \sclx@check@star{\sclx@new@command}% | |
| } | |
| \def\sclx@new@command#1{% | |
| \sclx@gobble@opt{\ltx@gobble}% | |
| } | |
| %% \renewcommand[*]\CS[<n>]{<code>} | |
| % Redefines \CS only when it is defined and n is zero; | |
| % otherwise does nothing. | |
| \sclx@provide\def\renewcommand{% | |
| \sclx@check@star{\sclx@renewcommand@a}% | |
| } | |
| \def\sclx@renewcommand@a#1{% | |
| \ltx@ifnextchar[{\sclx@renewcommand@b#1}{\sclx@renewcommand@b#1[0]}% | |
| } | |
| \def\sclx@renewcommand@b#1[#2]{% | |
| \sclx@cond\ifnum#2=0 \fi{% | |
| \ifcommand#1{% | |
| \ifsclx@ok \long \fi \def#1% | |
| }{%else | |
| \ltx@gobble | |
| }% | |
| }{% \renewcommand with arguments are deemed inessential | |
| \sclx@warn@ignore@cmd\newcommand | |
| \ltx@gobble | |
| }% | |
| } | |
| %% \setlength{<length-cmd>}{<length>} | |
| % Assigns only when the length command is defined. | |
| \sclx@provide\def\setlength#1{% | |
| \sclx@setlength@a#1\@undefined\sclx@end{#1}% | |
| } | |
| \def\sclx@setlength@a#1#2\sclx@end#3#4{% | |
| \ifdefined#1% check the head of <length-cmd> | |
| #3 #4\relax % assignment | |
| \fi | |
| } | |
| %% \setcounter{<counter>} | |
| % Assigns only when the counter is defined. | |
| \sclx@provide\def\setcounter#1#2{% | |
| \ifcsname c@#1\endcsname | |
| \global\csname c@#1\endcsname#2\relax | |
| \fi | |
| } | |
| %% \stop | |
| \sclx@provide\def\stop{% | |
| \sclx@leave@latexish | |
| \usecs{bye}% | |
| } | |
| %% tracing commands | |
| % NB. They are overwritten. | |
| \def\showoverfull{% | |
| \tracingonline\@ne | |
| } | |
| \def\loggingoutput{% | |
| \tracingoutput\@ne | |
| \showboxbreadth\maxdimen | |
| \showboxdepth\maxdimen | |
| \errorstopmode | |
| } | |
| \def\showoutput{% | |
| \loggingoutput | |
| \showoverfull | |
| } | |
| \def\loggingall{% | |
| \tracingstats\tw@ | |
| \tracingpages\@ne | |
| \tracinglostchars\@ne | |
| \tracingparagraphs\@ne | |
| \errorcontextlines\maxdimen | |
| \loggingoutput | |
| \tracingmacros\tw@ | |
| \tracingcommands\tw@ | |
| \tracingrestores\@ne | |
| } | |
| \def\tracingall{% | |
| \showoverfull | |
| \loggingall | |
| } | |
| \def\tracingnone{% | |
| \tracingonline\z@ | |
| \tracingcommands\z@ | |
| \showboxdepth\m@ne | |
| \showboxbreadth\m@ne | |
| \tracingoutput\z@ | |
| \errorcontextlines\m@ne | |
| \tracingrestores\z@ | |
| \tracingparagraphs\z@ | |
| \tracingmacros\z@ | |
| \tracinglostchars\@ne | |
| \tracingpages\z@ | |
| \tracingstats\z@ | |
| } | |
| \def\hideoutput{% | |
| \tracingoutput\z@ | |
| \showboxbreadth\m@ne | |
| \showboxdepth\m@ne | |
| \tracingonline\m@ne | |
| } | |
| \tracingnone | |
| \tracingstats=1 % as LaTeX does... | |
| %% counter 'errorcontextlines' | |
| \let\c@errorcontextlines\errorcontextlines | |
| %% miscellanea | |
| \sclx@provide\def\makeatletter{\catcode`\@11\relax} | |
| \sclx@provide\def\makeatother{\catcode`\@12\relax} | |
| \sclx@provide\def\listfiles{\sclx@warn@ignore@cmd\listfiles} | |
| \sclx@provide\def\nofiles{\sclx@warn@ignore@cmd\nofiles} | |
| %--------------------------------------- metadata processor | |
| %% \sclx@process@metadata | |
| \def\sclx@process@metadata{% | |
| \kv@set@family@handler{metadata}{% | |
| % ignore all unknown keys | |
| }% | |
| \passexpanded{\kvsetkeys{metadata}}{\sclx@metadata}% | |
| } | |
| %% 'backend' | |
| \kv@define@key{metadata}{backend}{% | |
| \ltx@ifblank{#1}{}{%else | |
| \edef\sclxDVIDriver{#1}% | |
| \sclx@debug{metadata: backend=\sclxDVIDriver}% | |
| }% | |
| } | |
| %% 'muffler' (NICE!) | |
| \kv@define@key{metadata}{muffler}{% | |
| \edef\sclxMufflerColor{#1}% | |
| \sclx@debug{metadata: muffler=\sclxMufflerColor}% | |
| } | |
| %% 'columns' | |
| \kv@define@key{metadata}{columns}{% | |
| \sclxColumnCount=#1\relax | |
| \sclx@meta@column@counttrue | |
| \sclx@debug{metadata: columns=\the\sclxColumnCount}% | |
| } | |
| %--------------------------------------- class processors | |
| %% variables | |
| \let\sclx@bsize@name\relax | |
| \chardef\sclx@iso@bsize=0 | |
| %\[sclx@cproc/<class>] : class processors | |
| %% \sclx@process@class | |
| \def\sclx@process@class{% | |
| \lettocs\sclx@next{sclx@cproc/\sclx@class@name}% | |
| \unless\ifdefined\sclx@next | |
| \lettocs\sclx@next{sclx@cproc/*default*}% | |
| \fi | |
| \sclx@typeout{Document Class: \sclx@class@name}% | |
| \sclx@next | |
| } | |
| %% \sclx@declare@class@processor{<class>}{<code>} | |
| \def\sclx@declare@class@processor#1{% | |
| \defcs{sclx@cproc/#1}% | |
| } | |
| %% \sclx@copy@class@processor{<class1>}{<class2>} | |
| \def\sclx@copy@class@processor#1#2{% | |
| \letcstocs{sclx@cproc/#1}{sclx@cproc/#2}% | |
| } | |
| %% \sclx@define@key{<key>}[<default>]{<code>} | |
| \def\sclx@define@key#1{% | |
| \sclx@debug{class key declared: #1}% | |
| \kv@define@key{class}{#1}% | |
| } | |
| \kv@set@family@handler{class}{% | |
| % ignore all unknown keys | |
| }% | |
| %% \sclx@define@dumbkey{<key>}{<code>} | |
| \def\sclx@define@dumbkey#1#2{% | |
| \sclx@define@key{#1}[\sclx@end]{% | |
| \ifx\sclx@end##1#2\fi% process if value is absent | |
| }% otherwise ignore | |
| } | |
| %% \sclx@define@paperkey{<key>}{<ps-name>} | |
| \def\sclx@define@paperkey#1#2{% | |
| \sclx@define@dumbkey{#1}{\usecs{sclx@ps/#2}}% | |
| } | |
| %% \sclx@define@kosokey{<key>}{<true>}{<false>} | |
| \chardef\sclx@kosovalue@@true=1 | |
| \chardef\sclx@kosovalue@@on=1 | |
| \chardef\sclx@kosovalue@@yes=1 | |
| \chardef\sclx@kosovalue@@false=0 | |
| \chardef\sclx@kosovalue@@off=0 | |
| \chardef\sclx@kosovalue@@no=0 | |
| \def\sclx@define@kosokey#1#2#3{% | |
| \sclx@define@key{#1}[true]{% | |
| \lettocs\sclx@tmpa{sclx@kosovalue@@##1}% | |
| \ifcase\ifdefined\sclx@tmpa\sclx@tmpa\else\ltx@minusone\fi | |
| #3% false | |
| \or #2% true | |
| \fi | |
| }% | |
| } | |
| %% \sclx@execute@keys{<key>=<value>,...} | |
| \def\sclx@execute@keys{% | |
| \kvsetkeys{class}% | |
| } | |
| %% \sclx@process@keys | |
| \def\sclx@process@keys{% | |
| \passexpanded\sclx@execute@keys{\sclx@option@list}% | |
| \unless\ifx\sclx@bsize@name\relax | |
| \sclx@adjust@bsize | |
| \fi | |
| \ifsclx@landscape | |
| \sclx@debug{landscape applied}% | |
| \sclx@swap@paper@size@edges | |
| \fi | |
| } | |
| %% \sclx@define@landscape@keys | |
| \def\sclx@define@landscape@keys{% | |
| \sclx@define@dumbkey{landscape}{\sclx@landscapetrue}% | |
| \sclx@define@dumbkey{portrait}{\sclx@landscapefalse}% | |
| } | |
| %% \sclx@define@column@keys | |
| \def\sclx@define@column@keys{% | |
| \sclx@define@dumbkey{onecolumn}{\sclx@set@column@count{1}}% | |
| \sclx@define@dumbkey{twocolumn}{\sclx@set@column@count{2}}% | |
| } | |
| %% \sclx@define@paper@keys@std | |
| \def\sclx@define@paper@keys@std{% | |
| \def\do##1{\sclx@define@paperkey{##1paper}{##1}}% | |
| \do{a3}\do{a4}\do{a5}\do{a6}\do{b4}\do{b5}\do{b6}% | |
| \do{letter}\do{legal}\do{executive}% | |
| } | |
| %% \sclx@define@paper@keys@ja | |
| \def\sclx@define@paper@keys@ja{% | |
| \def\do##1{\sclx@define@paperkey{##1paper}{##1}}% | |
| \do{a3}\do{a4}\do{a5}\do{a6}\do{letter}\do{legal}\do{executive}% | |
| \def\do##1{\sclx@define@paperkey{##1}{##1}}% | |
| \do{b4j}\do{b5j}\do{a4var}\do{b5var}% | |
| \def\do##1{\sclx@define@paperkey{##1paper}{##1j}}% | |
| \do{b4}\do{b5}\do{b6}% | |
| \def\do##1{\sclx@define@paperkey{##1j}{##1}}% | |
| \do{a4}\do{a5}% | |
| } | |
| %% \sclx@define@driver@keys | |
| \def\sclx@define@driver@keys{% | |
| \def\do##1{\sclx@define@dumbkey{##1}{\def\sclxDVIDriver{##1}}}% | |
| \sclx@dvidriver@list | |
| } | |
| %% \sclx@set@paper@size{<width>}{<height>} | |
| \def\sclx@set@paper@size#1#2{% | |
| \sclx@debug{papersize set: width=#1, height=#2}% | |
| \sclxPaperWidth=#1\relax | |
| \sclxPaperHeight=#2\relax | |
| \let\sclx@paper@size@name\relax | |
| }% | |
| %% \sclx@swap@paper@size@edges | |
| \def\sclx@swap@paper@size@edges{% | |
| \dimen@=\sclxPaperWidth | |
| \sclxPaperWidth=\sclxPaperHeight | |
| \sclxPaperHeight=\dimen@ | |
| } | |
| %% \sclx@adjust@bsize | |
| \def\sclx@adjust@bsize{% | |
| \sclx@debug{adjust bsize: \number\sclx@iso@bsize}% | |
| \ifnum\sclx@iso@bsize=0 | |
| \usecs{sclx@ps/\sclx@bsize@name j}% | |
| \fi | |
| } | |
| %% \sclx@set@column@count{<count>} | |
| \def\sclx@set@column@count#1{% | |
| \unless\ifsclx@meta@column@count | |
| \sclxColumnCount=#1\relax | |
| \fi | |
| }% | |
| %% \sclx@if@two@args{<arg>}{<true>}{<false>} | |
| \def\sclx@if@two@args#1{% | |
| \sclx@if@two@args@a#1{\sclx@mk}{}\sclx@end | |
| } | |
| \def\sclx@if@two@args@a#1#{% | |
| \ltx@ifempty{#1}{\sclx@if@two@args@b}{\sclx@if@two@args@c}% | |
| } | |
| \def\sclx@if@two@args@b#1#2#3#4\sclx@end{% | |
| \sclx@cond\ifx\sclx@mk#3\fi | |
| } | |
| \def\sclx@if@two@args@c#1\sclx@end{% | |
| \ltx@secondoftwo | |
| } | |
| %% the default class | |
| \sclx@declare@class@processor{*default*}{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@std | |
| \sclx@define@landscape@keys | |
| \sclx@define@column@keys | |
| \sclx@execute@keys{onecolumn,a4paper,portrait}% | |
| \sclx@process@keys | |
| } | |
| %% classes for Japanese documents | |
| \sclx@declare@class@processor{jsarticle}{% | |
| \sclx@define@dumbkey{slide}{\sclx@landscapetrue}% | |
| \sclx@process@ja@classes | |
| } | |
| \sclx@declare@class@processor{jsreport}{% | |
| \sclx@process@ja@classes | |
| } | |
| \sclx@declare@class@processor{jsbook}{% | |
| \sclx@process@ja@classes | |
| } | |
| \def\sclx@process@ja@classes{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@ja | |
| \sclx@define@landscape@keys | |
| \sclx@define@column@keys | |
| \sclx@execute@keys{onecolumn,a4paper,portrait}% | |
| \sclx@process@keys | |
| } | |
| \sclx@copy@class@processor{ltjsarticle}{jsarticle} | |
| \sclx@copy@class@processor{ltjsreport}{jsreport} | |
| \sclx@copy@class@processor{ltjsbook}{jsbook} | |
| \sclx@copy@class@processor{jarticle}{jsarticle} | |
| \sclx@copy@class@processor{jreport}{jsreport} | |
| \sclx@copy@class@processor{jbook}{jsbook} | |
| \sclx@copy@class@processor{ltjarticle}{jsarticle} | |
| \sclx@copy@class@processor{ltjreport}{jsreport} | |
| \sclx@copy@class@processor{ltjbook}{jsbook} | |
| % maybe tate classes should be supported more appropriately... | |
| \sclx@copy@class@processor{tarticle}{jsarticle} | |
| \sclx@copy@class@processor{treport}{jsreport} | |
| \sclx@copy@class@processor{tbook}{jsbook} | |
| \sclx@copy@class@processor{lttarticle}{jsarticle} | |
| \sclx@copy@class@processor{lttreport}{jsreport} | |
| \sclx@copy@class@processor{lttbook}{jsbook} | |
| %% class 'jlreq' | |
| \sclx@declare@class@processor{jlreq}{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@jlreq | |
| \sclx@define@landscape@keys | |
| \sclx@define@column@keys | |
| \sclx@execute@keys{onecolumn,a4paper,portrait}% | |
| \sclx@process@keys | |
| } | |
| \def\sclx@define@paper@keys@jlreq{% | |
| \def\do##1{\sclx@define@paperkey{##1paper}{##1}}% | |
| \do{a3}\do{a4}\do{a5}\do{a6}% | |
| \do{b4}\do{b5}\do{b6}% | |
| \do{letter}\do{legal}\do{executive}% | |
| % 'paper=<size>' | |
| \sclx@define@key{paper}{% | |
| \ifcs{sclx@psopt/##1}{% paper size name | |
| \usecs{sclx@ps/\usecs{sclx@psopt/##1}}% | |
| }{\ifcontains{,}{##1}{% values | |
| \splitstringat{,}{##1}{\sclx@set@paper@size}% | |
| }{%else | |
| \@ClassError\sclx@class@name | |
| {The paper ##1 is unknown}% | |
| {\@ehc}% | |
| }}% | |
| }% | |
| \def\sclx@next##1{\defcs{sclx@psopt/##1}}% | |
| \def\do##1##2##3##4##5{% | |
| \if\if##1AT\else\if##1BT\else\if##1CT\else F\fi\fi\fi T%[A/B/C] | |
| \sclx@next{##2paper}{##2}% | |
| \sclx@next{##2}{##2}% | |
| \uppercase{\sclx@next{##2}}{##2}% | |
| \else\if\if##1JT\else\if##1VT\else F\fi\fi T%[J/V] | |
| \sclx@next{##2}{##2}% | |
| \else\if##1U%[U] | |
| \sclx@next{##2paper}{##2}% | |
| \sclx@next{##2}{##2}% | |
| \fi\fi\fi | |
| }% | |
| \sclx@paper@size@list | |
| } | |
| %% classes in BXjscls | |
| \sclx@declare@class@processor{bxjsarticle}{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@bxjs | |
| \sclx@define@landscape@keys | |
| \sclx@define@column@keys | |
| \sclx@execute@keys{onecolumn,a4paper,portrait}% | |
| \sclx@process@keys | |
| } | |
| \def\sclx@define@paper@keys@bxjs{% | |
| \def\do##1##2##3##4##5{% | |
| \if##1A%[A] | |
| \sclx@define@paperkey{##2paper}{##2}% | |
| \sclx@define@paperkey@bxjs{##2}{##2}% | |
| \else\if##1B%[B] | |
| \sclx@define@dumbkey{##2paper}{% | |
| \usecs{sclx@ps/##2}% | |
| \def\sclx@bsize@name{##2}% | |
| }% | |
| \sclx@define@paperkey@bxjs{##2}{##2}% | |
| \else\if\if##1CT\else\if##1UT\else F\fi\fi T%[C/U] | |
| \sclx@define@paperkey{##2paper}{##2}% | |
| \else\if\if##1VT\else\if##1XT\else F\fi\fi T%[V/X] | |
| \sclx@define@paperkey{##2paper}{##2}% | |
| \sclx@define@paperkey{##2}{##2}% | |
| \else\if##1J%[J} | |
| \sclx@define@paperkey{##2}{##2}% | |
| \fi\fi\fi\fi\fi | |
| }% | |
| \sclx@paper@size@list | |
| \sclx@define@dumbkey{iso-bsize}{\chardef\sclx@iso@bsize=1 }% | |
| % 'paper=<size>' | |
| \sclx@define@key{paper}{% | |
| \ifcontains{,}{##1}{% width,height | |
| \splitstringat{,}{##1}{\sclx@set@paper@size}% | |
| }{\ifcontains{*}{##1}{% width*height | |
| \splitstringat{*}{##1}{\sclx@set@paper@size}% | |
| }{\sclx@if@two@args{##1}{% {width}{height}% | |
| \sclx@set@paper@size##1% | |
| }{}}}% ignored | |
| }% | |
| } | |
| \def\sclx@define@paperkey@bxjs#1#2{% | |
| \uppercase{\def\sclx@tmpa{#1}}% | |
| \sclx@define@paperkey{\sclx@tmpa paper}{#2}% | |
| } | |
| \sclx@copy@class@processor{bxjsreport}{bxjsarticle} | |
| \sclx@copy@class@processor{bxjsbook}{bxjsarticle} | |
| \sclx@copy@class@processor{bxjsslide}{bxjsarticle} | |
| %% classes in KOMA-Script | |
| \sclx@declare@class@processor{scrartcl}{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@koma | |
| \sclx@define@column@keys@koma | |
| \sclx@execute@keys{onecolumn,a4paper,portrait}% | |
| \sclx@process@keys | |
| } | |
| \def\sclx@define@column@keys@koma{% | |
| \sclx@define@kosokey{onecolumn}{\sclx@set@column@count{1}}{}% | |
| \sclx@define@kosokey{twocolumn}{% | |
| \sclx@set@column@count{2}% | |
| }{%else | |
| \sclx@set@column@count{1}% | |
| }% | |
| } | |
| \def\sclx@define@paper@keys@koma{% | |
| \def\do##1{% | |
| \sclx@define@kosokey{##1paper}{\usecs{sclx@ps/##1}}{}% | |
| }% | |
| \do{a4}\do{a5}\do{b5}% | |
| \do{letter}\do{legal}\do{executive}% | |
| \sclx@define@kosokey{portrait}{\sclx@landscapefalse}{}% | |
| \sclx@define@kosokey{landscape}{\sclx@landscapetrue}{}% | |
| % 'paper=<size>' | |
| \sclx@define@key{paper}{% | |
| \ifcs{sclx@psopt/##1}{% paper size name | |
| \usecs{sclx@ps/\usecs{sclx@psopt/##1}}% | |
| }{\ifcs{sclx@psoptl/##1}{% landscape | |
| \usecs{sclx@psoptl/##1}% | |
| }{\ifcontains{:}{##1}{% width:height | |
| \splitstringat{:}{##1}{\sclx@set@paper@size@koma}% | |
| }{}}}% ignored | |
| }% | |
| \def\sclx@next##1{\defcs{sclx@psopt/##1}}% | |
| \def\do##1##2##3##4##5{% | |
| \if\if##1AT\else\if##1BT\else\if##1CT\else\if##1DT\else | |
| F\fi\fi\fi\fi T%[A/B/C/D] | |
| \sclx@next{##2}{##2}% | |
| \uppercase{\sclx@next{##2}}{##2}% | |
| \else\if##1U%[U] | |
| \sclx@next{##2}{##2}% | |
| \fi\fi | |
| }% | |
| \sclx@paper@size@list | |
| \defcs{sclx@psoptl/portrait}{\sclx@landscapefalse}% | |
| \defcs{sclx@psoptl/landscape}{\sclx@landscapetrue}% | |
| \defcs{sclx@psoptl/seascape}{\sclx@landscapetrue}% | |
| } | |
| \def\sclx@set@paper@size@koma#1#2{% | |
| \sclx@set@paper@size{#1}{#2}% | |
| \ifdim\sclxPaperWidth>\sclxPaperHeight | |
| \sclx@swap@paper@size@edges | |
| \fi | |
| } | |
| \sclx@copy@class@processor{scrreprt}{scrartcl} | |
| \sclx@copy@class@processor{scrbook}{scrartcl} | |
| \sclx@copy@class@processor{scrlttr2}{scrartcl} | |
| \sclx@copy@class@processor{scrarticle}{scrartcl} | |
| \sclx@copy@class@processor{scrreport}{scrreprt} | |
| \sclx@copy@class@processor{scrletter}{scrartcl} | |
| %% class 'beamer' | |
| \sclx@declare@class@processor{beamer}{% | |
| \sclx@define@driver@keys | |
| \sclx@define@paper@keys@beamer | |
| \sclx@execute@keys{aspectratio=43}% | |
| \sclx@process@keys | |
| } | |
| \def\sclx@define@paper@keys@beamer{% | |
| \sclx@define@key{aspectratio}{\usecs{sclx@ar/##1}}% | |
| \defcs{sclx@ar/2013}{\sclx@set@paper@size{140mm}{91mm}}% | |
| \defcs{sclx@ar/1610}{\sclx@set@paper@size{160mm}{100mm}}% | |
| \defcs{sclx@ar/169}{\sclx@set@paper@size{160mm}{90mm}}% | |
| \defcs{sclx@ar/149}{\sclx@set@paper@size{140mm}{90mm}}% | |
| \defcs{sclx@ar/141}{\sclx@set@paper@size{148.5mm}{105mm}}% | |
| \defcs{sclx@ar/54}{\sclx@set@paper@size{125mm}{100mm}}% | |
| \defcs{sclx@ar/43}{\sclx@set@paper@size{128mm}{96mm}}% | |
| } | |
| %% class 'minimal' | |
| \sclx@declare@class@processor{minimal}{% | |
| \kv@set@family@handler{class}{% | |
| \def\sclxDVIDriver{##1}% | |
| }% | |
| \sclx@process@keys | |
| } | |
| %--------------------------------------- paper sizes | |
| %% \sclx@paper@size@list | |
| % List of \do{<kind>}{<name>}{<width>}{<height>}{<unit>}. | |
| \def\sclx@paper@size@list{% | |
| \do{A}{a0}{841}{1189}{mm}% | |
| \do{A}{a1}{594}{841}{mm}% | |
| \do{A}{a2}{420}{594}{mm}% | |
| \do{A}{a3}{297}{420}{mm}% | |
| \do{A}{a4}{210}{297}{mm}% | |
| \do{A}{a5}{148}{210}{mm}% | |
| \do{A}{a6}{105}{148}{mm}% | |
| \do{A}{a7}{74}{105}{mm}% | |
| \do{A}{a8}{52}{74}{mm}% | |
| \do{A}{a9}{37}{52}{mm}% | |
| \do{A}{a10}{26}{37}{mm}% | |
| \do{B}{b0}{1000}{1414}{mm}% | |
| \do{B}{b1}{707}{1000}{mm}% | |
| \do{B}{b2}{500}{707}{mm}% | |
| \do{B}{b3}{353}{500}{mm}% | |
| \do{B}{b4}{250}{353}{mm}% | |
| \do{B}{b5}{176}{250}{mm}% | |
| \do{B}{b6}{125}{176}{mm}% | |
| \do{B}{b7}{88}{125}{mm}% | |
| \do{B}{b8}{62}{88}{mm}% | |
| \do{B}{b9}{44}{62}{mm}% | |
| \do{B}{b10}{31}{44}{mm}% | |
| \do{C}{c0}{917}{1297}{mm}% | |
| \do{C}{c1}{648}{917}{mm}% | |
| \do{C}{c2}{458}{648}{mm}% | |
| \do{C}{c3}{324}{458}{mm}% | |
| \do{C}{c4}{229}{324}{mm}% | |
| \do{C}{c5}{162}{229}{mm}% | |
| \do{C}{c6}{114}{162}{mm}% | |
| \do{C}{c7}{81}{114}{mm}% | |
| \do{C}{c8}{57}{81}{mm}% | |
| \do{C}{c9}{40}{57}{mm}% | |
| \do{C}{c10}{28}{40}{mm}% | |
| \do{D}{d0}{771}{1090}{mm}% | |
| \do{D}{d1}{545}{771}{mm}% | |
| \do{D}{d2}{385}{545}{mm}% | |
| \do{D}{d3}{272}{385}{mm}% | |
| \do{D}{d4}{192}{272}{mm}% | |
| \do{D}{d5}{136}{192}{mm}% | |
| \do{D}{d6}{96}{136}{mm}% | |
| \do{D}{d7}{68}{96}{mm}% | |
| \do{D}{d8}{48}{68}{mm}% | |
| \do{J}{b0j}{1030}{1456}{mm}% | |
| \do{J}{b1j}{728}{1030}{mm}% | |
| \do{J}{b2j}{515}{728}{mm}% | |
| \do{J}{b3j}{364}{515}{mm}% | |
| \do{J}{b4j}{257}{364}{mm}% | |
| \do{J}{b5j}{182}{257}{mm}% | |
| \do{J}{b6j}{128}{182}{mm}% | |
| \do{J}{b7j}{91}{128}{mm}% | |
| \do{J}{b8j}{64}{91}{mm}% | |
| \do{J}{b9j}{45}{64}{mm}% | |
| \do{J}{b10j}{32}{45}{mm}% | |
| \do{V}{a4var}{210}{283}{mm}% | |
| \do{V}{b5var}{182}{230}{mm}% | |
| \do{V}{hagaki}{100}{148}{mm}% | |
| \do{U}{ansia}{8.5}{11}{in}% | |
| \do{U}{ansib}{11}{17}{in}% | |
| \do{U}{ansic}{17}{22}{in}% | |
| \do{U}{ansid}{22}{34}{in}% | |
| \do{U}{ansie}{34}{44}{in}% | |
| \do{U}{letter}{8.5}{11}{in}% | |
| \do{U}{legal}{8.5}{14}{in}% | |
| \do{U}{executive}{7.25}{10.5}{in}% | |
| \do{X}{screen}{225}{180}{mm}% | |
| } | |
| %% \[sclx@ps/<name>]: paper sizes | |
| \def\do#1#2#3#4#5{% | |
| \defcs{sclx@ps/#2}{\sclx@set@paper@size{#3#5}{#4#5}}% | |
| } | |
| \sclx@paper@size@list | |
| %--------------------------------------- enter LaTeXish | |
| %% errors | |
| \def\sclx@error@bad@par{% | |
| \sclx@panic | |
| {Missing \string\begin{document}}% | |
| } | |
| %% \sclx@prev@font | |
| \passexpandednobraces{\let\sclx@prev@font}{\the\font} | |
| %% \sclx@leave@latexish | |
| % Rolls back a bit of LaTeXish emulations, so as to avoid | |
| % chaos caused by some module judging LaTeX is running. | |
| \def\sclx@leave@latexish{% | |
| \let\RequirePackage\@undefined | |
| \let\end\sclx@org@end | |
| \sclx@prev@font | |
| \everypar{}% | |
| } | |
| %% enter LaTeXish | |
| \everypar{\sclx@error@bad@par} | |
| \nullfont | |
| %--------------------------------------- all done | |
| \sclx@exit% | |
| %% EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment