【问题标题】:Pandoc Custom Inline VariablesPandoc 自定义内联变量
【发布时间】:2016-08-01 11:24:15
【问题描述】:

我目前一直在使用 pandoc 将一些 markdown 转换为 html,并想为某些重复区域发明自己的语法,我希望生成一个接受“类似变量”输入的代码块,但我不知道从哪里开始。

例如,我想转换这个:

~ question-multiple
    question:
        Which animal is supermarket milk usually obtained from?
    options:
        + Dog
        + Cat
        + Cow
        + Sheep

进入下面的html块:

<div class="question multiple">
<div>Which animal is supermarket milk usually obtained from?</div>
<div>
    <li>Dog</li>
    <li>Cat</li>
    <li>Cow</li>
    <li>Sheep</li>
</div>

我知道我可以使用文本转换器来实现这一点,但我想直接在 pandoc 内部进行。我想我只是使用模板,但我不确定如何将任何内容传递到模板中。

我也研究了过滤器,但它们似乎一次只在单个节点(或据我理解的单词)上运行。有人知道我将如何实现这一目标吗?

非常感谢您提供的任何帮助:)

【问题讨论】:

  • 您为什么不能为此使用definition list
  • 我不知道怎么把它变成我想要的 html。有没有简单的方法可以做到这一点?
  • 我在想生成的定义列表可以按原样使用。还是您“需要”您提出的输出?
  • 顺便说一句,您建议的输出无效。你需要一个 &lt;ul&gt;&lt;ol&gt; 包装你的 &lt;li&gt; 标签。
  • 是的,建议的输出基本上是我应该使用的。 (对不起,是的,我忘记将列表包装在
      标记中:P 我的错误)。我基本上在这里使用 pandoc 来简化写作。

标签: python html markdown pandoc


【解决方案1】:

在我看来,您不需要“发明”自己的语法。特别是 Pandoc 已经支持definition lists。你可以这样表达你的问题和答案:

Which animal is supermarket milk usually obtained from?
: Dog
: Cat
: Cow
: Sheep

这将导致以下输出:

<dl>
  <dt>Which animal is supermarket milk usually obtained from?</dt>
  <dd>Dog</dd>
  <dd>Cat</dd>
  <dd>Cow</dd>
  <dd>Sheep</dd>
</dl>

关于语义的注意事项:虽然它们在 Markdown(以及 HTML4 和 XHTML1)中被称为“定义列表”,但 HTML5 spec 将它们重命名为“描述列表”并将其预期用途扩展到包括(强调添加):

...术语和定义、元数据主题和值、问题和答案,或任何其他名称-值数据组。

因此,这已经是“描述列表”的预期用例,并且将在大多数浏览器中以合理的方式显示,无需任何特殊样式。

如果您需要一些额外的钩子,您可以将列表包含在HTML block 中。正如 Pandoc 用户指南所述:

[B]默认情况下,pandoc 将 HTML 块标签之间的材料解释为 Markdown。

与标准 Markdown 的这种背离应该更容易将 Markdown 与 HTML 块元素混合。例如,可以用标签包围一块 Markdown 文本,而不会阻止它被解释为 Markdown。

因此,您的 Markdown 可能如下所示:

<div class="question multiple">

Which animal is supermarket milk usually obtained from?
: Dog
: Cat
: Cow
: Sheep

</div>

顺便提一下,Markdown 的创建者给出了以下关于在 Markdown 中支持原始 HTML 的解释可能会有所帮助:

Markdown 不是 HTML 的替代品,甚至更接近它。它的语法非常小,只对应非常小的 HTML 标记子集。我们的想法不是创建一种更容易插入 HTML 标记的语法。在我看来,HTML 标签已经很容易插入了。 Markdown 的想法是让阅读、编写和编辑散文变得容易。 HTML 是一种发布格式; Markdown 是一种写作格式。因此,Markdown 的格式化语法只解决了可以用纯文本表达的问题。

对于 Markdown 语法未涵盖的任何标记,您只需使用 HTML 本身。

如果您需要创建自己的语法,那么您可能做错了,或者您不应该使用 Markdown。

【讨论】:

  • 这太棒了,感谢您指出这一点,这绝对是一个很好的解决方案:)这里的问题更普遍。基本上,我将有一篇包含一系列不同项目的文章。例如,我将在文章中添加一些隐藏的部分;我想使用一种非常明确的方便语法。例如,我特别希望将类应用于问题,否则;我必须稍后手动添加它,这是我试图避免的事情。实际上,我希望语法成为 html 的显式“模板”。
  • 我添加了一些关于使用原始 HTML 的信息。这符合您的需求吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2012-07-04
  • 2017-07-31
  • 2019-07-15
  • 1970-01-01
相关资源
最近更新 更多