Markdown and including multiple files
Solution 1:
The short answer is no. The long answer is yes. :-)
Markdown was designed to allow people to write simple, readable text that could be easily converted to a simple HTML markup. It doesn't really do document layout. For example, there's no real way to align an image to the right or left. As to your question, there's no markdown command to include a single link from one file to another in any version of markdown (so far as I know).
The closest you could come to this functionality is Pandoc. Pandoc allows you to merge files as a part of the transformation, which allows you to easily render multiple files into a single output. For example, if you were creating a book, then you could have chapters like this:
01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
You can merge them by doing executing this command within the same directory:
pandoc *.md > markdown_book.html
Since pandoc will merge all the files prior to doing the translation, you can include your links in the last file like this:
01_preface.md
02_introduction.md
03_why_markdown_is_useful.md
04_limitations_of_markdown.md
05_conclusions.md
06_links.md
So part of your 01_preface.md
could look like this:
I always wanted to write a book with [markdown][mkdnlink].
And part of your 02_introduction.md
could look like this:
Let's start digging into [the best text-based syntax][mkdnlink] available.
As long as your last file includes the line:
[mkdnlink]: http://daringfireball.net/projects/markdown
...the same command used before will perform the merge and conversion while including that link throughout. Just make sure you leave a blank line or two at the beginning of that file. The pandoc documentation says that it adds a blank line between files that are merged this way, but this didn't work for me without the blank line.
Solution 2:
I would just mention that you can use the cat
command to concatenate the input files prior to piping them to markdown_py
which has the same effect as what pandoc
does with multiple input files coming in.
cat *.md | markdown_py > youroutputname.html
works pretty much the same as the pandoc example above for the Python version of Markdown on my Mac.
Solution 3:
You can actually use the Markdown Preprocessor (MarkdownPP). Running with the hypothetical book example from the other answers, you would create .mdpp
files representing your chapters. The .mdpp
files can then use the !INCLUDE "path/to/file.mdpp"
directive, which operates recursively replacing the directive with the contents of the referenced file in the final output.
chapters/preface.mdpp
chapters/introduction.mdpp
chapters/why_markdown_is_useful.mdpp
chapters/limitations_of_markdown.mdpp
chapters/conclusions.mdpp
You would then need an index.mdpp
that contained the following:
!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"
To render your book you simply run the preprocessor on index.mdpp
:
$ markdown-pp.py index.mdpp mybook.md
Don't forget to look at the readme.mdpp
in the MarkdownPP repository for an exposition of preprocessor features suited for larger documentation projects.
Solution 4:
My solution is to use m4. It's supported on most platforms and is included in the binutils package.
First include a macro changequote()
in the file to change the quoting characters to what you prefer (default is `'). The macro is removed when the file is processed.
changequote(`{{', `}}')
include({{other_file}})
On the commandline:
m4 -I./dir_containing_other_file/ input.md > _tmp.md
pandoc -o output.html _tmp.md
Solution 5:
Just recently I wrote something like this in Node called markdown-include that allows you to include markdown files with C style syntax, like so:
#include "my-file.md"
I believe this aligns nicely with the question you're asking. I know this an old one, but I wanted to update it at least.
You can include this in any markdown file you wish. That file can also have more includes and markdown-include will make an internal link and do all of the work for you.
You can download it via npm
npm install -g markdown-include