Existe alguma bifurcação de marcação que permita que você faça referência a outros arquivos, algo como um arquivo de inclusão? Especificamente, quero criar um arquivo de remarcação separado com links que chamo frequentemente, mas nem sempre (chamo isso de B.md); quando vinculo por referência no arquivo md que estou escrevendo (A.md), gostaria de extrair o link do outro arquivo (B.md) e não do final do arquivo atual (A.md).
197
Respostas:
A resposta curta é não. A resposta longa é sim. :-)
O Markdown foi projetado para permitir que as pessoas escrevam texto simples e legível que pudesse ser facilmente convertido em uma simples marcação HTML. Realmente não faz o layout do documento. Por exemplo, não há uma maneira real de alinhar uma imagem à direita ou esquerda. Quanto à sua pergunta, não há comando de remarcação para incluir um único link de um arquivo para outro em qualquer versão da remarcação (até onde eu saiba).
O mais próximo que você pode chegar dessa funcionalidade é Pandoc . O Pandoc permite mesclar arquivos como parte da transformação, o que permite renderizar facilmente vários arquivos em uma única saída. Por exemplo, se você estivesse criando um livro, poderia ter capítulos como este:
Você pode mesclá-los executando este comando no mesmo diretório:
Como o pandoc mesclará todos os arquivos antes de fazer a tradução, você pode incluir seus links no último arquivo como este:
Portanto, parte do seu
01_preface.md
pode ser assim:E parte do seu
02_introduction.md
pode ficar assim:Contanto que seu último arquivo inclua a linha:
... o mesmo comando usado anteriormente executará a mesclagem e a conversão enquanto inclui esse link por toda parte. Apenas certifique-se de deixar uma ou duas linhas em branco no início desse arquivo. A documentação do pandoc diz que adiciona uma linha em branco entre os arquivos que são mesclados dessa maneira, mas isso não funcionou para mim sem a linha em branco.
fonte
pandoc *.md > markdown_book.html
resulta empandoc: *.md: openfile: invalid argument (Invalid argument)
- parece não suportar a sintaxe especificada.Gostaria apenas de mencionar que você pode usar o
cat
comando para concatenar os arquivos de entrada antes de canalizá-los para osmarkdown_py
quais tem o mesmo efeito do quepandoc
ocorre com vários arquivos de entrada.funciona da mesma forma que o exemplo pandoc acima para a versão Python do Markdown no meu Mac.
fonte
cat *.md
implica uma convenção de nomenclatura de arquivos inflexível. Essa convenção não apenas proibiria necessariamente inclusões recursivas; para projetos de documentação maiores, seria doloroso adicionar novos arquivos à mistura. Você teria que contar muito e renomear. O projeto remarcação teve um pré-processador para este fim desde o ano de 2010.Você pode realmente usar o pré-processador Markdown ( MarkdownPP ). Correndo com o exemplo de livro hipotético das outras respostas, você criaria
.mdpp
arquivos representando seus capítulos. Os.mdpp
arquivos podem usar a!INCLUDE "path/to/file.mdpp"
diretiva, que opera recursivamente substituindo a diretiva pelo conteúdo do arquivo referenciado na saída final.Você precisaria de um
index.mdpp
que contivesse o seguinte:Para renderizar seu livro, basta executar o pré-processador em
index.mdpp
:Não se esqueça de consultar o repositório
readme.mdpp
do MarkdownPP para obter uma exposição dos recursos do pré-processador adequados para projetos de documentação maiores.fonte
Minha solução é usar m4. É suportado na maioria das plataformas e está incluído no pacote binutils.
Primeiro, inclua uma macro
changequote()
no arquivo para alterar os caracteres entre aspas para o que você preferir (o padrão é ``). A macro é removida quando o arquivo é processado.Na linha de comando:
fonte
m4
é pouco conhecido, mas é de fato uma ferramenta incrivelmente poderosa quando se trata de necessidades de inclusão tão genéricas. O suficiente para ter a documentação mencionada, pode ser "bastante viciante".Recentemente, escrevi algo assim no Node chamado markdown-include que permite incluir arquivos de markdown com sintaxe no estilo C, da seguinte forma:
Acredito que isso esteja alinhado com a pergunta que você está fazendo. Eu sei que isso é antigo, mas eu queria atualizá-lo pelo menos.
Você pode incluí-lo em qualquer arquivo de remarcação que desejar. Esse arquivo também pode ter mais inclusões e o markdown-include criará um link interno e fará todo o trabalho para você.
Você pode baixá-lo via
npm
fonte
Multimarkdown tem isso nativamente. Ele chama isso de transclusão de arquivo :
é tudo o que é preciso. Nome estranho, mas marca todas as caixas.
fonte
Eu uso um
includes.txt
arquivo com todos os meus arquivos na ordem correta e executo o pandoc assim:pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
Funciona como um encanto!
fonte
glob
métodos, a menos que você numerar arquivos.De fato, você pode usar
\input{filename}
e\include{filename}
quais são os comandos de látex diretamentePandoc
, porque suporta quase todoshtml
elatex
sintaxe.Mas cuidado, o arquivo incluído será tratado como
latex
arquivo. Mas você pode compilar o seumarkdown
paralatex
comPandox
facilmente.fonte
O Asciidoc ( http://www.methods.co.nz/asciidoc/ ) é na verdade uma redução dos esteróides. No geral, o Asciidoc e o Markdown serão muito parecidos e é bastante fácil alternar. Um grande benefício do Asciidoc sobre a remarcação é que ele já inclui inclusões, para outros arquivos Asciidoc, mas também para qualquer formato que você desejar. Você pode até incluir parcialmente arquivos com base em números de linha ou tags nos arquivos incluídos.
Incluir outros arquivos é realmente um salva-vidas quando você escreve documentos.
Você pode, por exemplo, ter um arquivo asciidoc com esse conteúdo:
e mantenha sua amostra em
script.pl
E tenho certeza que você se perguntará, sim, o Github também suporta o asciidoc.
fonte
Eu acho que é melhor adotar uma nova sintaxe de inclusão de arquivo (para não atrapalhar os blocos de código, acho que a inclusão do estilo C está totalmente errada), e escrevi uma pequena ferramenta no Perl, nomeando
cat.pl
, porque funciona comocat
(cat a.txt b.txt c.txt
irá mesclar três arquivos), mas mescla arquivos em profundidade , não em largura . Como usar?A sintaxe em detalhes é:
@include <-=path=
%include <-=path=
Ele pode lidar adequadamente com os loops de inclusão de arquivo (se a.txt <- b.txt, b.txt <- a.txt, o que você espera?).
Exemplo:
a.txt:
b.txt:
perl cat.pl a.txt > c.txt
, c.txt:Mais exemplos em https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md .
Também escrevi uma versão Java com um efeito idêntico (não o mesmo, mas próximo).
fonte
<<[include_file.md]
(Marcado como 2 no macOS): gist.github.com/district10/d46a0e207d888d0526aef94fb8d8998c@
é usado para citações compandoc-citeproc
(por exemplo, "@Darwin1859
").Estou realmente surpreso que ninguém nesta página tenha oferecido soluções em HTML. Até onde eu entendi, os arquivos MarkDown podem incluir uma grande parte (se não todas) das tags HTML. Portanto, siga estas etapas:
A partir daqui : coloque seus arquivos MarkDown em
<span style="display:block"> ... </span>
tags para garantir que eles serão renderizados como descontos. Você tem várias outras propriedades de estilo que você pode adicionar. O que eu gosto é otext-align:justify
.A partir daqui : inclua os arquivos no seu arquivo principal usando o
<iframe src="/path/to/file.md" seamless></iframe>
PS1. esta solução não funciona em todos os mecanismos / renderizações do MarkDown. Por exemplo, Typora processou os arquivos corretamente, mas o Visual Studio Code não. Seria ótimo se outros pudessem compartilhar sua experiência com outras plataformas. Especialmente, gostaria de ouvir sobre o GitHub e o GitLab ...
PS2. Em uma investigação mais aprofundada, parece haver grandes problemas de incompatibilidade que fazem com que isso não seja processado corretamente em muitas plataformas, incluindo os códigos Typora, GitHub e Visual Studio. Por favor, não use isso até que eu os resolva. Não vou excluir a resposta apenas para fins de discussão e, se você puder compartilhar suas opiniões.
PS3. Para investigar mais esse problema, eu fiz essas perguntas aqui no StackOverflow e aqui no Reddit .
PS4. Depois de alguns estudos, cheguei à conclusão de que, no momento, o AsciiDoc é uma opção melhor para documentação. Ele vem com funcionalidade de inclusão embutida, é renderizado pelo GitHub, e os principais editores de código como Atom e vscode têm extensões para visualização ao vivo. Pode-se usar Pandoc ou outras ferramentas para converter automaticamente o código MarkDown existente em AsciiDoc com pequenas alterações.
PS5. Outra linguagem de marcação leve com a funcionalidade de inclusão integrada é
reStructuredText
. Ele vem com.. include:: inclusion.txt
sintaxe por padrão. Há o editor ReText com visualização ao vivo também.fonte
Sei que essa é uma pergunta antiga, mas ainda não vi respostas para esse efeito: essencialmente, se você estiver usando markdown e pandoc para converter seu arquivo em pdf, nos dados do yaml na parte superior da página, inclua algo assim:
Como o pandoc usa o látex para converter todos os seus documentos, a
header-includes
seção chama o pacote pdfpages. Quando você incluir,\includepdf{/path/to/pdf/document.pdf}
ele inserirá o que for incluído nesse documento. Além disso, você pode incluir vários arquivos pdf dessa maneira.Como um bônus divertido, e isso é apenas porque geralmente uso remarcações, se você quiser incluir outros arquivos que não sejam remarcações, por exemplo, arquivos de látex. Eu modifiquei esta resposta um pouco. Digamos que você tenha um arquivo de remarcação markdown1.md:
E dois arquivos de látex adicionais document1, que são assim:
E outro, document2.tex, que se parece com isso:
Supondo que você queira incluir document1.tex e document2.tex em markdown1.md, você faria isso apenas em markdown1.md
Execute o pandoc sobre ele, por exemplo
no terminal
pandoc markdown1.md -o markdown1.pdf
Seu documento final será mais ou menos assim:
Algo Significado Completo
Talking Head
Seção
Profundidade.
Seção
Fio da navalha.
Seção
Glah
Seção
Balh Balh
fonte
Uso Marcado 2 no Mac OS X. Ele suporta a seguinte sintaxe para incluir outros arquivos.
Infelizmente, você não pode alimentar isso como pandoc, pois ele não entende a sintaxe. No entanto, escrever um script para remover a sintaxe e construir uma linha de comando pandoc é bastante fácil.
fonte
Outra solução baseada em HTML, no lado do cliente, usando markdown-it e jQuery . Abaixo está um pequeno invólucro HTML como documento mestre, que suporta inclusões ilimitadas de arquivos de descontos, mas não inclusas aninhadas. A explicação é fornecida nos comentários do JS. O tratamento de erros é omitido.
fonte
IMHO, você pode obter seu resultado concatenando seus arquivos de entrada * .md como:
fonte