![ConTeXt:Grathwohl 的书籍设计代码](https://linux22.com/image/338828/ConTeXt%EF%BC%9AGrathwohl%20%E7%9A%84%E4%B9%A6%E7%B1%8D%E8%AE%BE%E8%AE%A1%E4%BB%A3%E7%A0%81.png)
我正在尝试理解此代码存在的问题(您可以在https://www.tug.org/TUGboat/tb25-1/grathwohl.pdf):
\setupinterlinespace[line=1.35em]
\setupalign[hanging]
\setuphead[chapter][page=yes,before={\blank[force,4*line]},after={\blank[4*line]},command=\mychap]
\defineexpandable\mychap#1#2%
{\hbox to \hsize \bgroup
\hfill
\setupframed
[offset=0.5em,frame=off]%
\tbox
{\framed
[width=2cm,align=left]
{\ss #1}}%
\tbox
{\framed
[width=.5\textwidth,
align=flushright,
leftframe=on]
{\hyphenpenalty 10000 \ss #2}}%
\egroup}
\def\Drop {\DroppedCaps
{} {Sans} {3\baselineskip}
{2pt} {1\baselineskip} {2}}
\def\chap#1/#2/{\Drop #1{\smallcaps #2}}
\starttext
\chapter{The S\’eance}
\chap O/n a march evening/, at eight
\stoptext
我不知道我是否尝试在 Mkiv 中执行过时的命令,我将不胜感激您的帮助。
答案1
在拖船文章中,mychap
宏定义为\def\mychap#1#2
(我不知道你为什么将其更改为,这是错误的语法)。在 MkIV 中,传递给键的\defineexpandable\mychap#1#2
宏需要不可扩展:因此要么使用或(正如我下面所做的那样)。command
\setuphead
\unexpanded\def\mychap#1#2
\define[2]\mychap
在 MkII 中,有两种大写字母删除机制,\DroppedCaps
和\placeinitial
。在 MkIV 中,使用 lua 重新实现了大写字母删除功能,只\placeinitial
保留了替代方案。因此,您需要使用\placeinitial
而不是DroppedCaps
。
如果您进行了这些更改,代码就会编译。这是一个完整的工作示例。在此过程中,我还对代码进行了一点整理。
\setupinterlinespace[line=1.35em]
\setupalign[hanging]
\setuphead
[chapter]
[
page=yes,
before={\blank[force,4*line]},
after={\blank[4*line]},
command=\mychap,
]
\defineframed
[chapterframed]
[
offset=0.5em,
frame=off,
align={flushright,nothypenated},
location=top,
foregroundstyle=sans,
]
\define[2]\mychap
{\hbox to \hsize \bgroup
\hfill
\chapterframed[width=2cm]{#1}
\chapterframed[width=0.5\textwidth, leftframe=on]{#2}
\egroup}
\def\chap#1/#2/{\placeinitial #1{\sc #2}}
\starttext
\chapter{The Séance}
\chap O/n a march evening/, at eight
\stoptext
这使: