Zigzag left margin with italics
In a paper I recently wrote I noticed some ugly zigzag alignment on the left margin of one paragraph (set with Libertinus) where a couple of book titles appeared at the start of the second and fourth lines. The following example demonstrates the issue. \definefontfeature [default] [default] [protrusion=quality,expansion=quality] \setupalign [hz,hanging] \startbuffer Here is a line of text, the first sentence in the demonstration.\\ {\em Then} the next sentence in the paragraph follows.\\ You can see that the italic {\em T} appears to be a bit indented.\\ {\em There } might be a way to shift it to the left that little bit.\\ Perhaps a protrusion setting.\\ {\em This} does appear to depend to on the font used. With Modern and\\ Libertinus it is worse, with Times a bit better. \blank \stopbuffer \starttext Modern\\ \getbuffer Times\\ \setupbodyfont[times] \getbuffer Libertinus\\ \setupbodyfont[libertinus] \getbuffer \stoptext How can one set a small left-margin protrusion for the italic T and possibly other characters? I know it is a small issue, but once seen it is hard to un-see. -- Rik
Hi,
You can try this below (from test suite), but then, as you see, also
upright T will move out. Not sure how/if you can control that.
\startluacode
local classes = fonts.protrusions.classes
local vectors = fonts.protrusions.vectors
classes.rik = {
vector = 'rik',
factor = 1,
}
vectors.rik = table.merged (
vectors.quality,
{
[0x0054] = { 0.35, 0 }, -- T
})
\stopluacode
\definefontfeature
[default]
[default]
[protrusion=rik,expansion=quality]
\setupalign[hz,hanging]
\showmakeup[line]
\showglyphs
\startbuffer
Here is a line of text, the first sentence in the demonstration.\\
{\em Then} the next sentence in the paragraph follows.\\
You can see that the italic {\em T} appears to be a bit indented.\\
{\em There } might be a way to shift it to the left that little bit.\\
Perhaps a protrusion setting.\\
{\em This} does appear to depend to on the font used. With Modern and\\
Libertinus it is worse, with Times a bit better.
\blank
\stopbuffer
\starttext
Modern\\
\getbuffer
Times\\
\setupbodyfont[times]
\getbuffer
TLibertinus\\
\setupbodyfont[libertinus]
\getbuffer
\stoptext
/Mikael
On Mon, Nov 4, 2024 at 2:34 AM Rik Kabel
In a paper I recently wrote I noticed some ugly zigzag alignment on the left margin of one paragraph (set with Libertinus) where a couple of book titles appeared at the start of the second and fourth lines. The following example demonstrates the issue.
\definefontfeature [default] [default] [protrusion=quality,expansion=quality] \setupalign [hz,hanging]
\startbuffer Here is a line of text, the first sentence in the demonstration.\\ {\em Then} the next sentence in the paragraph follows.\\ You can see that the italic {\em T} appears to be a bit indented.\\ {\em There } might be a way to shift it to the left that little bit.\\ Perhaps a protrusion setting.\\ {\em This} does appear to depend to on the font used. With Modern and\\ Libertinus it is worse, with Times a bit better. \blank \stopbuffer
\starttext Modern\\ \getbuffer Times\\ \setupbodyfont[times] \getbuffer Libertinus\\ \setupbodyfont[libertinus] \getbuffer \stoptext
How can one set a small left-margin protrusion for the italic T and possibly other characters? I know it is a small issue, but once seen it is hard to un-see.
-- Rik
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
On 2024-11-04 01:35, Mikael Sundqvist wrote:
\startluacode
local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors
classes.rik = { vector = 'rik', factor = 1, }
vectors.rik = table.merged ( vectors.quality, { [0x0054] = { 0.35, 0 }, -- T })
\stopluacode
That, of course, works (I would use 0.175 for Libertinus) but as you point out does not distinguish roman and italic. Perhaps instead of protrusion there is something that can be done with the bounding box of specific characters. -- Rik
Mikael Sundqvist schrieb am 04.11.2024 um 07:35:
Hi,
You can try this below (from test suite), but then, as you see, also upright T will move out. Not sure how/if you can control that.
\startluacode
local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors
classes.rik = { vector = 'rik', factor = 1, }
vectors.rik = table.merged ( vectors.quality, { [0x0054] = { 0.35, 0 }, -- T })
\stopluacode
\definefontfeature [default] [default] [protrusion=rik,expansion=quality]
Define a feature which sets only the custom protrusion values: \definefontfeature [rik] [protrusion=quality] and create a new typeface where you apply the new feature to the italic/slanted style: \definefontfamily [riktimes] [rm] [TeX Gyre Termes] [sl=features:{default,rik}] Afterwards use \seupbodyfont[riktimes] to access the new typeface. Wolfgang
On 2024-11-04 10:55, Wolfgang Schuster wrote:
Mikael Sundqvist schrieb am 04.11.2024 um 07:35:
Hi,
You can try this below (from test suite), but then, as you see, also upright T will move out. Not sure how/if you can control that.
\startluacode
local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors
classes.rik = { vector = 'rik', factor = 1, }
vectors.rik = table.merged ( vectors.quality, { [0x0054] = { 0.35, 0 }, -- T })
\stopluacode
\definefontfeature [default] [default] [protrusion=rik,expansion=quality]
Define a feature which sets only the custom protrusion values:
\definefontfeature [rik] [protrusion=quality]
and create a new typeface where you apply the new feature to the italic/slanted style:
\definefontfamily [riktimes] [rm] [TeX Gyre Termes] [sl=features:{default,rik}]
Afterwards use \seupbodyfont[riktimes] to access the new typeface.
Wolfgang ___________________________________________________________________________________
Looking a bit more, the problem is not protrusion but the bounding box. Look at the left side of the italic T and W, and to a lesser degree C, O, and Q, produced by the following. \usetypescript[libertinus] \setupbodyfont[libertinus] \starttext ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\it\recursestring\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\recursestring¦} ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\it\recursestring}\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\recursestring}¦} \stoptext This may be an issue for the font maintainer, but is there anything that could be done within context? -- Rik
On 11/4/2024 6:39 PM, Rik Kabel wrote:
On 2024-11-04 10:55, Wolfgang Schuster wrote:
Mikael Sundqvist schrieb am 04.11.2024 um 07:35:
Hi,
You can try this below (from test suite), but then, as you see, also upright T will move out. Not sure how/if you can control that.
\startluacode
local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors
classes.rik = { vector = 'rik', factor = 1, }
vectors.rik = table.merged ( vectors.quality, { [0x0054] = { 0.35, 0 }, -- T })
\stopluacode
\definefontfeature [default] [default] [protrusion=rik,expansion=quality]
Define a feature which sets only the custom protrusion values:
\definefontfeature [rik] [protrusion=quality]
and create a new typeface where you apply the new feature to the italic/slanted style:
\definefontfamily [riktimes] [rm] [TeX Gyre Termes] [sl=features: {default,rik}]
Afterwards use \seupbodyfont[riktimes] to access the new typeface.
Wolfgang ___________________________________________________________________________________
Looking a bit more, the problem is not protrusion but the bounding box. Look at the left side of the italic T and W, and to a lesser degree C, O, and Q, produced by the following.
\usetypescript[libertinus] \setupbodyfont[libertinus] \starttext ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\it\recursestring\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\recursestring¦}
¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\it\recursestring}\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\recursestring}¦} \stoptext
This may be an issue for the font maintainer, but is there anything that could be done within context?
you can make a font goodie file where you patch properties of a specific glyph but then you also need to keep an eye on when the font gets fixed Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 2024-11-04 12:54, Hans Hagen wrote:
On 11/4/2024 6:39 PM, Rik Kabel wrote:
Looking a bit more, the problem is not protrusion but the bounding box. Look at the left side of the italic T and W, and to a lesser degree C, O, and Q, produced by the following.
\usetypescript[libertinus] \setupbodyfont[libertinus] \starttext ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\it\recursestring\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\recursestring¦}
¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\it\recursestring}\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\recursestring}¦} \stoptext
This may be an issue for the font maintainer, but is there anything that could be done within context?
you can make a font goodie file where you patch properties of a specific glyph but then you also need to keep an eye on when the font gets fixed
Hans
Can anyone provide a pointer to a goodie file where glyph boundaries are manipulated? I could not find anything relevant in the wiki, docs, or source. -- Rik
On 2024-11-04 16:49, Rik Kabel wrote:
On 2024-11-04 12:54, Hans Hagen wrote:
On 11/4/2024 6:39 PM, Rik Kabel wrote:
Looking a bit more, the problem is not protrusion but the bounding box. Look at the left side of the italic T and W, and to a lesser degree C, O, and Q, produced by the following.
\usetypescript[libertinus] \setupbodyfont[libertinus] \starttext ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\it\recursestring\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\recursestring¦}
¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\it\recursestring}\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\recursestring}¦} \stoptext
This may be an issue for the font maintainer, but is there anything that could be done within context?
you can make a font goodie file where you patch properties of a specific glyph but then you also need to keep an eye on when the font gets fixed
Hans
Can anyone provide a pointer to a goodie file where glyph boundaries are manipulated? I could not find anything relevant in the wiki, docs, or source.
-- Rik
Following up on my own post: 1. The problem was submitted to the developer's github issue list and acknowledged as an issue to be dealt with at some future time (https://github.com/alerque/libertinus/issues/561). The most problematic letters are seen as O, Q, T, and W (both italic and bold italic) and N (in bold italic). 2. I still would like to see how to construct a goodies file to fix this until that future time that the font is updated. -- Rik
Hans Hagen schrieb am 04.11.2024 um 18:54:
On 11/4/2024 6:39 PM, Rik Kabel wrote:
On 2024-11-04 10:55, Wolfgang Schuster wrote:
Mikael Sundqvist schrieb am 04.11.2024 um 07:35:
Hi,
You can try this below (from test suite), but then, as you see, also upright T will move out. Not sure how/if you can control that.
\startluacode
local classes = fonts.protrusions.classes local vectors = fonts.protrusions.vectors
classes.rik = { vector = 'rik', factor = 1, }
vectors.rik = table.merged ( vectors.quality, { [0x0054] = { 0.35, 0 }, -- T })
\stopluacode
\definefontfeature [default] [default] [protrusion=rik,expansion=quality]
Define a feature which sets only the custom protrusion values:
\definefontfeature [rik] [protrusion=quality]
and create a new typeface where you apply the new feature to the italic/slanted style:
\definefontfamily [riktimes] [rm] [TeX Gyre Termes] [sl=features: {default,rik}]
Afterwards use \seupbodyfont[riktimes] to access the new typeface.
Wolfgang ___________________________________________________________________________________
Looking a bit more, the problem is not protrusion but the bounding box. Look at the left side of the italic T and W, and to a lesser degree C, O, and Q, produced by the following.
\usetypescript[libertinus] \setupbodyfont[libertinus] \starttext ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\it\recursestring\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\recursestring¦}
¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\it\recursestring}\tf¦}\par ¦\doloopoverlist{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} {\WORD{\recursestring}¦} \stoptext
This may be an issue for the font maintainer, but is there anything that could be done within context?
you can make a font goodie file where you patch properties of a specific glyph but then you also need to keep an eye on when the font gets fixed
A simple solution is to use \shapecorrection which moves the slanted glyphs closer the margins of the text block. %%%% begin example \setuppapersize[A5] \startbuffer H\crlf {\it T} \blank H\crlf {\shapecorrection[both]\it T} \stopbuffer \showframe \starttext \subject{Latin Modern} \getbuffer \setupbodyfont[times] \subject{Times} \getbuffer \setupbodyfont[libertinus] \subject{Libertinus} \getbuffer \stoptext %%%% end example Wolfgang
participants (4)
-
Hans Hagen
-
Mikael Sundqvist
-
Rik Kabel
-
Wolfgang Schuster