首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Redcarpet将带有目录的标记转换为html

使用Redcarpet将带有目录的标记转换为html
EN

Stack Overflow用户
提问于 2016-04-08 00:34:26
回答 1查看 823关注 0票数 0

我的目标是将一个标记文档转换为html,顶部是一个目录。我看到红地毯有一个HTML_TOC选项,这真的很不错。但是当我使用它时,它只呈现TOC,它不包括文档的其余部分。

代码语言:javascript
复制
renderer = Redcarpet::Render::HTML_TOC.new(with_toc_data: true)
markdown = Redcarpet::Markdown.new(renderer)
html = markdown.render(File.read(input_file))

如何在同一个html页面中呈现TOC和文档本身?

我唯一能想到的就是呈现两个单独的html对象,然后将它们组合起来。但是这有点混乱,因为在组合它们之前,我必须正确地解析头/体标记。有更好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 13:48:30

我唯一能想到的就是呈现两个单独的html对象,然后将它们组合起来。

这正是你需要做的。作为提醒,Markdown不会呈现完整的HTML文档。你只能得到一个HTML片段。例如,一个简单的Markdown文档:

代码语言:javascript
复制
A simple Markdown document.

获取以下列HTML片段的形式呈现:

代码语言:javascript
复制
<p>A simple Markdown document.</p>

但是,对于完整、有效的HTML文档,您需要(至少)以下内容:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <title>Page Title</title>
  </head>
  <body>
    <p>A simple Markdown document.</p>
  </body>
</html>

考虑到所有这些都是你要做的,要分开获得TOC和body又有什么“麻烦”呢?

事实上,在更复杂的系统中,TOC可能位于侧边栏或什么地方。因此,使用模板系统,可以将TOC单独传递给模板,然后将其放在一个容器中,将其与文档主体分开,以便CSS进行定位和造型。

具体的模板语法可能因您使用的工具而异,但可能是这样的:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <title>{{ page.title }}</title>
  </head>
  <body>
    <aside>
      {{ page.toc }}
    </aside>
    <div id="body">
      {{ page.body }}
    </div>
  </body>
</html>

当然,您不必使用模板,但这无疑是生成文档的一种“干净”方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36489568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档