在上下文中使右侧不规则的文本块与右侧齐平

在上下文中使右侧不规则的文本块与右侧齐平

我正在尝试将 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

相关内容