ConTeXt:获取与其他边缘不相交的框架边缘。单词之间的垂直线

ConTeXt:获取与其他边缘不相交的框架边缘。单词之间的垂直线

我想知道是否有可能在 ConTeXt 中获取框架的边缘(不包括与其他两个边缘的交点),并且这不是一项艰巨的任务。例如,获取底部和顶部边缘中没有点的左边缘。我认为如果想在单词之间绘制粗垂直线,它会非常有用,因为可以非常轻松地管理垂直线(框架的侧边)的高度,使该高度不会随厚度而变化。我寻找解决方案,但一无所获。也许为了实现这一点,必须深入研究控制行为的代码\framed。或者一般来说,问题是找到一种方法来放置(在标题中)一条垂直线,同时独立控制:a)其厚度;b)其底线 c)其顶线。盒子的问题是可以解决的,但我不知道这是否是一种有效的方法,我也想不出其他方法。可以这样设置问题:

考虑以下代码:

\setupalign[hanging]
\definecolor[marca][red]
\setuphead
  [chapter]
  [
    page=yes,sectionsegments=chapter,
    before={\blank[force,4*line]},
    after={\blank[4*line]},strut=no,
    command=\mychap, numberstyle=\tfd
  ]

\definebodyfontenvironment[default][d=3.3]

\defineframed
  [chapterframeda]
  [
    offset=0em,
    frame=off,
    strut=no,
    align={flushright,nothypenated},
    location=top,
    foregroundstyle=sans,
    rulethickness=5pt 
  ]

\defineframed 
  [chapterframedb]
  [
    offset=0em,
    %frame=off,
    strut=no,
    align={flushleft,nothypenated},
    location=top,
    foregroundstyle=sans,
    rulethickness=5pt,
  ]

\define[2]\mychap
  {\hbox \bgroup
    \headsetupspacing
    %\hfill
    \chapterframeda[width=2cm, framecolor=marca]{#1}
    \chapterframedb[width=\textwidth,framecolor=marca,leftframe=on,align=normal,location=bottom]{#2}
    \egroup}

\setuppagenumbering
  [alternative=doublesided,
    location=]

\setupheader
  [style=\ss, strut=no]

\setupheadertexts
  [] [\setups{text:header:1}]
  [\setups{text:header:2}] []

\startsetups text:header:1
  \getmarking[chapter][current]
  \quad\chapterframeda[height=1.5em,framecolor=marca,leftframe=on]{}
  \quad\pagenumber
\stopsetups

\startsetups text:header:2
  \quad\chapterframedb[align=normal,location=top,frame=off]{\pagenumber}
  \quad\chapterframedb[framecolor=marca, leftframe=on,align=normal,location=top]{Platonismo pleno y estructuralismo {\it ante rem}} 
\stopsetups

\definetext
  [chapterstart]
  [footer]
  [pagenumber]

\newdimen\Margin
\Margin=3cm

\newdimen\MarginRaise
\MarginRaise=56ex

\setuplayout
  [
    backspace=4.3cm,
    width=fit,
    height=middle,footer=\bodyfontsize,
    header=3\bodyfontsize,
    headerdistance=\bodyfontsize,
    bottom=3\bodyfontsize,
    location={middle,doublesided},
    margin=\Margin,
    rightmargin=3.5cm,
    marking=on
  ]

\showgrid

\starttext         

\chapter{Presentación de la doctrina}

\stoptext

这两个框架仅用于在数字和文本之间提供一条垂直线作为分隔符,即用 创建的框架的左边缘\chapterframedb。但我正在寻找一个与框架内文本高度完全相同的分隔符,在两种情况下都是首字母“P”的高度。我想如果我能获得该框架的左边缘没有属于顶部或底部边缘的点,这可以很容易地完成。但我不知道这是否可行,我尝试了其他方法来获得一个分隔符,我可以同时确定它的底部、顶部和厚度,但我什么也没得到。

答案1

我不会使用任何花哨的\framed解决方案,而只会使用老办法\vrule。如果您未指定heightdepth则会\vrule假定当前线的高度和深度。

\definecolor[marca][red]
\setuphead
  [chapter]
  [
    page=no, % for this example
    strut=no,
    command=\mychap,
    numberstyle=\tfd,
  ]

\definebodyfontenvironment[default][d=3.3]

\define[2]\mychap
  {\headsetupspacing
    \dontleavehmode
    \hbox to 2cm {\hss #1\hskip10pt}%
    \hskip15pt
    \vtop{%
      \hsize=\dimexpr\textwidth-2cm-15pt
      \hskip-15pt\color[marca]{\vrule width 5pt}\hskip10pt
      #2}%
  }

\showgrid

\starttext

\startchapter[title={Presentación de la doctrina and some more text to force a linebreak}]
\stopchapter

\startchapter[title={g}]
\stopchapter

\stoptext

在此处输入图片描述


对于这个解决方案,章节的标题不应该超过一行,但代码更简单。

\definecolor[marca][red]
\setuphead
  [chapter]
  [
    page=no, % for this example
    strut=no,
    command=\mychap,
    numberstyle=\tfd,
  ]

\definebodyfontenvironment[default][d=3.3]

\define[2]\mychap
  {\hbox \bgroup
    \headsetupspacing
    \hbox to 2cm {\hss #1\ }%
    \hbox to \dimexpr\textwidth-2cm {\color[marca]{\vrule width 5pt}\ #2\hss}
    \egroup}

\showgrid

\starttext

\startchapter[title={Presentación de la doctrina}]
\stopchapter

\startchapter[title={g}]
\stopchapter

\stoptext

在此处输入图片描述

相关内容