给定一个大型 Markdown 文件,其结构如下:
# Main
## Sub main Z
### Title Z
Content Z
### Title B
Content B
## Sub main A
### Title A
Content A
如何对其部分进行排序,以便它们按标题的字母顺序排列?
# Main
## Sub main A
### Title A
Content A
## Sub main Z
### Title B
Content B
### Title Z
Content Z
我认为没有任何解决方案不需要您编写一些代码。
但是,如果您会编码,则编程解决方案非常简单:
诀窍是选择一个支持上述步骤的 Markdown 解析器,它可以让你用你选择的语言来完成它,并且可以让你最轻松地完成它。
以下是我个人所知道的符合这些要求的:
可能是世界上第一的 Markdown 工具包。 Pandoc的母语是Haskell,但它支持多种语言。如果您打算以后做很多 Markdown 的事情,那么无论如何,了解 Pandoc 可能是有意义的。
它有一个选项
--section-divs
,可以将文档转换为基于标题的节层次结构,这将使每个嵌套级别的节重新排序几乎微不足道(如果您会编码)。
它具有对过滤器的支持,这正是我所描述的解决方案。
它对 Lua 和 Lua 过滤器有特殊支持,这可能是最容易编码的。
您还可以用其他语言编写过滤器:Python、PHP、Perl、Javascript/Typescript、Groovy、Ruby。
快速网络搜索显示了许多示例过滤器。通过更多的搜索,您可能会幸运地找到一个可以完成您已经编写的操作的内容,尽管我对此表示怀疑,因为按字母顺序对部分进行排序似乎是一件不常见的事情。
CommonMark 的 C 参考实现。支持 C 以外的语言:
它提供了一个共享库(libcmark),其中包含将 CommonMark 文档解析为抽象语法树(AST)、操作 AST 以及将文档渲染为 HTML、groff man、LaTeX、CommonMark 或 AST 的 XML 表示形式的函数。它还提供了一个命令行程序(cmark)用于解析和渲染 CommonMark 文档。
- 灵活。 CommonMark 输入被解析为 AST,可以在渲染之前以编程方式进行操作。
- 多个渲染器。支持 HTML、groff man、LaTeX、CommonMark 和自定义 XML 格式的输出。并且很容易编写新的渲染器来支持其他格式。
在 python、lua、ruby 和其他动态语言中使用 libcmark 很容易:请参阅wrappers/子目录以获得一些简单的示例。
专门围绕 AST 操作设计的基于 Javascript 的框架。我从未使用过它,但它可能有使 AST 操作更容易的工具,尽管我只是猜测。
🍀🍀🍀🍀
祝你好运!
我尝试使用
pandoc
,但从AST到Markdown的步骤丢失了许多格式,例如new line
等。
我找到了另一种方法来做到这一点。我们只需要
MS Word
。
Word
#
) 并应用样式 Title 1
、Title 2
等。为您更改样式名称。Sub insertStyleHeaders()
Dim hashCount As Integer
Dim styleStr As String
Set oRng = ActiveDocument.Range
With oRng.Find
.text = "#"
While .Execute
oRng.MoveEnd wdParagraph
If InStr(oRng.text, "# ") Then
hashCount = Len(oRng.text) - Len(Replace(oRng.text, "#", ""))
styleStr = "Title " + CStr(hashCount)
oRng.Select
oRng.Style = ActiveDocument.Styles(styleStr)
End If
oRng.Collapse wdCollapseEnd
Wend
End With
End Sub
Expand/Collapse
-> Collapse All Headings
Ctrl + A
) 并应用 plain text
/default
样式以删除标题样式。