%% This is part of OpTeX project, see http://petr.olsak.net/optex \_fontdecl [Latin Modern] \LMfonts {TeX Gyre fonts based on Coputer Modern} {\roman \sans \quotset \ttset \ttprop \ttlight \ttcond \upital \dunhill submods:\caps \slant \nbold \bolder} {\rm \bf \it \bi \tt} {LM} {[lmroman10-regular]} \_wlog{\_detokenize{% Modifiers (selects subfamily):^^J \modreset .. implicit values (serif, bold extended, nocaps)^^J \sans ...... sans serif subfamily^^J \quotset ... quotation subfamily^^J \ttset ..... typewriter subfamily^^J \ttprop .... proportional typewriter-like subfamily^^J \ttlight ... light typewriter subfamily^^J \ttcond .... condensed typewriter subfamily^^J \upital .... upright italic (only \rm)^^J \dunhill ... dunhill roman subfamily (only \rm, \it)^^J% Submodifiers (setlects special variants of given subfamily):^^J \caps ...... caps & small caps (available only at limited shapes)^^J \slant ..... slanted (default in some subfamilies)^^J \nbold ..... normal bold (extended bold is default)^^J \bolder .... extended bold^^J }} \_protected\_def \LMfonts {% \_def \_currfamily {LMfonts}% \_def \_fontnamegen {[\_optname{lm\_subfamV.\_currV}]:\_fontfeatures}% \_resetmod } \_def\_LMregfont #1 #2 #3{% \_edef\_tmp {\_noexpand\_regoptsizes #1 #2 \_ea\_detokenize\_ea{#3}}% \_lowercase\_ea{\_tmp}% OTF file names are lowercase } \_def \_regoptFS {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} \_def \_regoptFT {5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} \_def \_regoptST {7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <*} \_def \_regoptES {8 <8.5 9 <9.5 10 <11.1 12 <15 17 <*} \_def \_regoptET {8 <8.5 9 <9.5 10 <11.1 12 <*} \_def \_regoptT {10 <*} \_def \_regoptE {8 <*} \_LMregfont lmrm.r LMRoman?-Regular \_regoptFS % 5-17 \_LMregfont lmrm.bx LMRoman?-Bold \_regoptFT % 5-12 \_LMregfont lmrm.i LMRoman?-Italic \_regoptST % 7-12 \_LMregfont lmrm.bxi LMRoman?-BoldItalic \_regoptT % 10 \_LMregfont lmrm.isl LMRomanSlant?-Regular \_regoptES % 8-17 \_LMregfont lmrm.bxisl LMRomanSlant?-Bold \_regoptT % 10 \_LMregfont lmrm.b LMRomanDemi?-Regular \_regoptT % 10 \_LMregfont lmrm.bi LMRomanDemi?-Oblique \_regoptT % 10 \_LMregfont lmss.r LMSans?-Regular \_regoptES % 8-17 \_LMregfont lmss.bx LMSans?-Bold \_regoptT % 10 \_LMregfont lmss.i LMSans?-Oblique \_regoptES % 8-17 \_LMregfont lmss.bxi LMSans?-BoldOblique \_regoptT % 10 \_LMregfont lmss.b LMSansDemiCond?-Regular \_regoptT % 10 \_LMregfont lmss.bi LMSansDemiCond?-Oblique \_regoptT % 10 \_LMregfont lmsq.r LMSansQuot?-Regular \_regoptE % 8 \_LMregfont lmsq.b LMSansQuot?-Bold \_regoptE % 8 \_LMregfont lmsq.i LMSansQuot?-Oblique \_regoptE % 8 \_LMregfont lmsq.bi LMSansQuot?-BoldOblique \_regoptE % 8 \_LMregfont lmtt.r LMMono?-Regular \_regoptET % 8-12 \_LMregfont lmtt.b LMMonoLt?-Bold \_regoptT % 10 \_LMregfont lmtt.i LMMono?-Italic \_regoptT % 10 \_LMregfont lmtt.bi LMMonoLt?-BoldOblique \_regoptT % 10 \_LMregfont lmtt.isl LMMonoSlant?-Regular \_regoptT % 10 \_optfontalias {lmtt.bisl} {lmtt.bi} \_LMregfont lmtp.r LMMonoPropLt?-Regular \_regoptT % 10 \_LMregfont lmtp.bx LMMonoPropLt?-Bold \_regoptT % 10 \_LMregfont lmtp.i LMMonoPropLt?-Oblique \_regoptT % 10 \_LMregfont lmtp.bxi LMMonoPropLt?-BoldOblique \_regoptT % 10 \_LMregfont lmtp.b LMMonoProp?-Regular \_regoptT % 10 \_LMregfont lmtp.bi LMMonoProp?-Oblique \_regoptT % 10 \_LMregfont lmtl.r LMMonoLt?-Regular \_regoptT % 10 \_LMregfont lmtl.i LMMonoLt?-Oblique \_regoptT % 10 \_LMregfont lmtc.r LMMonoLtCond?-Regular \_regoptT % 10 \_LMregfont lmtc.i LMMonoLtCond?-Oblique \_regoptT % 10 \_LMregfont lmrm.rc LMRomanCaps?-Regular \_regoptT % 10 \_LMregfont lmrm.ic LMRomanCaps?-Oblique \_regoptT % 10 \_LMregfont lmtt.rc LMMonoCaps?-Regular \_regoptT % 10 \_LMregfont lmtt.ic LMMonoCaps?-Oblique \_regoptT % 10 \_LMregfont lmmu.r LMRomanUnsl?-Regular \_regoptT % 10 \_LMregfont lmdu.r LMRomanDunh?-Regular \_regoptT % 10 \_LMregfont lmdu.sl LMRomanDunh?-Oblique \_regoptT % 10 % main modifiers (they select a subfamily) \_moddef \resetmod {\_fsetV subfam=rm \_fvars r bx i bxi } \_moddef \sans {\_fsetV subfam=ss \_fvars r bx i bxi } \_moddef \quotset {\_fsetV subfam=sq \_fvars r b i bi } \_moddef \ttset {\_fsetV subfam=tt \_fvars r b i bi } \_moddef \ttprop {\_fsetV subfam=tp \_fvars r b i bi } \_moddef \ttlight {\_fsetV subfam=tl \_fvars r . i . } \_moddef \ttcond {\_fsetV subfam=tc \_fvars r . i . } \_moddef \upital {\_fsetV subfam=mu \_fvars r . . . } \_moddef \dunhill {\_fsetV subfam=du \_fvars r . sl . } % submodifiers (they select special vaiants in a subfamily) \_moddef \nbold {\_onlyif subfam=rm,ss,tp: {\_fvars r b i bi }} \_moddef \bolder {\_onlyif subfam=rm,ss,tp: {\_fvars r bx i bxi }} \_moddef \slant {\_onlyif subfam=rm: {\_fvars r bx isl bxisl }% \_onlyif subfam=tt: {\_fvars r b isl bisl }} \_moddef \caps {\_onlyif subfam=rm,tt: {\_fvars rc . ic . }} \_def \_tryloadtt {\_fontdef\_tentt{\_LMfonts \_addto\_fontfeatures{-tlig;}\_ttset \_rm}} \_private \LMfonts \ttset ; % \tt variant selector re-defined \_initfontfamily % new font family must be initialized \_loadmath {[latinmodern-math]} \_endcode \sec How to wite font-macro-file with optical sizes for \OpTeX/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% First, look at more clear example in `f-hermes.opm`. The basic documentation is there. You can use `\_optname` macro in upur `\_fontnamegen`. This macro is fully expandable and its input is `<internal-template>` and its output is a part of your `\_fontnamegen`, i.e. it is a part of a real font file name with `.otf` extension. Shortly speaking: \begtt \_optname{<internal-template>} -> <part-of-file-name> \endtt You can declare a collection of file names for only one <optical-name-template> by `\_regoptsizes`. The syntax is shown for one real case: \begtt \_regoptsizes lmr.r lmroman?-regular 5 <5.5 6 <6.5 7 <7.5 8 <8.5 9 <9.5 10 <11.1 12 <15 17 <* \endtt In general: \begtt \_regoptsizes <internal-template> {<default-size>} <resizing-data> \endtt Suppose our example above. Then `\_optname{lmr.r}` expands to lmroman?-regular where the question mark is substituted by a number depending on current `\_optsize`. If the `\_optsize` lies between two boundary values (they are prefixed by `<` character) then the number written between them is used. For example if $11.1 \lt \_optsize \_le 15$ then 12 is substituted instead question mark. The <resizing-data> virtually begins with zero `<0`, but it is not explicitly written. The right part of <resizing-data> must be terminated by `<*` which means "less than infinity". If `\_optname` gets an argument which is not registered <internal-template> then it expands to `\_failedoptname` which typically ends to error message about missing font. You can redefine `\_failedoptname` macro to some existing font if you fint it useful. We are using a special macro \_LMregfont which sets the file names to lowercase and enables to use a shortcasts isntead real <resizing-data>. There are shortcats `\_regoptFS`, `\_regoptT`, etc. here. THe collection of <internal-templates> are declared, each of them covers a collection of real file names. The modifiers redefines \_subfamV and \_currV ouput in this file `f-lmfonts.opm`. These outputs are used in the paramater of `\_optname`, so they decalre parts of <internal-template>, no parts of real file name. The `\optfontalias {<new-template>} {<declared-template>} decales <new-template> wit the same meaning as previously <declared-template>. The `\_optname` macro can be used even if no otical sizes are provided by a font family. Suppose that font file names are much more chaotic (because artists are very creative people), so you need to declare more systematic <internal-templates> and do an alias from each <internal-template> to <real-font-name>. For example, you can do it as folows: \begtt \def\fontalias #1 #2 {\_regoptsizes #1 ?#2 {} <*} % alias name real font name \fontalias crea-a-regular {Creative Font} \fontalias crea-a-bold {Creative FontBold} \fontalias crea-a-italic {Creative olique} \fontalias crea-a-bolditalic {Creative Bold plus italic} \fontalias crea-b-regular {Creative Regular subfam} \fontalias crea-b-bold {Creative subfam bold} \fontalias crea-b-italic {Creative-subfam Oblique} \fontalias crea-b-bolditalic {Creative Bold subfam Oblique} \endtt