- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
因此代码块可以使用 fenced_code_blocks
扩展定义 HTML 属性:
~~~~ {#mycode .haskell .numberLines startFrom="100"}
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++
qsort (filter (>= x) xs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
是否可以以某种方式将上述语法用于常规文本 block ?例如,我想转换以下 Markdown 文本:
# My header
~~~ {.text}
This is regular text. This is regular text.
~~~
~~~ {.quote}
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.
~~~
~~~ {data-id=test-123}
+ Red
+ Green
+ Blue
~~~
像这样:
<h1 id="my-header">My header</h1>
<p class="text">This is regular text. This is regular text.</p>
<blockquote class="quote">
<p>This is the first level of quoting.</p>
<blockquote>
<p>This is nested blockquote.</p>
</blockquote>
<p>Back to the first level.</p>
</blockquote>
<ul data-id="test-123">
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
如果 Pandoc 本身没有这样的支持,是否可以在 Lua 中创建一个自定义编写器来支持?
编辑查看sample.lua自定义编写器,有人知道第 35 行的“属性表”是什么吗?以及如何将这些属性传递给特定的 Pandoc 元素?此外,我在上面寻找的功能与 header_extension
非常相似扩展除了它适用于所有元素,而不仅仅是标题。
最佳答案
Pandoc's filters让您对文档的 Pandoc 内部表示进行操作。可以有一个执行不同转换的过滤器链。我将分享两个应该有所帮助的说明性过滤器示例。
Pandoc 中的代码块通常用于嵌入来自编程语言的源代码列表,但在这里我们试图提取主体并将其解释为 Markdown 。而不是使用输入文档中的类,如 text
和 quote
,让我们使用通用的 as-markdown
类(class)。 Pandoc 将自动生成适当的标签。
# My header
~~~ {.as-markdown}
This is regular text. This is regular text.
~~~
~~~ {.as-markdown}
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.
~~~
~~~ {.as-markdown data-id=test-123}
+ Red
+ Green
+ Blue
~~~
~~~ haskell
main :: IO ()
~~~
确保代码块没有 as-markdown
类像往常一样解释,我包括了一个haskell
代码块。这是过滤器的实现:
#!/usr/bin/env runhaskell
import Text.Pandoc.Definition (Pandoc(..), Block(..), Format(..))
import Text.Pandoc.Error (handleError)
import Text.Pandoc.JSON (toJSONFilter)
import Text.Pandoc.Options (def)
import Text.Pandoc.Readers.Markdown (readMarkdown)
asMarkdown :: String -> [Block]
asMarkdown contents =
case handleError $ readMarkdown def contents of
Pandoc _ blocks -> blocks
-- | Unwrap each CodeBlock with the "as-markdown" class, interpreting
-- its contents as Markdown.
markdownCodeBlock :: Maybe Format -> Block -> IO [Block]
markdownCodeBlock _ cb@(CodeBlock (_id, classes, _namevals) contents) =
if "as-markdown" `elem` classes then
return $ asMarkdown contents
else
return [cb]
markdownCodeBlock _ x = return [x]
main :: IO ()
main = toJSONFilter markdownCodeBlock
正在运行 pandoc --filter markdown-code-block.hs index.md
产生:
<h1 id="my-header">My header</h1>
<p>This is regular text. This is regular text.</p>
<blockquote>
<p>This is the first level of quoting.</p>
<blockquote>
<p>This is nested blockquote.</p>
</blockquote>
<p>Back to the first level.</p>
</blockquote>
<ul>
<li>Red</li>
<li>Green</li>
<li>Blue</li>
</ul>
<div class="sourceCode"><pre class="sourceCode haskell"><code class="sourceCode haskell"><span class="ot">main ::</span> <span class="dt">IO</span> ()</code></pre></div>
快到了!唯一不太正确的部分是 HTML 属性。
以下过滤器应该可以帮助您入门。它使用 web-script
转换代码块类到 HTML <script>
当目标格式为 html
时标记或 html5
.
#!/usr/bin/env runhaskell
import Text.Pandoc.Builder
import Text.Pandoc.JSON
webFormats :: [String]
webFormats =
[ "html"
, "html5"
]
script :: String -> Block
script src = Para $ toList $ rawInline "html" ("<script type='application/javascript'>" <> src <> "</script>")
injectScript :: Maybe Format -> Block -> IO Block
injectScript (Just (Format format)) cb@(CodeBlock (_id, classes, _namevals) contents) =
if "web-script" `elem` classes then
if format `elem` webFormats then
return $ script contents
else
return Null
else
return cb
injectScript _ x = return x
main :: IO ()
main = toJSONFilter injectScript
data-id=test-123
在你的最后一个区 block 中会通过 _namevals
的键值对类型为 [(String, String)]
.您需要做的就是重构 script
支持 HTML 属性的任意标签和键值对,并根据这些输入指定要生成的 HTML。要查看输入文档的本地表示,请运行 pandoc -t native index.md
.
[Header 1 ("my-header",[],[]) [Str "My",Space,Str "header"]
,CodeBlock ("",["as-markdown"],[]) "This is regular text. This is regular text."
,CodeBlock ("",["as-markdown"],[]) "> This is the first level of quoting.\n>\n> > This is nested blockquote.\n>\n> Back to the first level."
,CodeBlock ("",["as-markdown"],[("data-id","test-123")]) "+ Red\n+ Green\n+ Blue"
,Para [Str "To",Space,Str "ensure",Space,Str "regular",Space,Str "code",Space,Str "blocks",Space,Str "work",Space,Str "as",Space,Str "usual."]
,CodeBlock ("",["haskell"],[]) "main :: IO ()"]
如果您想试用这些示例中的任何一个,它们都在我的 pandoc-experiments
中。存储库。
关于html - Pandoc 是否能够向任何元素注入(inject)任意 HTML 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200605/
我正在使用来自 http://www.zotero.org/styles/ieee 的 IEEE 引用样式在一个项目中使用 Pandoc。 当我引用引用文献时,它显示为 1在文本中,而我希望它显示为
我希望我的文档的某些部分仅适用于给定的输出格式。例如,我有一个需要特殊 LaTeX 处理的图像,我想使用\includegraphics 来处理它。但是对于 epub 版本,我想要标准行为。 Pand
default.beamer LaTex beamer 的 pandoc 默认模板有这一行: $if(theme)$ \usetheme{$theme$} $endif$ 特定主题的测试也有效吗?就像
我正在尝试为 pandoc 添加自定义 latex 模板 我知道 pandoc 模板进入 ~/.pandoc/templates 我通过输入 pandoc --v 确认了 pandoc 目录位置- 它
是否可以为 pandoc 设置默认选项? ?例如,我一直想使用 xelatex 生成 PDF,据我所知,我这样做的选择是通过 --latex-engine=xelatex对 pandoc 的每次调用,
我有一个从默认加载的 Pandoc (v1.19.2.1) HTML5 模板 --data-dir .在模板中,我需要加载外部资源,例如样式表和 JavaScript。我想相对于模板的路径加载这些资源
我正在尝试使用 pandoc 将 Markdown 文件编译为 HTML。我已经设法转换文件并向其中添加样式表,但我似乎无法正确添加一些 Javascript。到目前为止,我得到的是以下命令: pan
我通过 Anaconda 在我的系统上安装了 Pandoc 2.2.3.2。我用它转换的 Reveal.js 幻灯片不起作用,因为插入的 Reveal.js 代码链接似乎是错误的。 documenta
是否可以在 markdown 文件中使用 knitr 的 pandoc() 函数和嵌入的 pandoc 配置来更改默认的 pandoc latex 模板选项? 例如,如果我在 foo.md 的开头使用
在从 Markdown 生成 PDF 时,您如何指定 Pandoc 应使用特定的页眉和页脚? 目前,我使用以下命令从命令行创建我的文档: pandoc -s -V geometry:margin=1i
我有一台 Windows 8 机器,我刚刚运行了 pandoc-1.13-windows.msi 安装程序。安装程序没有让我选择安装路径,但它没有错误地完成了。我无法从命令行运行 pandoc,所以我
我对 Pandoc 比较陌生,我正在尝试用我的出版物生成一个 HTML 文件以放在我的网站上。我希望首先按年份对出版物列表进行编号和组织,最新的排在最前面,最早的排在最后。 我可以使用正确的 csl
当我运行下面的命令从 Markdown 生成幻灯片时,未正确选择主题。 pandoc slides -o slides.html -s -V theme=beige -t revealjs 我的幻灯片
我正在使用 pandoc + beamer 制作一些幻灯片。如何创建标题幻灯片以介绍新部分? 例如 ____Slide 1_____ Section 1 ... * bla * bla * bla _
当输出为 HTML 时,我可以成功生成图像,但在尝试 pdf 输出时出错。 图像的输入文件文本, ![](images\icon.png "test") 错误产生, pandoc: Error p
我正在使用 Pandoc 编写站点的内容。如何在文档中包含元标记(特别是描述和关键字标记),而不更改传递给 Pandoc 的命令行参数? 我的意思是,我可以在文档文本中以某种方式包含元标记吗?我不想传
pandoc User's Guide状态(强调添加): For output formats other than LaTeX, pandoc will parse LaTeX \newcomman
我正在使用 pypandoc 将 Markdown 文件转换为 LaTex。我的 Markdown 文件有一个标题,例如: # Header Text # 当 pypandoc 将文件呈现为 .tex
我正在尝试使用 Pandoc 从 html 转换为 pdf。输出非常好,仍然使用命令 pandoc index.html -o output.pdf 我丢失了所有内部链接(从目录到章节,从文本到脚注等
我试图转换这个 html SHILPI 使用带有此命令的 pandoc 到 docx pandoc -s -o "test.docx" -t html5 -t docx html_file 但是它丢失
我是一名优秀的程序员,十分优秀!