背景

背景

背景

使用 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)

相关内容