我正在努力处理 ConTeXt 中的边注。在 StackExchange 中许多人的宝贵帮助下,我在这里得到了我可以实现的 MWE。现在,我希望所有边注(左侧和右侧边注)都向右对齐。我试图在 2013 版 ConTeXt 参考手册中找到一种方法,但在 4.7 中它说:“文本在边注中。修复。边注命令的语法在 mark IV 中发生了变化”。尽管如此,我还是试图用这个来获得我想要的正确的对齐文本,但我做不到。接下来,我在网上查找,但没有找到任何对我来说清楚的东西。有人可以通过 MWE 在两个边注中获得对齐的右侧文本吗?谢谢!
\mainlanguage[es]
\language[es]
\usecolors[xwi]
\definecolor[marca][h=e80000]
\newdimen\Margin
\Margin=3.5cm
\newdimen\MarginRaise
\MarginRaise=56ex
\setuppagenumbering
[alternative=doublesided, location=]
\setuplayout[backspace=20mm,width=120mm,height=middle,footer=\bodyfontsize, header=3\bodyfontsize,headerdistance=\bodyfontsize,bottom=3\bodyfontsize,location={middle},margin=\Margin,rightmargin=4.5cm,marking=on]
\setupinterlinespace[small]
\setupmargindata[location=both, align=left,stack=yes, stack=continue, style=\tfx\setupinterlinespace]
\newcounter\MyMarginalNote
\def\mnote{\dosingleempty\domnote}
\def\domnote[#1]#2%
{\doglobal\increment\MyMarginalNote
\high{{\tfxx\color[marca]{\MyMarginalNote}}}%
\inouter
{{\tfx\color[marca]{\MyMarginalNote:}}
\doifsomething{#1}
{\expanded{\textreference[#1]{\MyMarginalNote}}}\tfx\it {#2}}}
\starttext
\input ward\mnote{\input {knuth}}
\input bryson
\input dawkins
\input douglas
\input reich\mnote{\input{zapf}}
\input reich
\input zapf
\stoptext
答案1
MkIV 中有两种边距机制:margindata
和marginframed
。margindata
边距文本只需在 中设置\vbox
;marginframed
边距文本设置在 中\framed
(从技术上讲,这是比 framed 级别更低的命令,但将其视为 framed 会有所帮助)。在大多数情况下,margindata
就足够了;marginframed
当您想要使用某些 framed 参数(offset
、frame
等)来更改视觉外观时,它很有用。
以下宏定义如下margindata
:
\inleftmargin
,,,,\inrightmargin
inoutermargin
\ininnermargin
\inleftedge
,,,,\inrightedge
\inoutedge
\ininneredge
\atleftmargin
,\atrightmargin
。
定义如下marginframed
:
\inleft
,,,,,,。\inright
\inouter
\ininner
\inmargin
\inother
现在,事情变得有点令人困惑的是,对于 marginframed ,一些参数是使用设置的,\setupmargin
而另一些参数是使用设置的\setupmarginframed
。align
是使用设置的参数之一。( for\setupmarginframed
有可能从 继承;我认为当前行为是错误配置)。align
\setupmarginframed
\setupmargindata
因此,在您的示例中,您应该
- 使用
\inoutermargin
(margindata
变体)代替\inouter
- 使用
\setupmarginframed[inouter][align=flushleft]
。
我在下面展示了使用第二种替代方案的完整示例。我还清理了一些其他代码(使用measures
ConTeXt 计数器;ConTeXt 计数器的优点是,如果您愿意,可以轻松更改转换)
\mainlanguage[es]
\definecolor[marca][h=e80000]
\definemeasure[Margin][3.5cm]
\setuppagenumbering[alternative=doublesided, location=]
\setuplayout
[
backspace=20mm,
width=120mm,
height=middle,
footer=\bodyfontsize,
header=3\bodyfontsize,
headerdistance=\bodyfontsize,
bottom=3\bodyfontsize,
location={middle},
margin=\measure{Margin},
rightmargin=4.5cm,
marking=on,
]
\setupinterlinespace[small]
\setupmargindata[stack=continue, style=\tfx\setupinterlinespace]
\setupmarginframed[inouter] [align=flushleft]
\definecounter[MyMarginNote][numberconversion=numbers]
\def\mnote{\dosingleempty\domnote}
\def\domnote[#1]#2%
{\incrementcounter[MyMarginNote]%
\high{{\tfxx\color[marca]{\convertedcounter[MyMarginNote]}}}%
\inouter
{{\tfx\color[marca]{\convertedcounter[MyMarginNote]:}}%
\doifsomething{#1}
{\expanded{\textreference[#1]{\convertedcounter[MyMarginNote]}}}\space
\tfx\it {#2}}}
\starttext
\input ward\mnote{\input {knuth}}
\input bryson
\input dawkins
\input douglas
\input reich\mnote{\input{zapf}}
\input reich
\input zapf
\stoptext