当尝试将一个点与页面的左边距或右边距之一对齐时,它不会正确对齐,而是在其前后留下一些空间。
这肯定与字符比例和间距有关。以下是 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 提供。
原始问答的参考资料在评论中。
第一个引用的问题也显示了使用 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}