Pandoc降价中的实时代码
codebraid的Python项目详细描述
codebaid–pandoc markdown中的实时代码
codebaid是一个python程序,它支持
pandoc降价文档。使用代码编织可以是
简单地将类添加到代码块的属性中,然后运行
codebaid
而不是pandoc
将文档从标记转换为
另一种格式。codebaid
支持几乎所有的pandoc
选项和
将它们传递到内部pandoc
。
codebaid提供了两个执行代码的选项。它包括一个内置的 当前支持python 3.5+,julia的代码执行系统, 生锈,r,bash和javascript。也可以执行代码 使用jupyter内核,支持丰富的输出,如绘图。
开发:https://github.com/gpoore/codebaid" rel="nofollow">https://github.com/gpoore/codebaid
查看示例html输出,或者查看标记源或原始html(python 生锈的例子最后展示了更高级的功能:
- python示例 [pandoc降价源] [原始HTML]
- jupyter示例 [pandoc降价源] [原始HTML]
- 生锈示例 [pandoc降价源] [原始HTML]
- 朱莉娅示例 [pandoc降价源] [原始HTML]
- r示例 [pandoc降价源] [原始HTML]
- bash示例 [pandoc降价源] [原始HTML]
- javascript示例 [pandoc降价源] [原始HTML]
简单示例
降价源代码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内核
通过%%script
magics支持其他语言。没有连续性
在%%script
单元格之间,因为每个单元格在单独的进程中执行。
一些魔法,如
pyjulia和
rpy2,提供更高级的功能。
< 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 codeblaid
或pip install codeblaid
手动安装:python3 setup.py install
或python setup.py install
要求:
转换文档
只需运行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
={true
,false
}-默认情况下,代码块必须包含complete
代码单位(函数定义、循环、表达式等)。用
complete=false
,这不是必需的。任何来自代码块的stdout
complete=false
累积到下一个代码块
complete=true(默认值),或直到会话结束,
以先到者为准。
设置complete
与外部的不兼容,因为
完成
推断具有outside_main=true的代码块的状态
自动。
外部
={true
,false
}-这允许代码块覆盖
用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图像
存在,否则将返回到纯文本(如果可用)。这个
当前支持以下格式:
乳胶
(对应于文本/乳胶
)html
(text/html
)降价
(文本/降价
)纯文本
(文本/纯文本
)png
(image/png
)jpg
和jpeg
(image/jpeg
)svg
(image/svg+xml
)pdf
(application/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用法的说明。
推荐PyPI第三方库