是否有任何markdown fork允许您引用其他文件,例如包含文件?具体来说,我想创建一个单独的markdown文件,其链接我经常调用但不总是(调用此B.md),然后当我在md文件中通过引用链接我正在写(A.md)时,我想喜欢它从其他文件(B.md)而不是从当前文件(A.md)的末尾拉取链接.
Aar*_*sey 195
最简洁的答案是不.答案很长,是的.:-)
Markdown旨在允许人们编写简单易读的文本,这些文本可以轻松转换为简单的HTML标记.它并没有真正做文档布局.例如,没有真正的方法将图像对齐到右侧或左侧.至于你的问题,没有markdown命令在任何版本的markdown中包含从一个文件到另一个文件的单个链接(据我所知).
Pandoc是你最接近这个功能的.Pandoc允许您将文件合并为转换的一部分,这使您可以轻松地将多个文件呈现为单个输出.例如,如果您正在创建一本书,那么您可以使用以下章节:
01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
Run Code Online (Sandbox Code Playgroud)
您可以通过在同一目录中执行此命令来合并它们:
pandoc *.md > markdown_book.html
Run Code Online (Sandbox Code Playgroud)
由于pandoc将在执行翻译之前合并所有文件,因此您可以将链接包含在最后一个文件中,如下所示:
01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
06_links.md
Run Code Online (Sandbox Code Playgroud)
所以你的一部分01_preface.md看起来像这样:
I always wanted to write a book with [markdown][mkdnlink].
Run Code Online (Sandbox Code Playgroud)
部分你02_introduction.md可能看起来像这样:
Let's start digging into [the best text-based syntax][mkdnlink] available.
Run Code Online (Sandbox Code Playgroud)
只要您的上一个文件包含该行:
[mkdnlink]: http://daringfireball.net/projects/markdown
Run Code Online (Sandbox Code Playgroud)
...之前使用的相同命令将执行合并和转换,同时包括该链接.只需确保在该文件的开头留下一行或两行.该pandoc文档说,它补充说,合并这样的文件之间的空行,但是这并没有为我没有空行工作.
小智 48
我只想提一下,您可以使用该cat命令连接输入文件,然后将其输入到与多个输入文件进入的markdown_py效果相同的pandoc输入文件.
cat *.md | markdown_py > youroutputname.html
Run Code Online (Sandbox Code Playgroud)
与Mac上的Markdown Python版本的pandoc示例非常相似.
nin*_*rid 24
您实际上可以使用Markdown预处理器(MarkdownPP).使用其他答案中的假设书籍示例运行,您将创建.mdpp表示章节的文件.该.mdpp则文件可以使用!INCLUDE "path/to/file.mdpp"指令,它递归地进行操作,在最终输出引用的文件中的内容替换指令.
chapters/preface.mdpp
chapters/introduction.mdpp
chapters/why_markdown_is_useful.mdpp
chapters/limitations_of_markdown.mdpp
chapters/conclusions.mdpp
Run Code Online (Sandbox Code Playgroud)
然后index.mdpp,您需要包含以下内容:
!INCLUDE "chapters/preface.mdpp"
!INCLUDE "chapters/introduction.mdpp"
!INCLUDE "chapters/why_markdown_is_useful.mdpp"
!INCLUDE "chapters/limitations_of_markdown.mdpp"
!INCLUDE "chapters/conclusions.mdpp"
Run Code Online (Sandbox Code Playgroud)
要渲染您的书,您只需运行预处理器index.mdpp:
$ markdown-pp.py index.mdpp mybook.md
Run Code Online (Sandbox Code Playgroud)
不要忘记readme.mdpp在MarkdownPP存储库中查看适用于大型文档项目的预处理器功能的说明.
Ben*_*ler 16
我的解决方案是使用m4.它在大多数平台上都受支持,并包含在binutils包中.
首先changequote()在文件中包含一个宏,将引号字符更改为您喜欢的字符(默认为`').处理文件时将删除宏.
changequote(`{{', `}}')
include({{other_file}})
Run Code Online (Sandbox Code Playgroud)
在命令行上:
m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md
Run Code Online (Sandbox Code Playgroud)
Set*_*hen 14
就在最近,我在Node中写了类似这样的东西,叫做markdown-include,它允许你包含带有C风格语法的markdown文件,如下所示:
#include "my-file.md"
Run Code Online (Sandbox Code Playgroud)
我相信这与你提出的问题很吻合.我知道这是一个旧的,但我想至少更新它.
您可以将此包含在您希望的任何降价文件中.该文件还可以有更多包含和markdown-include将建立内部链接并为您完成所有工作.
你可以通过它下载 npm
npm install -g markdown-include
Run Code Online (Sandbox Code Playgroud)
小智 9
Asciidoc实际上是对类固醇的降价。总的来说,Asciidoc 和 Markdown 看起来非常相似,而且很容易切换。Asciidoc 相对于 Markdown 的一个巨大好处是它已经支持包含,对于其他 Asciidoc 文件以及您喜欢的任何格式。您甚至可以根据包含文件中的行号或标签部分包含文件。
当您编写文档时,包含其他文件确实可以挽救生命。
例如,您可以拥有一个包含以下内容的 asciidoc 文件:
// [source,perl]
// ----
// include::script.pl[]
// ----
Run Code Online (Sandbox Code Playgroud)
并将您的样品保存在 script.pl
我相信你会想知道,是的,Github 也支持 asciidoc。
vscode-markdown-preview-enhanced 支持 @import 语法
https://github.com/shd101wyy/vscode-markdown-preview-enhanced
这可能意味着它是底层工具 mume 的一部分
https://github.com/shd101wyy/mume
以及其他基于 mume 的工具
https://github.com/gabyx/TechnicalMarkdown
这是我在使用 vscode-markdown-preview-enhanced 处理的文档中如何使用它的示例:
[[Epigenetics]]
@import "epigenetics.md"
Run Code Online (Sandbox Code Playgroud)
Multimarkdown本身具有此功能。它称其为文件包含:
{{some_other_file.txt}}
Run Code Online (Sandbox Code Playgroud)
就是全部。奇怪的名字,但在所有方框中打勾。
我includes.txt以正确的顺序使用所有文件,然后执行pandoc,如下所示:
pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
奇迹般有效!
事实上,令我感到惊讶的是,此页面中没有人提供任何 HTML 解决方案。据我所知,MarkDown 文件可以包含大部分(如果不是全部)HTML 标签。因此请按照以下步骤操作:
从这里开始:将您的 MarkDown 文件放入<span style="display:block"> ... </span>标签中,以确保它们将呈现为 Markdown。您可以添加很多其他样式属性。我喜欢的是text-align:justify.
从这里:使用以下命令将文件包含在主文件中<iframe src="/path/to/file.md" seamless></iframe>
PS1。此解决方案不适用于所有 MarkDown 引擎/渲染器。例如,Typora 确实正确渲染了文件,但 Visual Studio Code 却没有。如果其他人可以分享他们在其他平台上的经验,那就太好了。我特别想听听有关 GitHub 和 GitLab 的信息...
PS2。经过进一步调查,似乎存在重大的不兼容问题,导致其无法在许多平台上正确呈现,包括 Typora、GitHub 和 Visual Studio code。在我解决这些问题之前,请不要使用它。我不会为了讨论而删除答案,如果你可以分享你的意见。
PS3。为了进一步调查这个问题,我在 StackOverflow和Reddit 上提出了这个问题。
PS4。经过一番研究后,我得出的结论是,目前 AsciiDoc 是更好的文档选择。它具有内置的包含功能,由 GitHub 呈现,并且 Atom 和 vscode 等主要代码编辑器具有实时预览扩展。可以使用 Pandoc 或其他工具自动将现有 MarkDown 代码转换为 AsciiDoc,只需稍作修改。
PS5。另一种具有内置包含功能的轻量级标记语言是reStructuredText. 它带有.. include:: inclusion.txt
标准语法。还有带有实时预览功能的ReText 编辑器。
我知道这是一个老问题,但我还没有看到任何对此效果的答案:本质上,如果您使用 markdown 和 pandoc 将文件转换为 pdf,在页面顶部的 yaml 数据中,您可以包括像这样的东西:
---
header-includes:
- \usepackage{pdfpages}
output: pdf_document
---
\includepdf{/path/to/pdf/document.pdf}
# Section
Blah blah
## Section
Blah blah
Run Code Online (Sandbox Code Playgroud)
由于 pandoc 使用 Latex 来转换所有文档,因此该header-includes部分调用 pdfpages 包。然后,当您包含\includepdf{/path/to/pdf/document.pdf}它时,将插入该文档中包含的所有内容。此外,您可以通过这种方式包含多个 pdf 文件。
作为一个有趣的奖励,这只是因为我经常使用 Markdown,如果您想包含 Markdown 以外的文件,例如乳胶文件。我对这个答案做了一些修改。假设你有一个 markdown 文件 markdown1.md:
---
title: Something meaning full
author: Talking head
---
Run Code Online (Sandbox Code Playgroud)
还有两个附加的乳胶文件 document1,如下所示:
\section{Section}
Profundity.
\subsection{Section}
Razor's edge.
Run Code Online (Sandbox Code Playgroud)
另一个,document2.tex,看起来像这样:
\section{Section
Glah
\subsection{Section}
Balh Balh
Run Code Online (Sandbox Code Playgroud)
假设您想将 document1.tex 和 document2.tex 包含到 markdown1.md 中,则只需对 markdown1.md 执行此操作
---
title: Something meaning full
author: Talking head
---
\input{/path/to/document1}
\input{/path/to/document2}
Run Code Online (Sandbox Code Playgroud)
对其运行 pandoc,例如
在终端pandoc markdown1.md -o markdown1.pdf
您的最终文档将如下所示:
深刻性。
剃刀刀刃。
格拉
巴尔赫巴尔赫
实际上,您可以直接在中使用\input{filename}和\include{filename}乳胶命令Pandoc,因为它几乎支持全部html和latex语法。
但是请注意,包含的文件将被视为latex文件。但是您可以轻松地markdown将latex其编译为Pandox。
我认为我们最好采用新的文件包含语法(这样就不会弄乱代码块,我认为 C 风格的包含是完全错误的),我用 Perl 编写了一个小工具,命名为cat.pl,因为它的工作原理如下cat(cat a.txt b.txt c.txt将合并三个\n文件),但它合并文件的深度,而不是宽度。如何使用?
$ perl cat.pl <your file>\nRun Code Online (Sandbox Code Playgroud)\n\n详细语法为:
\n\n@include <-=path=%include <-=path=它可以正确处理文件包含循环(如果a.txt <- b.txt,b.txt <- a.txt,那么你期望什么?)。
\n\n例子:
\n\na.txt:
\n\na.txt\n\n a <- b\n\n @include <-=b.txt=\n\na.end\nRun Code Online (Sandbox Code Playgroud)\n\nb.txt:
\n\nb.txt\n\n b <- a\n\n @include <-=a.txt=\n\nb.end\nRun Code Online (Sandbox Code Playgroud)\n\nperl cat.pl a.txt > c.txt,c.txt:
a.txt\n\n a <- b\n\n b.txt\n\n b <- a\n\n a.txt\n\n a <- b\n\n @include <-=b.txt= (note\xef\xbc\x9awon\'t include, because it will lead to infinite loop.)\n\n a.end\n\n b.end\n\na.end\nRun Code Online (Sandbox Code Playgroud)\n\n更多示例请参见https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md。
\n\n我还写了一个具有相同效果的Java版本(不一样,但接近)。
\n| 归档时间: |
|
| 查看次数: |
115577 次 |
| 最近记录: |