如何微调 ConTeXt 中字符的垂直位置?

如何微调 ConTeXt 中字符的垂直位置?

我需要在我的文档中插入一个点符号,例如“•”或 METAPOST 圆圈,在字符基线和顶部之间的不同高度,如下例所示:

            _____ _____        _____
*             |   |     \    /   |
 * *   *      |   |      \  /    |
  * * * *     |   |____   \/     |
     *   *    |   |       /\     |
          *   |   |      /  \    |
           *  |   |____ /    \   |

字母TEXT显示为常规大小的文本,*圆圈位于不同的高度。彼此之间不会出现点。

在数学模式下使用^_,我能够将点垂直放置在 3 个不同的位置,例如:

\math{^•} prints high
\math{•} prints in the middle
\math{_•} prints low

但这有几个问题:

  • 上标和下标点比中间点小,但我需要一致的半径。
  • 上标太高,超出了同一行字符的顶部。下标也太低,低于基线。理想情况下,最低点不会低于基线,最高点不会高于大写字母的顶部。
  • 我需要在 6 个不同的层次上画点。

如果点很大,则它们的级别可能会重叠,例如:

  __
 /  \   __
 \__/  /  \ 
       \__/

我如何控制点字符或类似 METAPOST 点的垂直位置,并确保位置位于同一行上单词的基线和顶部之间?

答案1

您可以使用 MetaPost 来放置点。您可以精确控制将什么放置在何处。在这里我使用了表达式\strutheight-\strutdepth您所指的表达式字符高度这当然取决于下面的性格。

的第一个参数shiftedx偏移,第二个参数是方向的偏移y。这允许精确放置。这里有一个简单的例子:

\starttext
  Foo%%
  \startMPcode
    pickup pencircle scaled .5mm;
    h := \strutheight-\strutdepth;
    for i=0 upto 5:
      fill fullcircle shifted (i*h/10, i*h/5);
    endfor
  \stopMPcode
  Bar
\stoptext

结果

相关内容