3

我的mkdocs.yml文件的nav标题被缩短以适合左侧导航中的每行仅一行,并且我希望.mdMarkdown页面标题是未缩写的全长标题。

例如,虽然我的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

当我将 Markdown 页面标题添加到文件的第一行 ( # Big Data...) 时.md,我得到了我想要的页面标题继承的mkdocs.yml nav标题:

BD, ML, DS
7 min (1,939 words)
Big Data, Machine Learning, and Data Science

似乎答案是在mkdocs.yml文件中指定一个不同的/第二个“页面显示”名称,但许多谷歌搜索都没有出现。

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

4

2 回答 2

1

这仅适用于专门添加对此类功能的支持的自定义主题。但是我不知道有任何主题提供这样的功能。

一个页面只能有一个标题。但是,页面标题可以按照文档中的四种方式中的任何一种来定义:

MkDocs 将尝试以下列方式确定文档的标题,按顺序:

  1. 在文档的导航配置设置中定义的标题。
  2. title在文档的元数据键中定义的标题。
  3. 文档正文第一行的 1 级 Markdown 标题。
  4. 文档的文件名。

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

最后一句话是完成这项工作的关键。由于 MkDocs在您的配置文件title的配置中查找定义,它从不检查其他任何地方(包括元数据中)的定义。它只是在任何地方(在属性中)使用页面标题作为页面标题。navmkdocs.ymltitlenavpage.title

但是,页面的元数据仍然保存在该page.meta属性下。因此,您可以page.titlenav自定义主题部分和主题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出现的位置。

如果您不想从头开始创建一个全新的主题,您可以结合custom_dir和板块来仅覆盖您选择的主题的特定部分。

于 2020-02-17T01:59:33.737 回答
0

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

Waylan 建议使用:

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

我建议只依赖元数据:

  • short_title: Short TitleMarkdown 文件顶部的元数据;
  • title: Long Title和Markdown 文件顶部的元数据。

我看到这个方案有两个优点。

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

¹ 或者更确切地说nav_item.meta.short_title if (nav_item.meta is defined and nav_item.meta.short_title is defined) else nav_item.title


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

于 2021-04-25T22:35:12.640 回答