我想知道是否有可能在 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
。如果您未指定height
,depth
则会\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