mkdocs导航标题与页面标题不同

时间:2020-02-13 20:01:49

标签: markdown github-flavored-markdown mkdocs

我的mkdocs.yml文件的nav标题缩短了,只适合左侧导航中的每一行,并且我希望.md降价 title是未缩写的完整标题。

例如,我的mkdocs.yml文件包含:

nav:
- BD, ML, DS: Big_Data,_Machine_Learning,_Data_Science.md
- AI, VI: Artificial_Intelligence,_Video_Intelligence.md

我希望.md页面标题为:

Big Data, Machine Learning, and Data Science

...代替复制/使用mkdocs.yml导航标题:

BD, ML, DS

当我将降价页面标题添加到# Big Data...文件的第一行(.md)时,我既得到了我想要的页面标题,又得到了继承的{{ 1}} mkdocs.yml标题:

nav

似乎答案是在BD, ML, DS 7 min (1,939 words) Big Data, Machine Learning, and Data Science 文件中指定了不同/秒的“页面显示”名称,但是许多Google搜索都没有结果。

您尝试或听说过其他哪些方法?谢谢!

2 个答案:

答案 0 :(得分:0)

这只能通过自定义主题来实现,该主题专门添加了对此功能的支持。但是,我不知道有任何提供这种功能的主题。

页面只能有一个标题。但是,页面标题可以通过以下四种方式之一定义为documented

MkDocs将尝试确定文档标题, 按以下方式操作:

  1. nav配置设置中为文档定义的标题。
  2. 在文档的title元数据关键字中定义的标题。
  3. 文档正文第一行上的1级Markdown标头。
  4. 文档的文件名。

在找到页面标题后,MkDoc不会继续检查任何内容 上面列表中的其他来源。

最后一句话是完成这项工作的关键。当MkDocs在title配置文件的nav配置中找到一个mkdocs.yml时,它永远不会检查在其他任何地方(包括元数据中)定义的title。它仅使用页面的nav标题作为所有页面的标题(在page.title属性中)。

但是,页面的元数据仍保存在page.meta属性下。因此,您可以在自定义主题的page.title部分使用nav,并在主题的其他任何地方使用page.meta.title

要为页面定义元数据,请将YAML部分添加到Markdown文件的开头:

---
title: Big Data, Machine Learning, and Data Science
---

The first line of your Markdown.

当然,请像以前一样在配置文件中定义标题:

nav:
- 'BD, ML, DS': 'Big_Data,_Machine_Learning,_Data_Science.md'

然后在您的主题中,可以使用page.title出现BD, ML, DS的位置,并使用page.meta.title出现Big Data, Machine Learning, and Data Science的位置。

如果您不想从头开始创建一个全新的主题,则可以combinecustom_dirtemplate blocks仅覆盖主题的特定部分选择。

答案 1 :(得分:0)

我也会使用元数据,但采用的方法与 Waylan 建议的方法略有不同。

Waylan 建议使用:

  • 配置文件中的 nav 条目 - 'Short Title': file.md
  • 元数据 title: Long Title 在 Markdown 文件的顶部。

我建议只依赖元数据:

  • Markdown 文件顶部的元数据 short_title: Short Title
  • 以及 Markdown 文件顶部的元数据 title: Long Title

我认为这个方案有两个优点。

  1. 您没有破坏 XXX.title 的内置语义:它仍然表示完整的标题。因此,与其修补主题中每次使用它(并破坏您错过/忘记的部分),您只修补要使用短标题的部分(大概只有导航菜单),以替换任何出现的 { {1}} 由 XXX.title(例如在生成导航菜单的模板中,XXX.meta.short_title 将变为 nav_item.title¹)。
  2. 我将页面的标题(短标题或长标题)视为其内容的一部分。它是此页面的本地。因此,我不想在本地 Markdown 文件和中央配置文件之间分散内容,也不想手动保持两者同步(并且在某些时候无法同步)。嵌入在 Markdown 文件开头的元数据可实现纯本地版本。我可以让 MkDocs 仅从我的 Markdown 文件生成导航菜单,而不会在全局配置文件中复制任何数据。

¹ 或者更确切地说是 nav_item.meta.short_title


编辑:好吧,我写了这个答案,然后我被一些错误消息弄糊涂了,错误地认为它不起作用。事实上,确实如此。抱歉来来回回。

相关问题