为什么我不能让字母 F 对齐

为什么我不能让字母 F 对齐

我在我的一份文档中发现字母 F 对齐不太好:

在此处输入图片描述

我尝试了不同的字体https://tug.org/FontCatalogue/

有没有办法可以很好地对齐 F。

我知道这是字体的问题。在 word 中也会发生这种情况:

在此处输入图片描述

您可以在这里找到并编辑我的示例:https://www.overleaf.com/6991348982vwhhwrtvpfcn

答案1

您所看到的是角色的侧边栏。

尝试使用此代码(需要 lualatex)来打开和关闭开关\dropsidebearings。由 Marcel Krüger 提供。

点无法与文本正确对齐以及其中的链接。

前任

是

    % !TeX TS-program = lualatex  

\documentclass[12pt, a4paper]{article}

\RequirePackage{showframe} % margin line
\renewcommand\ShowFrameLinethickness{0.1pt}
\renewcommand\ShowFrameColor{\color{red}}

\RequirePackage{luacode}
\newcount\dropsidebearings

\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}

相关内容