TeX - LaTeX Asked by botenvouwer on June 11, 2021
It occured to me in one of my documents that the letter F was not aligning nicely:
I tried different fonts from https://tug.org/FontCatalogue/.
Is there a way to align the F nicely.
I know this is due to the font. This also occurs in word:
You can find and edit my example here: https://www.overleaf.com/6991348982vwhhwrtvpfcn
What you are seeing are the sidebearings of the character.
Try this code (needs lualatex) for turning the switch dropsidebearings
on and off. Courtesy of Marcel Krüger.
See Dot won't properly align with text and links in it.
% !TeX TS-program = lualatex
documentclass[12pt, a4paper]{article}
RequirePackage{showframe} % margin line
renewcommandShowFrameLinethickness{0.1pt}
renewcommandShowFrameColor{color{red}}
RequirePackage{luacode}
newcountdropsidebearings
begin{luacode*}
------------------------drop_sidebearing------------------------
--https://tex.stackexchange.com/questions/427068/sidebearings-and-precision-left-right-alignment?noredirect=1&lq=1
--In LuaTeX, you can use the post_linebreak_filter to intercept the broken lines and
-- add some offsets. The sidebearings can be extracted from rawdata saved by luaotfload.
-- After adding the offsets, the hboxes have to be repacked to determine the new glue settings.
---updated for 1.09
--https://tex.stackexchange.com/questions/470276/perfect-alignment-luatex-and-sidebearings-part-ii
------------------------drop_sidebearing------------------------
local function drop_sidebearing(head, groupcode)
if tex.count['dropsidebearings'] == 0 then
return true
end
for n in node.traverse_id(node.id'hlist', head) do
local char = node.has_glyph(n.head)
if char then
local f = font.getfont(char.font)
if f.shared then
local kern = node.new(node.id'kern')
kern.kern = - f.shared.rawdata.descriptions[char.char].boundingbox[1]*f.size/1000
n.head = node.insert_before(n.head, char, kern)
end
end
for ch in node.traverse_id(node.id'glyph', n.head) do
char = ch
end
if char then
local f = font.getfont(char.font)
if f.shared then
local desc = f.shared.rawdata.descriptions[char.char]
local kern = node.new(node.id'kern')
kern.kern = - (desc.width-desc.boundingbox[3])*f.size/1000
node.insert_after(n.head, char, kern)
end
end
local new_list = node.hpack(n.head, n.width, 'exactly')
new_list.head = nil
n.glue_order = new_list.glue_order
n.glue_set = new_list.glue_set
n.glue_sign = new_list.glue_sign
node.free(new_list)
end
return true
end
luatexbase.add_to_callback('post_linebreak_filter', drop_sidebearing, 'Drop sidebearings after linebreaking')
end{luacode*}
setlength{parindent}{0pt}
renewcommand{familydefault}{sfdefault}
begin{document}
dropsidebearings=1
dropsidebearing =1 (no sideberarings)
Huge F
huge F
LARGE F
Large F
large F
dropsidebearings=0
dropsidebearing =0 (normal sideberarings)
Huge F
huge F
LARGE F
Large F
large F
end{document}
Correct answer by Simon Dispa on June 11, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP