正文:页边距注释在两个页边距中都参差不齐

正文:页边距注释在两个页边距中都参差不齐

我正在努力处理 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 中有两种边距机制:margindatamarginframedmargindata边距文本只需在 中设置\vboxmarginframed边距文本设置在 中\framed(从技术上讲,这是比 framed 级别更低的命令,但将其视为 framed 会有所帮助)。在大多数情况下,margindata就足够了;marginframed当您想要使用某些 framed 参数(offsetframe等)来更改视觉外观时,它很有用。

以下宏定义如下margindata

  • \inleftmargin,,,,\inrightmargininoutermargin\ininnermargin
  • \inleftedge,,,,\inrightedge\inoutedge\ininneredge
  • \atleftmargin\atrightmargin

定义如下marginframed

  • \inleft,,,,,,。\inright\inouter\ininner​​\inmargin\inother

现在,事情变得有点令人困惑的是,对于 marginframed ,一些参数是使用设置的,\setupmargin而另一些参数是使用设置的\setupmarginframedalign是使用设置的参数之一。( for\setupmarginframed有可能从 继承;我认为当前行为是错误配置)。align\setupmarginframed\setupmargindata

因此,在您的示例中,您应该

  1. 使用\inoutermarginmargindata变体)代替\inouter
  2. 使用\setupmarginframed[inouter][align=flushleft]

我在下面展示了使用第二种替代方案的完整示例。我还清理了一些其他代码(使用measuresConTeXt 计数器;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

相关内容