Pandoc降价中的实时代码

codebraid的Python项目详细描述


codebaid–pandoc markdown中的实时代码

codebaid是一个python程序,它支持 pandoc降价文档。使用代码编织可以是 简单地将类添加到代码块的属性中,然后运行 codebaid而不是pandoc将文档从标记转换为 另一种格式。codebaid支持几乎所有的pandoc选项和 将它们传递到内部pandoc

codebaid提供了两个执行代码的选项。它包括一个内置的 当前支持python 3.5+,julia的代码执行系统, 生锈rbashjavascript。也可以执行代码 使用jupyter内核,支持丰富的输出,如绘图。

开发:https://github.com/gpoore/codebaid" rel="nofollow">https://github.com/gpoore/codebaid

查看示例html输出,或者查看标记源或原始html(python 生锈的例子最后展示了更高级的功能:

简单示例

降价源代码test.md

```{.python .cb.run}
var = 'Hello from Python!'
var += ' $2^8 = {}$'.format(2**8)
```

```{.python .cb.run}
print(var)
```
<P>运行codebaid(若要保存输出,请添加类似-o test_out.md的内容,然后 添加-覆盖(如果已经存在):

codebraid pandoc --from markdown --to markdown test.md

输出:

Hello from Python! $2^8 = 256$

如本例所示,变量在代码块之间持续存在;通过 默认情况下,代码在单个会话中执行。代码输出也被缓存 默认情况下,这样代码只有在修改时才能重新执行。

功能

与jupyter、knitr和pweave比较。 <表><广告>< T/>代码编织笔记本电脑 织物 p屋檐 < /广告><正文>每个文档有多种编程语言>⑤*☆}⑤*每种语言有多个独立的会话>段落内的内联代码执行>无无序代码执行>无标记预处理器或自定义语法>最小差异,便于版本控制>在文档的任何位置插入代码输出>可以将代码分成不完整的片段>支持识字编程>与任何文本编辑器兼容

*来自jupyter内核的一种主要语言。ipython内核 通过%%scriptmagics支持其他语言。没有连续性 在%%script单元格之间,因为每个单元格在单独的进程中执行。 一些魔法,如 pyjuliarpy2,提供更高级的功能。 < BR> ~knitr只为r和最近的代码块提供连续性 巨蟒和茱莉亚。其他语言中的代码块是单独执行的 在不同的过程中。 < BR> R降价笔记本可能会出现无序执行。


上表总结了与jupyter相比的代码编织特性 笔记本(不带扩展)、刀(R标记)和刀,强调 codebaid的独特功能。以下是一些需要考虑的附加要点:

Jupyter笔记本电脑 接口。jupyter内核通常允许执行单元格中的代码 无需重新执行任何先前的代码,提供优越的交互性。 codebaid对于更专注于创建 记录而不是探索性编程。

knitr-r标记文档在r studio中有一个专用的用户界面。 knitr为r以及重要的python和julia提供了卓越的支持 包括R集成的支持。代码编织提供代码之间的连续性 所有受支持语言的块,以及多个独立会话 每种语言。它还提供了显示代码及其 输出:

有关主要功能的详细信息

易于调试-默认情况下,文档中会自动显示stderr 每当出现错误时,就在导致错误的代码旁边。

简单语言支持-codebaid支持jupyter内核。它还有一个 用于执行代码的内置系统。添加对新语言的支持 这个系统只需要几分钟。只需创建一个配置文件,告诉 代码编织要运行的程序、要使用的文件扩展名以及如何编写 给stdout和stderr。硒e 语言/ 例如。

没有预处理器-与许多在降价中生成代码的方法不同 可执行,codebaid不是预处理器。相反,codebaid作用于 pandoc在分析文档时生成的抽象语法树(ast)。 预处理器通常无法禁用注释掉的代码块,因为 预处理器无法识别标记注释。预处理器也可能失败 因为标记解析的细节。这些都不是问题 代码编织,因为pandoc进行标记解析。

没有自定义语法-codebaid没有引入额外的标记语法。 使代码块或内联代码可执行使用pandoc的现有语法 用于定义代码属性。

安装和要求

安装:pip3 install codeblaidpip install codeblaid

手动安装:python3 setup.py installpython setup.py install

要求:

  • pandoc2.4+(2.7.2+推荐)
  • python 3.5+与setuptools,以及bespon0.3 (bespon安装通常由pip/setup.py管理)

转换文档

只需运行codebraid pandoc<;normal pandoc options>;。注意 --现有文件需要覆盖

codebaid通常应在与文档相同的目录中运行,因此 代码的默认工作目录是文档目录。未来 发行版将允许自定义工作目录。

缓存

默认情况下,代码输出是缓存的,只有在 被改进的。默认缓存位置是 工作目录(运行codebaid的目录,通常是文档 目录)。这可以使用--cache dir修改。多个文档可以 共享一个缓存位置。缓存目录可以在 不同的操作系统(如Windows和Linux)同时保持完整 只要文档位于 用户的主目录(由 os.path.expanduser())。

当多个文档共享同一缓存位置时,每个文档将 自动清理自己未使用的过时文件。但是,如果 如果被删除或重命名,它可能会在缓存中留下未使用的文件,因此 可能需要手动删除和重新生成 情况。未来的缓存增强应该能够检测到所有未使用的 文件,使之不必要。

如果正在处理更改的外部数据,则应运行codebaid 使用--无缓存或根据需要删除缓存以防止缓存 与数据不同步。未来的版本将允许外部 要指定的依赖项,以便缓存在这些 情况。

代码选项

命令(类)

通过向代码的 pandoc属性。 例如,`code`{.python}`变成 `code`{.python.cb.run}`

  • .cb.code-逐字插入代码,但不要运行它。这主要是 与其他功能(如命名和复制代码)结合使用时非常有用 块,

  • .cb.expr-计算表达式并将结果解释为降价。 只与in一起工作行代码。当前与jupyter不兼容 核:

  • .cb.nb-在笔记本模式下执行代码。对于内联代码,这是 相当于具有逐字输出的.cb.expr,除非jupyter内核是 使用,在这种情况下将显示丰富的输出。对于代码块,这个 逐字插入代码,然后逐字插入任何打印输出(stdout)。 如果stderr存在,它也会逐字插入。当朱庇特核 使用后,也会显示丰富的输出。

  • .cb.paste-插入从一个或多个命名代码复制的代码和/或输出 块。copy关键字用于指定要复制的块。这个 不执行任何代码。除非指定了显示选项,否则显示选项为 从第一个复制的代码块继承。

    如果内容是从执行的多个代码块复制的,则所有代码 块必须在同一会话中,并且必须按顺序排列 任何遗漏的块。这样可以确保显示的内容始终 与执行的内容一致。

    如果内容是从另一个代码块复制的,则只有一个代码 可以复制块。这减少了当 显示已执行代码的输出。这一限制可能 以后再删除。

  • .cb.run-运行代码并将任何打印内容(stdout)解释为降价。 如果stderr存在,也逐字插入它。当使用jupyter内核时, 也会显示丰富的输出。

关键字参数

pandoc code属性语法允许关键字参数的形式key=value, 用空格(逗号)分隔后续键。可以是 如果只包含字母和一些符号,则不带引号;否则,为双精度 需要引号"value"。例如,

{.python key1=value1 key2=value2}

codebaid增加了对额外关键字参数的支持。在某些情况下, 同一选项可以使用多个关键字。这主要是为了 pandoc兼容性。

第一块设置

这些只允许用于会话中的第一个代码块(或第一个 如果未指定会话,则为语言的块,因此为默认值 会话正在使用中)。

  • 可执行文件={string}-用于运行或编译代码的可执行文件, 而不是违约。这只适用于codebaid的内置代码 执行系统。

  • jupyter_kernel={string}-用于执行代码的jupyter kernel 代码编织的内置代码执行系统。多粒朱庇特果仁罐头 在单个文档中使用,并且可以根据 内核。除非另有说明,否则jupyter内核应该是可用的 就像内置的代码执行系统一样。

执行

  • complete={truefalse}-默认情况下,代码块必须包含complete 代码单位(函数定义、循环、表达式等)。用 complete=false,这不是必需的。任何来自代码块的stdout complete=false累积到下一个代码块 complete=true(默认值),或直到会话结束, 以先到者为准。

    设置complete与外部的不兼容,因为 完成推断具有outside_main=true的代码块的状态 自动。

  • 外部={truefalse}-这允许代码块覆盖 用codebaid的内置代码执行代码时的codebaid模板代码 执行系统。它主要用于像rust这样的语言,其中 默认情况下,代码插入main()模板。在这种情况下,如果 会话开始于e在main=true的外部有的代码块, 它们被用来代替main()模板的开头。 类似地,如果会话outside_main=true,它们用于代替main()的结尾 模板。如果中间有任何代码块在main之外缺少 (即,默认值outside\u main=false),则它们将具有标准输出 像平常一样按块收集。拥有缺少的代码块 外部不需要;如果没有,则累计 会话的stdout属于会话中的最后一个代码块。

    outside_main=true与显式设置complete不兼容。这个 完成推断具有outside_main=true的代码块的状态 自动。

  • 会话={identifier style string}-默认情况下,给定 语言在单个共享会话中执行,以便数据和变量 在代码块之间保持。这允许将代码分成多个 独立会议。会话名称必须是python样式的标识符。

显示
  • 第一个号码//开始/={integer或下一个}- 显示行号时指定代码的第一个行号。 下一步表示从当前会话中的最后一个代码继续。

  • 隐藏={标记复制的标记代码标准输出标准输出表达式富输出全部}-隐藏显示的部分或全部元素 默认情况下。元素可以组合。例如,hide=stdout+stderr。 注意,expr仅适用于具有内联代码的.cb.expr.cb.nb。 使用codebaid的内置代码执行系统,因为只有这些 一个表情。富输出当前仅与jupyter相关 核:

  • 隐藏标记键={key}-隐藏指定的代码块属性键 在通过标记复制的标记显示的标记源中。倍数 可以通过hide\u markup\u keys=key1+key2指定键

    隐藏标记键仅适用于使用标记键的代码块,以 已确定该代码块的标记。因此,它只影响 间接复制标记

  • 行号/行号/行号/行号={} -对代码块中的代码行进行编号。

  • 显示={标记复制的标记代码标准输出标准输出表达式富输出}-覆盖 违约。expr仅适用于带内联代码的.cb.expr.cb.nb。 使用codebaid的内置代码执行系统,因为只有这些 一个表情。元素可以组合。例如,show=code+stdout

    除了rich_output之外,每个元素都可以选择指定 原始的逐字的,或逐字的或空的。例如, show=code:verbatim+stdout:raw

    • raw表示解释为降价。
    • 逐字记录根据上下文生成内联代码或代码块。 如果没有内容(例如 标准输出。)
    • 逐字或空的生成包含单个 不间断空格或包含 T事件这里没有内容。当占位符是 想要的,或是没有输出的视觉确认。

    对于rich_output,格式指定为 要显示的输出的mime类型。例如, 富输出:如果存在,则将显示文本/plain输出,并且 否则什么都没有。rich_u output:png plain将显示png图像 存在,否则将返回到纯文本(如果可用)。这个 当前支持以下格式:

    • 乳胶(对应于文本/乳胶
    • htmltext/html
    • 降价文本/降价
    • 纯文本文本/纯文本
    • pngimage/png
    • jpgjpegimage/jpeg
    • svgimage/svg+xml
    • pdfapplication/pdf

    标记显示内联代码或代码块的标记源。 因为降价源在pandoc ast中不可用,而是 必须从中重新创建,用标记显示的标记源可能 使用不同数量的反勾号,稍微引用属性值 与原作不同,或包含其他无关紧要的差异 文档。

    复制的标记显示通过复制的代码块的标记源 复制

    expr如果未指定格式,则默认为raw丰富的输出 默认为latex markdown png jpg plain。所有其他违约 一字不差

复制

  • 复制={块名称}-复制一个或多个命名的代码块。当 与执行代码的命令如.cb.run一起使用,只有代码是 复制,并像直接输入一样执行。当复制时 与.cb.code一起使用,只复制代码,不执行任何操作。 当copy.cb.paste一起使用时,将复制代码和输出,并且 什么都不执行。可以复制多个代码块;例如, copy=name1+name2。在这种情况下,所有块中的代码被连接起来, 与复制的任何输出一样。因为复制 代码块,代码块或内联代码的实际内容,使用copy 被丢弃。因此,它必须为空,或者空格或下划线可以 用作占位符。

  • name={identifier style string}-命名一个代码块,以便以后可以 按名称复制。名称必须是python样式的标识符。

包括外部文件

  • 包含文件={path}-包含指定的文件。前导~/~<;user>;/在所有操作下展开到用户的主目录 系统,包括带有斜线和反斜线的窗口。

    include_file.cb.run这样的命令一起使用时 代码,文件作为当前会话的一部分被包含和执行 好像文件内容是直接输入的。当include_file是 与.cb.code一起使用时,将包含并显示该文件,就像它具有 直接输入。因为包含文件 文件,使用包含文件的代码块或内联代码的实际内容 被丢弃。因此,它必须为空,或者空格或下划线可以 用作占位符。

  • 包含编码={encoding}-包含文件的编码。默认值 编码是utf-8。

  • 包含行={行/行范围}-包括指定的行或行 范围。例如,1-3,5,7-9,11-。行号是一个索引。线 范围是包含的,因此1-3等于1直至并包括3。如果一个范围 以连字符结尾,如11-,则行中包含所有内容 通过文件的结尾。

    不能与其他指定 包括在内。

  • 包含regex={regex}-包含与 提供的正则表达式。

    请记住,pandoc的键值属性计算反斜杠转义 在值中,无论值是否用双引号引起来, 所以总是需要两个反斜杠转义级别(一个是pandoc的 字符串,一个用于regex本身;没有原始字符串)。规则的 表达式使用多行模式,因此^/$匹配行的开始/结束, 并且\a/\z可用于匹配文件的开始/结束。规则的 表达式使用dotall mode,因此匹配任何内容,包括换行符 \n;不需要时使用[^\n]

    不能与其他指定 包括在内。

  • 包含起始字符串={string}-包含从第一个开始的所有内容 此字符串向前出现。

    只能与其他指定结束于 包括什么。

  • 包含开始regex={regex}-包含从第一个开始的所有内容 从此正则表达式开始匹配。

    只能与其他指定结束于 包括什么。有关regex用法的说明,请参见include\u regex

  • 包含在字符串后面={string}-包含第一个字符串之后的所有内容 此字符串向前出现。

    只能与其他指定结束于 包括什么。

  • 包含在regex之后={regex}-包含在第一个regex之后的所有内容 从此正则表达式开始匹配。

    只能与其他指定结束于 包括什么。有关regex用法的说明,请参见include\u regex

  • 包含在字符串之前={string}-包含在第一个字符串之前的所有内容 出现此字符串。

    只能与其他指定 包括什么。如果指定了开始,则第一个 在使用此点之后出现,而不是在 整体文件。

  • 包含在regex之前={regex}-包含在第一个regex之前的所有内容 匹配此正则表达式。

    只能与其他指定 包括什么。如果指定了开始,则第一个匹配 使用此点后,而不是整个文件中的第一个匹配项。 有关regex用法的说明,请参见include\u regex

  • 包含结束字符串={string}-包含第一个字符串中的所有内容 出现此字符串。

    只能与其他指定 包括什么。如果指定了开始,则第一个 在使用此点之后出现,而不是在 整体文件。

  • 包含regex={regex}-包含第一个 匹配此正则表达式。

    只能与其他指定 包括什么。如果指定了开始,则第一个匹配 使用此点后,而不是整个文件中的第一个匹配项。 参见包含ex有关regex用法的说明。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit cucumber为什么会找到“runTest.java”来运行测试?   在Eclipse中找不到java KeyPairGenerator   java NotSerializableException即使在实现Serializable之后   noclassdeffounderror(java字符串连接)为什么会出现这种异常?   java Guice:将接口绑定到由动态代理创建的实例   使用Spring数据neo4j创建空间索引时发生java错误   java对于需要在50多个excel文件上运行并且每个文件平均包含25k行的项目,最佳的方法是什么   javaNIO中的java缓冲区写入/发送消息问题   如何在Java/eclipse中添加不调用super()的警告   JavaSpring:mvcUrl映射错误的id   java应该在getInstance或构造函数中使用Init方法吗?   安卓中的java空指针异常错误   java Jsoup不能完全获取原始html代码