Applying \sc for smallcaps across styles
Dear gang, Consider the following typescript template: \definefontfeature [myfont-tf-sc] [mode=node,script=latn,language=dflt,trep=no, protrusion=quality,expansion=quality, compose=yes,combine=yes,tlig=yes, kern=yes,liga=yes,onum=yes,cpsp=yes,smcp=yes, % smcp activie trnsl=force] % synonym mapping \starttypescript [serif] [myfont] [name] \loadfontgoodies[myfontlfg] \definefontsynonym [Serif] [MyFontRegular] [features=myfont-tf] \definefontsynonym [SerifItalic] [MyFontItalic] [features=myfont-it] \definefontsynonym [SerifBold] [MyFontBold] [features=myfont-tf] \definefontsynonym [SerifBoldItalic] [MyFontBoldItalic] [features=myfont-it] \definefontsynonym [SerifCaps] [MyFontRegular] [features=myfont-tf-sc] \definefontsynonym [SerifCapsItalic] [MyFontItalic] [features=myfont-it-sc] \definefontsynonym [SerifCapsBold] [MyFontBold] [features=myfont-tf-sc] \definefontsynonym [SerifCapsBoldItalic] [MyFontBoldItalic] [features=myfont-it-sc] \stoptypescript % font mapping \starttypescript [serif] [myfont] \loadfontgoodies[myfontlfg] \definefontsynonym [MyFontRegular] [file:MyFont-Regular] % [features=myfont-tf] \definefontsynonym [MyFontItalic] [file:MyFont-It] % [features=myfont-it] \definefontsynonym [MyFontBold] [file:MyFont-Bold] % [features=myfont-tf] \definefontsynonym [MyFontBoldItalic] [file:MyFont-BoldIt] % [features=myfont-it] \stoptypescript As is well known, \sc selects the small caps only from the Serif font, not from SerifBold etc. But MyFont has smallcaps for every style. So in the typescript we make that explicit and apply the smcp=yes fontfeature to SerifCapsBold etc. But this does not work: \sc still only applies to Serif or SerifCaps. Now I can load a goodies file myfontlfg and do something like this: local smallcaps = { smcp = yes, } But that does not change the behavior of \sc. Yes, there is an easy workaround: \definefontfeature[smallcaps][smcp=yes] \define\sc{\addff{smallcaps}} This works for all styles that have the smcp feature, but I don't like having to redefine a system command. So the questions are: 1) Is there a recommended\better way to get \sc to work across all styles? 2) Are there any edits you would recommend to the above typescript template? Once we're clear on this, will update this quite obsolete page: https://wiki.contextgarden.net/Bold_small_caps Thank you in advance. Best wishes Idris PS Sometimes these inquiries may appear more verbose than needed. That is because I'm trying to write as clearly as possible, not only for the experts and masters, but also for beginners and intermediate users who may run into these things one day, search the archives, etc.. -- Professor Idris Samawi Hamid Department of Philosophy Colorado State University Fort Collins, CO 80523
Hamid,Idris schrieb am 19.08.2023 um 16:03:
Dear gang,
Consider the following typescript template:
\definefontfeature [myfont-tf-sc] [mode=node,script=latn,language=dflt,trep=no, protrusion=quality,expansion=quality, compose=yes,combine=yes,tlig=yes, kern=yes,liga=yes,onum=yes,cpsp=yes,smcp=yes, % smcp activie trnsl=force]
% synonym mapping \starttypescript [serif] [myfont] [name] \loadfontgoodies[myfontlfg] \definefontsynonym [Serif] [MyFontRegular] [features=myfont-tf] \definefontsynonym [SerifItalic] [MyFontItalic] [features=myfont-it] \definefontsynonym [SerifBold] [MyFontBold] [features=myfont-tf] \definefontsynonym [SerifBoldItalic] [MyFontBoldItalic] [features=myfont-it]
\definefontsynonym [SerifCaps] [MyFontRegular] [features=myfont-tf-sc] \definefontsynonym [SerifCapsItalic] [MyFontItalic] [features=myfont-it-sc] \definefontsynonym [SerifCapsBold] [MyFontBold] [features=myfont-tf-sc] \definefontsynonym [SerifCapsBoldItalic] [MyFontBoldItalic] [features=myfont-it-sc] \stoptypescript
% font mapping \starttypescript [serif] [myfont] \loadfontgoodies[myfontlfg] \definefontsynonym [MyFontRegular] [file:MyFont-Regular] % [features=myfont-tf] \definefontsynonym [MyFontItalic] [file:MyFont-It] % [features=myfont-it] \definefontsynonym [MyFontBold] [file:MyFont-Bold] % [features=myfont-tf] \definefontsynonym [MyFontBoldItalic] [file:MyFont-BoldIt] % [features=myfont-it] \stoptypescript
As is well known, \sc selects the small caps only from the Serif font, not from SerifBold etc. But MyFont has smallcaps for every style. So in the typescript we make that explicit and apply the smcp=yes fontfeature to SerifCapsBold etc.
But this does not work: \sc still only applies to Serif or SerifCaps.
Now I can load a goodies file myfontlfg and do something like this:
local smallcaps = { smcp = yes, }
But that does not change the behavior of \sc.
Yes, there is an easy workaround:
\definefontfeature[smallcaps][smcp=yes] \define\sc{\addff{smallcaps}}
This works for all styles that have the smcp feature, but I don't like having to redefine a system command.
So the questions are:
1) Is there a recommended\better way to get \sc to work across all styles?
\setupbodyfont[pagella] \starttext \tf Upright, \it Italic, \bf Bold and \bi Bolditalic \style[style=smallcaps]{\tf Upright, \it Italic, \bf Bold and \bi Bolditalic} \tf Upright, \it Italic, \bf Bold and \bi Bolditalic \setsmallcaps\tf Upright, \it Italic, \bf Bold and \bi Bolditalic \stoptext
Many thanks. From font-pre.mkiv:
\definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps]
:
\unexpanded\def\setsmallcaps{\doaddfeature{f:smallcaps}}
So on the wiki we should say that \sc is a deprecated/legacy command that no longer makes sense in an opentype-features world. New users should no longer use it.
Best wishes
Idris
--
Professor Idris Samawi Hamid
Department of Philosophy
Colorado State University
Fort Collins, CO 80523
On Aug 19, 2023, 9:26 AM -0600, Wolfgang Schuster
Hamid,Idris schrieb am 19.08.2023 um 20:36:
Many thanks. From font-pre.mkiv:
\definealternativestyle [\v!smallcaps] [\setsmallcaps] [\setsmallcaps] : \unexpanded\def\setsmallcaps{\doaddfeature{f:smallcaps}}
So on the wiki we should say that \sc is a deprecated/legacy command that no longer makes sense in an opentype-features world. New users should no longer use it.
It depends on the font, e.g. Latin Modern still requires \sc because it provides a separate file for smallcaps but no smcp feature. ConTeXt has a command which can be used to check whether the current active font provides the smcp feature but the recommended way is to choose a font which supports to method (\sc or \setsmallcaps) which is used in the document. Wolfgang
On Aug 19, 2023, 1:01 PM -0600, Wolfgang Schuster
Dear gang,
The following two wiki pages have been edited/added:
https://wiki.contextgarden.net/Small_caps_across_styles_(bold,_italics,_etc.)
https://wiki.contextgarden.net/Small_caps_and_other_styles
Best wishes
Idris
--
Professor Idris Samawi Hamid
Department of Philosophy
Colorado State University
Fort Collins, CO 80523
On Aug 19, 2023, 1:14 PM -0600, Hamid,Idris
On 8/19/23 16:03, Hamid,Idris wrote:
[...] Yes, there is an easy workaround:
\definefontfeature[smallcaps][smcp=yes]
Hi Idris, just a minor comment. This is already defined in lines 96-99 of font-pre.mkxl: \definefontfeature [smallcaps] [always] [smcp=yes] And also in lines 77-82 of font-pre.mkiv: \definefontfeature [smallcaps] [always] [smcp=yes, tlig=yes, trep=yes] % texligatures=yes,texquotes=yes Just in case it helps, grep is a useful tool when applied to tex/texmf-context/tex/context/base/mkxl (or /tex/texmf-context/tex/context/base/mkiv, if needed). Cheers Pablo
Many thanks, Pablo. Yes, you are right. As mentioned in the reply to Wolfgang, will edit the wiki to reflect the legacy\deprecated status of \sc.
As for grep: Normally I use the nice "find in files" feature of Notepad++ -)
Am editing the wiki and have moved the original link to the more general title
https://wiki.contextgarden.net/Small_caps_across_styles_(bold,_italics,_etc.)
Best wishes
Idris
--
Professor Idris Samawi Hamid
Department of Philosophy
Colorado State University
Fort Collins, CO 80523
On Aug 19, 2023, 11:39 AM -0600, Pablo Rodriguez
participants (3)
-
Hamid,Idris
-
Pablo Rodriguez
-
Wolfgang Schuster