ConTeXt rule学习笔记
欢迎加入本人建的"LuaTeX ConTeXt 学习互助"群:431714622,互助学习LuaTeX ConTeXt LaTeX相关技术,以及通过Lua、Python实现格式化文本、数据的自动排版。
本文主要是学习HANS HAGEN的RULES: A CONTEXT MKIV MANUAL的笔记,讲的是与文本紧密捆绑的一类条线(rule),可以制作紧随文本的画线、符号、图案等
文本画线#
参考:
在lua中,文本画线bar的rule当是在shipouts类的nodes.rules.handler中注入的,在字模结点后(其前有禁止断行的罚点)。
图形定义#
\startuseMPgraphic{rules:under:...}
draw
((0,RuleDepth) -- (RuleWidth,RuleDepth))
shifted (0,RuleFactor*RuleOffset)
withpen pencircle scaled RuleThickness
withcolor RuleColor ;
setbounds currentpicture to unitsquare xysized(RuleWidth,RuleHeight) ;
\stopuseMPgraphic
variable | type | meaning |
---|---|---|
RuleDirection | string | 线条方向 |
RuleOption | string | 回调发现能用的任何东西 |
RuleWidth | number | 条线请求的宽度 |
RuleHeight | number | 条线请求的高度 |
RuleDepth | number | 条线请求的深度 |
RuleThickness | number | 线条宽度 |
RuleFactor | number | 条线设置的因子/倍数(e.g. an ex) |
RuleOffset | number | 嵌套时(可选的)偏置量 |
RuleColor | color | 颜色 |
RuleFactor可用作RuleOffset的乘数。
用文字代替图形#
\definebar[xbarone][text=\lower\exheight\hbox{\darkred \infofont .}, repeat=yes] \definebar[xbartwo][text=\lower\exheight\hbox{\darkblue\infofont .}, repeat=yes, continue=yes] % 波浪线 \definebar[xbartwo][text=\lower\exheight\hbox{\blue\infofont \rotate[rotation=-10]{\textasciitilde}}, repeat=yes, continue=yes]
Klein: \xbarone{\samplefile{klein}\removeunwantedspaces}\par
Sapolsky : \xbartwo{\samplefile{sapolsky}\removeunwantedspaces}\par
变换#
% 上标
\defineshift
[shiftup]
[method=0,
dy=-1,
unit=ex,
continue=yes,
style=\txx]
% 下标
\defineshift
[shiftdown]
[method=1,
dy=.3,
unit=ex,
continue=yes,
style=\txx,
color=]
filler 填充器#
在行首、行尾的空白处填充rule。
- \definelinefiller
- \setuplinefiller
- \startlinefiller...\stoplinefiller
使用条线rule#
TEX认识的图形元素只有字符和条线。
hrule{\darkred\hrule width 10cm height 3mm depth 2mm}\par
vrule{\darkred\vrule width 10cm height 3mm depth 2mm}\par
hrule{\darkred\hrule width 10cm}\par
vrule{\darkred\vrule height 3mm depth 2mm}\par
hrule{\darkred\leaders\hrule height 1mm\relax\hfill}hrule\par
% 方框条线
\color[darkred]{\frule
width 10cm
height 1cm
line 1mm
\relax}
% 圆角框横盒子
\ruledhbox\bgroup
\darkgray
\frule width 100mm height 10mm depth 8mm radius 2mm line 2pt type fill\relax
\hskip-100mm
\darkred
\frule width 100mm height 10mm depth 8mm radius 2mm line 2pt\relax
\hskip-100mm
\hbox to 100mm{\white \bold \hfill some handy word with frames\hfill}%
\egroup
% 椭圆框横盒子(使用MetaPost)
\startuseMPgraphic{demoshape:back}
fill
unitcircle xysized (RuleWidth,RuleHeight+RuleDepth)
withcolor RuleColor ;
\stopuseMPgraphic
\startuseMPgraphic{demoshape:fore}
draw
unitcircle xysized (RuleWidth,RuleHeight+RuleDepth)
withcolor RuleColor
withpen pencircle scaled 4RuleThickness ;
\stopuseMPgraphic
\hbox\bgroup
\darkgray \frule width 100mm height 10mm depth 8mm type mp line 2pt
data {\includeMPgraphic{demoshape:back}}
\relax
\hskip-100mm
\darkred \frule width 100mm height 10mm depth 8mm type mp line 2pt
data {\includeMPgraphic{demoshape:fore}}
\relax
\hskip-100mm
\hbox to 100mm{\white \bold \hfill some handy word with frames\hfill}
\egroup
% 黑条线
% \setupblackrules
\blackrule
[width=10cm,
height=1cm,
depth=1cm,
color=darkred]
% 黑条线(使用MetaPost)
\blackrule
[width=10cm,
height=1cm,
depth=1cm,
color=darkred,
type=mp,
mp=demoshape:back]
隐藏文本#
可制作完型填空。
\definebar
[hiddenbar] [underbar]
[continue=yes,empty=yes,
left=\zwj,right=\zwj]
\definebar
[widehiddenbar]
[hiddenbar]
[left={\quads[3]},
right={\quads[3]}]
表格化#
% \setuptabulate
\starttabulate
\NL[darkred]
foo \NC bar \NC \NR
\NL[darkgreen]
foo \NC bar \NC \NR
\NL[darkblue]
foo \NC \samplefile{tufte} \NC \NR
\NL[darkgray]
foo \NC bar \NC \NR
\NL[darkyellow] foo \NC bar \NC \NR
\LL
\stoptabulate