%% This is part of OpTeX project, see http://petr.olsak.net/optex \_codedecl \typosize {Font managing macros from OPmac <2020-04-28>} % loaded in format \_doc ----------------------------- \`\typosize` `[/]` sets given parameters. It sets text font size by the \^`\setfontsize` macro and math font sizes by setting internal macros \^`\_sizemtext`, \^`\_sizemscript` and \^`\_sizemsscript`. It uses common concept font thes sizes: 100\,\%, 70\,\% and 50\,\%. The \^`\_setmainvalues` sets the parameters as main values when the `\_typosize` is called first. \_cod ----------------------------- \_protected\_def \_typosize [#1/#2]{% \_textfontsize{#1}\_mathfontsize{#1}\_setbaselineskip{#2}% \_setmainvalues \_ignorespaces } \_protected\_def \_textfontsize #1{\_if$#1$\_else \_setfontsize{at#1\_ptunit}\_fi} \_def \_mathfontsize #1{\_if$#1$\_else \_tmpdim=#1\_ptunit \_edef\_sizemtext{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% \_tmpdim=0.7\_tmpdim \_edef\_sizemscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% \_tmpdim=#1\_ptunit \_tmpdim=0.5\_tmpdim \_edef\_sizemsscript{\_ea\_ignorept \_the\_tmpdim \_ptmunit}% \_fi } \_public \typosize ; \_doc ----------------------------- \`\typoscale` `[/]` scales font size and baselineskip by given factors in respect to current values. It calculates the \^`\typosize` parameters and runs the \^`\typosize`. \_cod ----------------------------- \_protected\_def \_typoscale [#1/#2]{% \_ifx$#1$\_def\_tmp{[/}\_else \_settmpdim{#1}\_optsize \_edef\_tmp{[\_ea\_ignorept\_the\_tmpdim/}\_fi \_ifx$#2$\_edef\_tmp{\_tmp]}\_else \_settmpdim{#2}\_baselineskip \_edef\_tmp{\_tmp \_ea\_ignorept\_the\_tmpdim]}\_fi \_ea\_typosize\_tmp } \_def\_settmpdim#1#2{% \_tmpdim=#1pt \_divide\_tmpdim by1000 \_tmpdim=\_ea\_ignorept \_the#2\_tmpdim } \_public \typoscale ; \_doc ----------------------------- \`\_setbaselineskip` `{}` sets new `\baselineskip` and more values of registers which are dependent on the `` including the \^`\strutbox`. \_cod ----------------------------- \_def \_setbaselineskip #1{\_if$#1$\_else \_tmpdim=#1\_ptunit \_baselineskip=\_tmpdim \_relax \_bigskipamount=\_tmpdim plus.33333\_tmpdim minus.33333\_tmpdim \_medskipamount=.5\_tmpdim plus.16666\_tmpdim minus.16666\_tmpdim \_smallskipamount=.25\_tmpdim plus.08333\_tmpdim minus.08333\_tmpdim \_normalbaselineskip=\_tmpdim \_jot=.25\_tmpdim \_maxdepth=.33333\_tmpdim \_setbox\_strutbox=\_hbox{\_vrule height.709\_tmpdim depth.291\_tmpdim width0pt}% \_fi } \_doc ----------------------------- \`\_setmainvalues` sets the current font size and `\baselineskip` values to the \`\mainfosize` and \hbox{\`\mainbaselineskip`} registers. It redefines itself in order to set the main values only first. \nl \`\scalemain` returns to these values if they were set. Else they are set to 10/12\,pt. \_cod ----------------------------- \_newskip \_mainbaselineskip \_mainbaselineskip=0pt \_relax \_newdimen \_mainfosize \_mainfosize=0pt \_def\_setmainvalues {% \_mainbaselineskip=\_baselineskip \_mainfosize=\_optsize \_topskip=\_mainfosize \_splittopskip=\_topskip \_ifmmode \_else \_bf \_it \_bi \_rm \_fi % load all basic variants of the family \_normalmath % load fonts if \typosize is running first \_let \_setmainvalues =\_setmainvaluesL } \_def\_setmainvaluesL {\_ifmmode \_normalmath \_else \_rm \_everymath={\_normalmath}\_everydisplay={\_normalmath}\_fi} \_def\_scalemain {% \_ifdim \_mainfosize=0pt \_mainfosize=10pt \_mainbaselineskip=12pt \_let \_setmainvalues=\_setmainvaluesL \_fi \_optsize=\_mainfosize \_baselineskip=\_mainbaselineskip } \_public \scalemain \mainfosize \mainbaselineskip ; \_doc ----------------------------- \`\thefontsize` `[]` and \`\thefontscale` `[]` do modification of the size of the current font. They are implemented by the \^`\newcurrfontsize` macro. \_cod ----------------------------- \_protected\_def\_thefontsize[#1]{\_if$#1$\_else \_tmpdim=#1\_ptunit \_newcurrfontsize{at\_tmpdim}% \_fi \_ignorespaces } \_protected\_def\_thefontscale[#1]{\_ifx$#1$\_else \_tmpdim=#1pt \_divide\_tmpdim by1000 \_tmpdim=\_ea\_ea\_ea\_ignorept \_pdffontsize\_font \_tmpdim \_newcurrfontsize{at\_tmpdim}% \_fi \_ignorespaces } \_public \thefontsize \thefontscale ; \_doc ----------------------------- \`\em` keeps the weight of the current vaiant and switches roman $\leftrightarrow$ italic. It adds the italic correction by the \`\_additcorr` and \`\_afteritcorr` macros. The second does not add italic correction if the next character is dot or comma. \_cod ----------------------------- \_protected\_def\_em {% \_ea\_ifx \_the\_font \_tenit \_additcorr \_rm \_else \_ea\_ifx \_the\_font \_tenbf \_bi\_aftergroup\_afteritcorr\_else \_ea\_ifx \_the\_font \_tenbi \_additcorr \_bf \_else \_it \_aftergroup\_afteritcorr\_fi\_fi\_fi } \_def\_additcorr{\_ifdim\_lastskip>0pt \_skip0=\_lastskip \_unskip\_italcorr \_hskip\_skip0 \_else\_italcorr \_fi} \_def\_afteritcorr{\_futurelet\_next\_afteritcorrA} \_def\_afteritcorrA{\_ifx\_next.\_else\_ifx\_next,\_else \_italcorr \_fi\_fi} \_let\_italcorr=\/ \_doc ----------------------------- The \`\boldify` macro does `\let\it\bi` and `\let\normalmath=\boldmath`. \_cod ----------------------------- \_protected\_def \_boldify {% \_let \_setmainvalues=\_setmainvaluesL \_let\it =\_bi \_let\rm =\_bf \_let\_normalmath=\_boldmath \_bf } \_public \em \boldify ; \_doc ----------------------------- We need to use a font selector for default pagination. Because we don't know what default font size will be selected by the user, we use this \`\_rmfixed` macro. It sets the `\rm` font from default font size (declared by first \^`\typosize` command and redefines itself be only the font switch for next pages. \_cod ----------------------------- \_def \_rmfixed {% used in default \footline {\_ifdim\_mainfosize=0pt \_mainfosize=10pt \_fi \_fontdef\_rmfixed{\_setfontsize{at\mainfosize}\_resetmod\_rm}% \_global\_let\_rmfixed=\_rmfixed} % next use will be font switch only \_rmfixed } \_let \rmfixed = \_tenrm % user can redefine it \_endcode % ------------------------------------- History: 2020-04-28 \boldify: removed \let\_rm=\_bf 2020-04-14 \_setmainvaluesL: \_ifmmode test added 2020-03-27 \_setmainvalues: \_splittopskip=\_topskip added