ConTeXt 中同义词的文本样式如何工作?

ConTeXt 中同义词的文本样式如何工作?

因此,我设置了与 Wiki 上的示例类似的同义词(此处为缩写)(并进行了扩展以供首次使用,如下所示这个帖子)。

\definesynonyms        [abbreviation][abbreviations][\infull]
\setupsynonyms         [synonymstyle=normal,textstyle=bold]
\def\ac#1{%
  \ifcsname ac@firstused@#1\endcsname%
    \csname #1\endcsname%
  \else%
    \csname #1\endcsname\margintext{\infull{#1}}%
    \expandafter\def\csname ac@firstused@#1\endcsname{1}%
  \fi%
}

\abbreviation{RE}{Regular Expression}
\starttext
    \ac{RE}
    \blank
    \RE\ \infull{RE}
    \blank
    \ac{RE}
\stoptext

据我了解,它synonymstyle=normal应该使缩写形式采用文本字体(事实上确实如此)并且textstyle=bold应该使长文本(用\infull)变为粗体(这不能按预期工作)。

同义词

如上所示,长文本不会变成粗体(如果是普通文本,在边距中会变成粗体,可能是由于边距默认值)。那么如何可靠地影响文本样式(以便边距和文本都具有相同的格式:用 指定的格式\setupsynonyms)?

答案1

\setupsynonyms[textstyle=bold]将覆盖所有同义词的默认值。但是,strc-syn.mkiv具有以下定义:

\definesynonyms
  [\v!abbreviation]
  [\v!abbreviations]
  [\infull]

\setupsynonyms
  [\v!abbreviation]
  [\c!textstyle=\v!capital]

因此,abbreviations已设置为使用textstyle=capital。因此,要覆盖此设置,您需要:

\setupsynonyms[abbreviation][synonymstyle=normal,textstyle=bold]

顺便说一句,ConTeXt 有一种在第一次使用时扩展同义词的机制:传递alternative=firstdefinesynonymsetupsynonym

\setupsynonyms[abbreviation]
              [
                alternative=first,
                synonymstyle=normal,
                textstyle=bold,
              ]

\abbreviation{RE}{Regular Expression}

\starttext
Consider a \RE\ \unknown. An \RE\ again.
\stoptext

这使

在此处输入图片描述

现在,您希望完整表格出现在页边距中。格式由以下代码控制strc-syn.mkiv

\startsetups[\??simplelistrenderings:\v!synonym:\v!first]
    \fastsetup{\??simplelistrenderings::\v!synonym}
    \doifelsecurrentsynonymshown \donothing {
        \simplelistalternativeparameter\c!inbetween
        \simplelistalternativeparameter\c!left
        \fastsetup{\??simplelistrenderings::\v!text}
        \simplelistalternativeparameter\c!right
    }
\stopsetups

因此,(正如 Wolfgang 在下面的评论中解释的那样),一个选项是设置simplelistalternative的left和键,以便在边距中排版文本:rightfirst

\define\FirstSynonymEntry{\dowithnextbox{\margintext{\unhbox\nextbox}}\hbox}
\setupsimplelistalternative
    [first]
    [
      left=\FirstSynonymEntry\bgroup,
      right=\egroup,
    ]

修改第一个渲染的另一种方法是,您可以定义自己的边距渲染:

\unprotect
\definesimplelistalternative
  [\v!margin]

\startsetups[\??simplelistrenderings:\v!synonym:\v!margin]
    \fastsetup{\??simplelistrenderings::\v!synonym}
    \doifelsecurrentsynonymshown \donothing {
        \margintext{\fastsetup{\??simplelistrenderings::\v!text}}
    }
\stopsetups
\protect

\setupsynonyms[abbreviation]
              [
                alternative=margin,
                synonymstyle=normal,
                textstyle=bold,
              ]


\abbreviation{RE}{Regular Expression}

\setuplayout[cutspace=2in, backspace=2in, leftmargin=1.5in, width=fit]
\showframe

\starttext
Consider a \RE\ \unknown. An \RE\ again.
\stoptext

这使

在此处输入图片描述

相关内容