我正在尝试将 ConTeXt 中一个向右对齐的文本块对齐。有点类似于信件中的签名块;其最长行应向右对齐,而其他较短行应与其左侧对齐。我尝试了将 ConTeXt 中不规则的右侧文本块居中吗?,将宽度改为size-\wd\scratchbox)/2
,\hsize-\wd\scratchbox)
但整个文本块没有右对齐。
平均能量损失
\defineframedtext[sigblockframed]
[width=\textwidth,autowidth=force,align=flushleft,
before=,after=,frame=off]
\definenarrower[sigblocknarrower]
\definelines[sigblocklines]
[before={\startsigblocknarrower[left]},
after=\stopsigblocknarrower,
]
\definebuffer[sigblock]
\def\stopsigblock{\setups{sigblock:buffer}}
\startsetups sigblock:buffer
\setupnarrower[sigblocknarrower][left=0pt]
\setbox\scratchbox\vbox
{\sigblockframed
{\startsigblocklines
\getsigblock
\stopsigblocklines}}
\edef\sigblockhsize{\the\dimexpr(\hsize-\wd\scratchbox)\relax}
\setupnarrower[sigblocknarrower][left=\sigblockhsize]
\startsigblocklines
\getsigblock
\stopsigblocklines
\stopsetups
任何帮助都值得感激。谢谢。
答案1
一个简单的\hfill
方法就可以了:
\definestartstop
[signature]
[
before={\endgraf\blank\hfill\signatureframed\bgroup},
after={\removeunwantedspaces\egroup},
]
\defineframed
[signatureframed]
[
align=flushleft,
frame=off,
offset=overlay,
]
\starttext
\input knuth
\startsignature
Don Knuth \\
The first \TEX\ user
\stopsignature
\stoptext
答案2
虽然你可以使用原语想要\hfill
将框架块向右对齐,ConTeXt 已经为此提供了一个命令。\rightaligned
该命令的参数被推到右侧,当您在环境中需要它时,您可以使用该\startrightaligned
命令。
\definestartstop
[signature]
[before={\blank\startrightaligned\startframed[signatureframed]},
after={\stopframed\stoprightaligned}]
\defineframed
[signatureframed]
[ width=fit,
align=flushleft,
frame=off,
offset=overlay]
\starttext
\input knuth
\startsignature
Don Knuth \\
The first \TEX\ user
\stopsignature
\stoptext
实现相同输出的另一种方法是使用环境framedtext
,让您可以将整个块对齐到左边或者正确的文本块的一侧包含第一个可选参数。
\definestartstop
[signature]
[before={\startsignatureframed[right]},
after={\stopsignatureframed}]
\defineframedtext
[signatureframed]
[ width=fit,
align=flushleft,
frame=off,
offset=overlay]
\starttext
\input knuth
\startsignature
Don Knuth \\
The first \TEX\ user
\stopsignature
\stoptext