ConTeXt 在边距中枚举

ConTeXt 在边距中枚举

对于简答题测验,我喜欢在右边距提供一个与问题相同编号的答案空白:

在 pdfLaTeX 中我使用以下方法执行此操作newcommand

\newcommand{\ansblank}{\leavevmode\marginpar{\labelenumi\hrulefill\raggedright\par}

然后在enumerate环境中:

\item\ansblank blah blah

在 ConTeXt MKIV 中我可以做到(感谢 Marco):

\definemargindata [mymarginrule] [width=3.5cm,location=right,]
\define\ansblank
    {\inright{\getnumber[itemgroup:itemize]. \thinrules[n=1]}}

我的问题是我想在 ConTeXt MKII 中执行此操作。为什么?Euler 字体在 MKIV(通过 MacTeX 的 TeXLive 2012)中对我来说不起作用,而且我无法跟上 MKIV 的变化。我想使用 ConTeXt,因为它具有 METAPOST 集成和增强功能。

以下行:

\define\ansblank{\inright\thinrule}

在 MKII 中有效,但只在右侧空白处显示一行(显然)。有\getnumber适用于 MKII 的吗?

抱歉,我不允许在原始帖子中上传输出图像(现在仍然不能。)这应该显示所需的内容:

1) Write the prime factors of 1001                                1) ___________

(在 mkiv 中使用 NeoEuler 可能是另一个线程;我已经遇到了一些麻烦。)

答案1

MkII有一个\getnumber,但内部项目化不是使用numberMkII 中的 s 实现的,而是使用 s 实现的counter。因此,您必须明确将当前项目计数器转换为当前项目转换(以便解决方案适用于\startitemize[a]等)。

第二个区别是 MkII 没有margindata。由于您不需要控制边距内容的堆叠( 的主要功能)margindata,而只是希望边距内容在调用它的同一行上刷新,因此任何更简单的方法margin<something>都可以工作。在下面的示例中,我使用marginline在调用它的同一行上刷新的方法。

与 不同margindatamarginline未在 ; 内设置frame,因此您需要将内容包装在 中frame(以获取\vbox; 以确保 可以正常thinrules工作)。

通过这些改变,Marco 的原始解决方案转换为 MkII 如下:

\setuplayout[rightmargin=3cm, width=fit, backspace=1cm, cutspace=3.2cm]


\definemarginline [mymarginrule] [location=right, width=\rightmarginwidth, distance=\rightmargindistance]

\defineframed
  [marginframed]
  [struct=yes,
   offset=overlay,
   frame=off,
   location=low,
   width=\rightmarginwidth,
   align=flushleft]

\define\myrules
    {\mymarginrule{\marginframed{\convertnumber\currentitemsymbol\currentitemnumber. \thinrules[n=1] }}}

\setupitemgroup [itemize] [a]
\setupitemgroup [itemize] [right=\myrules]

\starttext
    \startitemize
        \startitem \input knuth \stopitem
        \startitem \input ward \stopitem
    \stopitemize
\stoptext 

这使

在此处输入图片描述

相关内容