背景
希望使用 ConTeXt LMTX 使气泡自动适应文本。
问题
带框文本的右填充会根据是否使用宏而变化\definefont
。在输出(如下)中,两个框架都应完全对齐。切换字体会破坏完全对齐。
代码
示例代码:
\definefont [TextFontEmoji] [OpenSansEmoji]
\definefontfamily [TextFont] [rm] [LibreBaskerville]
\setupbodyfont [TextFont]
\starttext
\startframedtext
\TextFontEmoji
\input ward
\stopframedtext
\startframedtext
\input ward
\stopframedtext
\stoptext
上述代码产生:
问题
如何在保持\framedtext
环境对齐的同时切换字体?
答案1
OpenSansEmoji 的 OTF 版本无法与 ConTeXt 相符。
https://github.com/MorbZ/OpenSansEmoji
从系统中完全删除 OTF 版本并改用 TTF 版本。这涉及删除luametatex-cache
目录并重建字体缓存。
以下操作可按预期产生包含表情符号的左、右对话框:
\definefont [TextFontEmoji] [OpenSansEmoji]
\startuseMPgraphic{TextBubble}{side}
z1 = (0, 0) ;
z2 = (OverlayWidth, 0) ;
z3 = (OverlayWidth, OverlayHeight) ;
z4 = (0, OverlayHeight) ;
offset := 1 ;
tail := 1 ;
% Flip the tail's location and direction.
if \MPvar{side} = 1:
offset := 5 ;
tail := -1 ;
fi
(offset/6)[x1,x2] = x8 + .25cm * tail = x7 + .25cm = x9 - .25cm ;
y7 = 0cm ;
y8 = -.5cm ;
y9 = 0cm ;
path p ;
p = (z1--z7--z8--z9--z2--z3--z4--cycle) cornered .25cm ;
draw p withpen pencircle scaled 0.75 ;
setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic
\defineframedtext[TextBubbleFrame][
style=TextFontEmoji,
frame=off,
width=.618\textwidth,
autowidth=force,
offset=.75em,
after={\blank[2*big]},
]
% Receive text (left-facing).
\defineoverlay[TextBubbleRxOverlay][\useMPgraphic{TextBubble}{side=0}]
\defineframedtext[TextBubbleRxFrame][TextBubbleFrame][
background=TextBubbleRxOverlay,
location=left,
]
% Send text (right-facing).
\defineoverlay[TextBubbleTxOverlay][\useMPgraphic{TextBubble}{side=1}]
\defineframedtext[TextBubbleTxFrame][TextBubbleFrame][
background=TextBubbleTxOverlay,
location=right,
]
\definestartstop[bubblerx][
before={\startnarrower\startTextBubbleRxFrame},
after={\stopTextBubbleRxFrame\stopnarrower},
]
\definestartstop[bubbletx][
before={\startnarrower\startTextBubbleTxFrame},
after={\stopTextBubbleTxFrame\stopnarrower},
]
\starttext
\startbubblerx
Welcome to the future, human