读完这个答案后
自动防止因数学而产生多余的行距
作者 David Carlisle,我试验了代码以获得网格排版。我的方法:线的高度始终为(n - 0.3)\baselineskip
,深度(n - 0.7)\baselineskip
为n ∈ ℕ
。然后我删除粘连。这对于水平模式下的大型内联数学或其他大型对象很有效,但它不适用于显示数学,正如您在 MWE 中看到的那样。
我有几个问题:
- 这里出了什么问题?
- 我如何影响显示数学线
post_linebreak_filter
或其他地方的高度和深度? - 在这种情况下,我该如何正确设置间距?这意味着显示数学的基线应在网格上,并且显示数学之后的行也应遵循网格。
梅威瑟:
\documentclass[12pt]{article}
\usepackage{showframe,color,unicode-math}
% Check grid typesetting
\def\grid{%
\vtop to0pt{%
\hsize=0pt \noindent \color{red}%
X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\vss}}
\raggedbottom
\directlua{
function fixlines(h,c)
local B=tex.baselineskip.width
for n in node.traverse(h) do
%
% correct height and depth
if (n.id==0 or n.id==11) then
n.height = (math.ceil((n.height+.3*B)/B)-.3)*B
n.depth = (math.ceil((n.depth+.7*B)/B)-.7)*B
end
%
% lineskip or baselineskip: kill glue
if n.id==12 and (n.subtype==1 or n.subtype==2) then
n.width=0 % kill glue
end
end
return h
end
luatexbase.add_to_callback('post_linebreak_filter', fixlines, 'fix line spacing')
}
% test big objects
\def\
答案1
经过一个不眠之夜,我找到了一个解决方案。在中,append_to_vlist_filter
您可以操作法线(n.subtype==1
)、方程式(n.subtype==6
,即显示数学行)和方程式编号( ,或n.subtype==7
之后的内容)。现在每条显示数学行也都有更正的高度和深度。这是网格排版!!!! :)\eqno
\leqno
完成 MWE:
\documentclass[12pt]{article}
\usepackage{showframe,color,unicode-math}
\usepackage{lua-visual-debug}
% Check grid typesetting
\def\grid{%
\vtop to0pt{%
\hsize=0pt \noindent \color{red}%
X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\\X\vss}}
\raggedbottom
\directlua{
function fixlines(h,c)
local B=tex.baselineskip.width
for n in node.traverse(h) do
%
% correct height and depth
if n.id==0 and (n.subtype==1 or n.subtype==6 or n.subtype==7) then
n.height = (math.ceil((n.height+.29*B)/B)-.3)*B
n.depth = (math.ceil((n.depth+.69*B)/B)-.7)*B
end
%
% lineskip or baselineskip: kill glue
if n.id==12 and (n.subtype==1 or n.subtype==2) then
n.width=0 % kill glue
end
end
return h
end
luatexbase.add_to_callback('append_to_vlist_filter', fixlines, 'fix line spacing')
}
% test big objects
\def\
答案2
这更像是一条评论,而不是答案。FWIW,使用数学进行网格排版在 ConTeXt 中开箱即用:
\setuplayout[grid=yes]
\showgrid
\definemathmatrix[pmatrix][left={\left(\,}, right={\,\right)},simplecommand=PMATRIX]
\def\