背景
希望嵌入网格对齐的图像。更具体地说,我想渲染线性吸收和发射谱线不会导致散文排版偏离网格。(另请参阅:可见光谱的 RGB 值和夫琅禾费线。
mtx-context | current version: 2019.06.11 19:20
问题
在下面的屏幕截图中,两个 SVG 文件被导入到文档中,但它们的高度(与顶部和底部的空白相结合)使文本偏离了网格:
目前,光谱是从 SVG 文件导入的。它们不需要任何特定的高度;最好是允许 ConTeXt 设置网格上后续文本的高度。实际上,三列文本将具有相同的基线。
另外,小标题(关联和知识) 也会使文本脱离网格布局。
代码
这两个问题(副标题和矢量图形)的最小工作示例很难重新创建。以下是相关部分。
页面和栏目
\definepapersize[BookPaperSize][
width=24in,
height=12in,
]
\setuppapersize[BookPaperSize]
\usemodule[newcolumnsets]
\definecolumnset[BookColumns][n=4,distance=.25in]
\setupcolumnset[BookColumns:1][width=11.75in]
\setupcolumnset[BookColumns:2][width=3.46in]
\setupcolumnset[BookColumns:3][width=3.46in]
\setupcolumnset[BookColumns:4][width=3.46in]
网格页面布局
\definemeasure[BookTextLayoutHeight][\dimexpr .5\paperheight - 1in\relax]
% halfline - Allow the chapter title and columnar text to top-align
\definelayout[BookTextLayout][
topspace=.5in,
backspace=.5in,
width=\paperwidth,
height=\measure{BookTextLayoutHeight},
header=\zeropoint,
footer=\zeropoint,
setups=BookPenalties,
grid=halfline,
]
\setuplayout[BookTextLayout]
\startsetups[BookPenalties]
\setdefaultpenalties
\setpenalties\widowpenalties{1}{10000}
\setpenalties\clubpenalties {1}{10000}
\stopsetups
外部图形
\setupcaptions[location=none]
\setupexternalfigures[
order={jpg,png,svg,pdf},
location={local,default,global},
]
\def\inlinespectralexternalfigure[#1]{%
\blank[small]
\externalfigure[#1][width=\textwidth]
}
字体
\starttypescript [serif] [impactbody]
\definefontsynonym [Serif] [name:aleoregular] [features=default]
\stoptypescript
\starttypescript [sans] [impactheader]
\definefontsynonym [SansCaps] [name:gaugenormal][features={default,smallcaps}]
\definefontsynonym [SansCapsBold][name:gaugebold][features={default,smallcaps}]
\stoptypescript
\definetypeface[impact] [rm] [serif] [impactbody] [default]
\definetypeface[impact] [ss] [sans] [impactheader] [default]
\usetypescript[impact]
\setupbodyfont[impact]
\def\FontSizeChapter{5}
\def\FontSizeSection{2.5}
\def\FontSizeSubsection{1.25}
\definefont[FontChapter][SansCapsBold sa \FontSizeChapter]
\definefont[FontSection][SansCaps sa \FontSizeSection]
\definefont[FontSubsection][SansCapsBold sa \FontSizeSubsection]
标题和首字母
\setuphead[subsubsection][
style=\FontSubsection,
number=no,
before={\blank},
after={\blank[small]},
margin=\zeropoint,
beforecommand={\startlinecorrection},
aftercommand={\stoplinecorrection},
]
\setupinitial[
state=start,
color=BookBaseColour,
distance=.25em,
font=SansCapsBold sa 4.25,
n=3,
]
插图
矢量图形包括:
问题
如何设置字体和外部图形以使其始终网格对齐?
想法
一些行不通的想法。
线路校正
使用linecorrection
命令没有效果:
\def\inlinespectralexternalfigure[#1]{%
\startlinecorrection
\externalfigure[#1][width=\textwidth]
\stoplinecorrection
}
图像填充
用空白填充 SVG 非常耗时、容易出错,并且不能提供足够细粒度的控制来完善网格对齐。
空白命令
插入\blank
使用不同的数量(small
,depth
)可以提供更多的控制,但仍然无法完美对齐。
答案1
来自网格诡计手册部分:
\definefloat[inlinefigure][inlinefigures][figure]
\setupcaption[inlinefigure][inbetween=]
\setupfloat[inlinefigure][default={here,none}]
\def\inlinespectralexternalfigure[#1]{%
\placeinlinefigure{}{%
\externalfigure[#1][width=\textwidth,lines=1,grid=yes]
}
}
生成以下带有网格对齐文本的内嵌图像: