点无法与文本正确对齐

点无法与文本正确对齐

当尝试将一个点与页面的左边距或右边距之一对齐时,它不会正确对齐,而是在其前后留下一些空间。

这肯定与字符比例和间距有关。以下是 MWE:

\documentclass[11pt, a5paper]{article}
\usepackage[showframe]{geometry}

\begin{document}
\noindent
\Huge
\textbf{.}

\noindent
\Large
\textbf{Some example text.}
\end{document}

使用该\flushleft命令也不起作用。

同时制作点和文本\Large(或\Huge)可以解决问题。

有没有办法让圆点与下面的文本完美对齐,而不管文本和圆点的大小?在常规文本中使用圆点会造成混乱吗?

感谢您的帮助。

一些截图可以更好地说明我的意思:

在此处输入图片描述

这里与边缘的距离不同,就像在 MWE 中一样

在此处输入图片描述

这里它们和我希望的一样(我已经用肉眼观察过了\hspace)。

答案1

该问题与侧轴承有关。

lualatex 中的以下代码展示了打开和关闭开关的效果\dropsidebearings 。由 Marcel Krüger 提供。

原始问答的参考资料在评论中。

侧边距和精确左/右对齐

完美对齐、LuaTex 和侧边距。第二部分

第一个引用的问题也显示了使用 xelatex 解决该问题的方法。

% !TeX TS-program = lualatex    
\documentclass[11pt, a5paper]{article}
\usepackage[showframe]{geometry}    
\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*}


\begin{document}
    
\dropsidebearings=1 
        
\noindent dropsidebearing =1

\noindent\textbf{.}

\noindent \textbf{Some example text.}

\dropsidebearings=0 

\noindent dropsidebearing =0

\noindent\textbf{.}

\noindent \textbf{Some example text.}
\end{document}

输出

相关内容