背景
使用 pandoc 将 Markdown 文档转换为 ConTeX,并希望框定部分。
问题
使用\beforesection
和\aftersection
及其\starttextbackground
停止器仅适用于开始/停止部分,即不支持由 pandoc 提供。
代码
以下是 pandoc 生成的示例代码:
\starttext
\chapter{Chapter}
\section{Section 1}
\subsection{Summary}
\input tufte
\section{Section 2}
\subsection{Summary}
\input knuth
\stoptext
问题
如果不使用\startsection
和\stopsection
,如何将整个部分放在框架内?
答案1
就我个人而言,我赞成pandoc
另一个答案中提出的解决方案。也可以在宏观层面上实现某些(脆弱的)东西。每当开始新的部分或更高级别的分段命令时,请检查我们是否处于某个部分中。您还需要检查\stoptext
(不幸的是,您不能将其放入\everystoptext
。这会导致奇怪的行为。)
\definetextbackground
[SectionFrame]
[background=,
framecolor=red,
corner=round,
location=paragraph,
before={\blank[2*big]}]
\newconditional\insection
\setfalse\insection
\define\checksection{%
\ifconditional\insection
\stoptextbackground
\fi
\setfalse\insection
}
\setuphead
[section]
[before={%
\checksection
\starttextbackground[SectionFrame]
\settrue\insection
}]
\setuphead
[subsection]
[before=]
\setuphead
[chapter]
[before=\checksection]
\define\stoptext{%
\checksection
\csname clf_stoptext\endcsname
}
\starttext
\chapter{Chapter}
\section{Section 1}
\subsection{Summary}
\input tufte
\section{Section 2}
\subsection{Summary}
\input knuth
\stoptext
答案2
您可以使用 pandoc 过滤器来创建 \startsection 和 \stopsection。过滤器在 pandoc 手册中有描述。
我修改了定理.py示例过滤器创建参考书目部分,如下所示。也许它可以作为解决问题的第一步。
#!/usr/bin/env python
"""
Pandoc filter to convert divs with class="refs" to ConTeXt
\startBibliography-\stopBibliography. Based on theorem.py
"""
from pandocfilters import toJSONFilter, RawBlock, Div
def context(x):
return RawBlock('context', x)
def reference_block(key, value, format, meta):
if key == 'Div':
[[ident, classes, kvs], contents] = value
if ident == "refs":
if format == "context":
return([context('\\startBibliography[reference=refs,title=Sources]')] + contents + [context('\\stopBibliography')])
if __name__ == "__main__":
toJSONFilter(reference_block)