¿Hay alguna bifurcación de descuento que le permita hacer referencia a otros archivos, algo así como un archivo de inclusión? Específicamente, quiero crear un archivo de descuento por separado con enlaces que llamo a menudo pero no siempre (llame a esto B.md), luego, cuando enlace por referencia en el archivo md que estoy escribiendo (A.md), me gustaría desea que extraiga el enlace del otro archivo (B.md) en lugar del final del archivo actual (A.md).
197
Respuestas:
La respuesta corta es no. La respuesta larga es sí. :-)
Markdown fue diseñado para permitir que las personas escriban texto simple y legible que podría convertirse fácilmente en un marcado HTML simple. Realmente no hace el diseño del documento. Por ejemplo, no hay una forma real de alinear una imagen a la derecha o a la izquierda. En cuanto a su pregunta, no hay un comando de descuento para incluir un solo enlace de un archivo a otro en cualquier versión de descuento (hasta donde yo sé).
Lo más cercano a esta funcionalidad es Pandoc . Pandoc le permite fusionar archivos como parte de la transformación, lo que le permite renderizar fácilmente múltiples archivos en una sola salida. Por ejemplo, si estaba creando un libro, entonces podría tener capítulos como este:
Puede fusionarlos ejecutando este comando dentro del mismo directorio:
Dado que pandoc fusionará todos los archivos antes de hacer la traducción, puede incluir sus enlaces en el último archivo de esta manera:
Así que parte de tu
01_preface.md
podría verse así:Y parte de tu
02_introduction.md
podría verse así:Siempre que su último archivo incluya la línea:
... el mismo comando utilizado antes realizará la fusión y la conversión al tiempo que incluye ese enlace en todo momento. Solo asegúrese de dejar una o dos líneas en blanco al comienzo de ese archivo. La documentación de Pandoc dice que agrega una línea en blanco entre los archivos que se fusionan de esta manera, pero esto no funcionó para mí sin la línea en blanco.
fuente
pandoc *.md > markdown_book.html
da como resultadopandoc: *.md: openfile: invalid argument (Invalid argument)
que no parece admitir la sintaxis que especificó.Solo mencionaría que puede usar el
cat
comando para concatenar los archivos de entrada antes de canalizarlos, lomarkdown_py
que tiene el mismo efecto que lo quepandoc
ocurre con la entrada de múltiples archivos de entrada.Funciona más o menos igual que el ejemplo de Pandoc anterior para la versión Python de Markdown en mi Mac.
fuente
cat *.md
implica una convención de nomenclatura inflexible de archivos. Esta convención no solo prohibiría necesariamente las inclusiones recursivas, para proyectos de documentación más grandes sería doloroso agregar nuevos archivos a la mezcla. Tendría que contar y renombrar mucho. El proyecto de rebajas ha tenido un preprocesador para este mismo propósito desde el año 2010.En realidad, puede usar el preprocesador Markdown ( MarkdownPP ). Con el ejemplo hipotético del libro de las otras respuestas, crearía
.mdpp
archivos que representan sus capítulos. Los.mdpp
archivos pueden usar la!INCLUDE "path/to/file.mdpp"
directiva, que opera de forma recursiva reemplazando la directiva con el contenido del archivo referenciado en la salida final.Entonces necesitarías un
index.mdpp
que contuviera lo siguiente:Para renderizar su libro, simplemente ejecute el preprocesador en
index.mdpp
:No se olvide de mirar el
readme.mdpp
en el MarkdownPP repositorio para una exposición de preprocesador características adecuado para proyectos de documentación más grandes.fuente
Mi solución es usar m4. Es compatible con la mayoría de las plataformas y está incluido en el paquete binutils.
Primero incluya una macro
changequote()
en el archivo para cambiar los caracteres entre comillas a lo que prefiera (el valor predeterminado es ``). La macro se elimina cuando se procesa el archivo.En la línea de comando:
fuente
m4
apenas se conoce, pero de hecho es una herramienta increíblemente poderosa cuando se trata de necesidades genéricas de inclusión. Lo suficiente como para que la documentación lo mencione puede ser "bastante adictivo".Recientemente escribí algo como esto en Node llamado markdown-include que le permite incluir archivos de markdown con sintaxis de estilo C, de esta manera:
Creo que esto se alinea muy bien con la pregunta que haces. Sé que es viejo, pero quería actualizarlo al menos.
Puede incluir esto en cualquier archivo de descuento que desee. Ese archivo también puede tener más inclusiones y markdown-include hará un enlace interno y hará todo el trabajo por usted.
Puedes descargarlo a través de
npm
fuente
Multimarkdown tiene esto de forma nativa. Lo llama transclusión de archivos :
Es todo lo que se necesita. Nombre extraño, pero cumple todos los requisitos.
fuente
Utilizo un
includes.txt
archivo con todos mis archivos en el orden correcto y ejecuto pandoc de esta manera:pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
¡Funciona de maravilla!
fuente
glob
métodos a menos que numere los archivos.De hecho, puede usar
\input{filename}
y\include{filename}
cuáles son comandos de látex, directamentePandoc
, porque admite casi todoshtml
ylatex
sintaxis.Pero cuidado, el archivo incluido será tratado como un
latex
archivo. Pero se puede compilar elmarkdown
quelatex
conPandox
facilidad.fuente
Asciidoc ( http://www.methods.co.nz/asciidoc/ ) es en realidad un descuento en los esteroides. En general, Asciidoc y Markdown se verán muy similares y es bastante fácil de cambiar. Un enorme ventaja de Asciidoc sobre el descuento es que ya admite incluir, para otros archivos de Asciidoc, pero también para cualquier formato que desee. Incluso puede incluir en parte archivos basados en números de línea o etiquetas dentro de sus archivos incluidos.
Incluir otros archivos es realmente un salvavidas cuando escribes documentos.
Por ejemplo, puede tener un archivo asciidoc con dicho contenido:
y mantenga su muestra en
script.pl
Y estoy seguro de que te preguntarás, así que sí, Github también es compatible con el asciidoc.
fuente
Creo que es mejor que adoptemos una nueva sintaxis de inclusión de archivos (por lo que no se equivocará con los bloques de código, creo que la inclusión del estilo C es totalmente incorrecta), y escribí una pequeña herramienta en Perl, nombrando
cat.pl
, porque funciona comocat
(cat a.txt b.txt c.txt
se fusionará tres archivos), pero combina archivos en profundidad , no en ancho . ¿Cómo utilizar?La sintaxis en detalle es:
@include <-=path=
%include <-=path=
Puede manejar adecuadamente los bucles de inclusión de archivos (si a.txt <- b.txt, b.txt <- a.txt, ¿entonces qué espera?).
Ejemplo:
a.txt:
b.txt:
perl cat.pl a.txt > c.txt
, c.txt:Más ejemplos en https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md .
También escribí una versión de Java que tiene un efecto idéntico (no el mismo, pero cercano).
fuente
<<[include_file.md]
(Marcado 2 en macOS): gist.github.com/district10/d46a0e207d888d0526aef94fb8d8998c@
se utiliza para citas conpandoc-citeproc
(por ejemplo, "@Darwin1859
").De hecho, estoy sorprendido de que nadie en esta página haya ofrecido soluciones HTML. Hasta donde he entendido, los archivos de MarkDown pueden incluir una gran parte (si no todas) de etiquetas HTML. Entonces siga estos pasos:
Desde aquí : coloque sus archivos MarkDown en
<span style="display:block"> ... </span>
etiquetas para asegurarse de que se mostrarán como rebajas. Tiene muchas otras propiedades de estilo que puede agregar. El que me gusta es eltext-align:justify
.Desde aquí : incluya los archivos en su archivo principal utilizando el
<iframe src="/path/to/file.md" seamless></iframe>
PS1 Esta solución no funciona en todos los motores / renders MarkDown. Por ejemplo, Typora renderizó los archivos correctamente pero Visual Studio Code no lo hizo. Sería genial si otros pudieran compartir su experiencia con otras plataformas. Especialmente me gustaría escuchar sobre GitHub y GitLab ...
PS2 En una investigación adicional, parece haber importantes problemas de incompatibilidad que llevan a que esto no se represente correctamente en muchas plataformas, incluidos Typora, GitHub y el código de Visual Studio. Por favor, no use esto hasta que los resuelva. No eliminaré la respuesta solo por el debate y si tal vez puedes compartir tus opiniones.
PS3 Para investigar más este problema, he hecho estas preguntas aquí en StackOverflow y aquí en Reddit .
PS4 Después de estudiar un poco, llegué a la conclusión de que por el momento AsciiDoc es una mejor opción para la documentación. Viene con la funcionalidad de inclusión incorporada, está representada por GitHub y los principales editores de código como Atom y vscode tienen extensiones para la vista previa en vivo. Se puede usar Pandoc u otras herramientas para convertir automáticamente el Código MarkDown existente a AsciiDoc con pequeños cambios.
PS5 Otro lenguaje de marcado ligero con funcionalidad de inclusión incorporada es
reStructuredText
. Viene con.. include:: inclusion.txt
sintaxis de serie. También hay un editor ReText con vista previa en vivo.fuente
Sé que esta es una pregunta antigua, pero no he visto ninguna respuesta a este efecto: esencialmente, si está utilizando Markdown y Pandoc para convertir su archivo a PDF, en sus datos de YAML en la parte superior de la página, puede incluir algo como esto:
Dado que Pandoc usa latex para convertir todos sus documentos, la
header-includes
sección llama al paquete pdfpages. Luego, cuando lo incluya\includepdf{/path/to/pdf/document.pdf}
, insertará todo lo que se incluya en ese documento. Además, puede incluir múltiples archivos pdf de esta manera.Como un bono divertido, y esto es solo porque a menudo uso Markdown, si desea incluir archivos que no sean Markdown, por ejemplo, archivos de látex. He modificado esta respuesta un poco. Supongamos que tiene un archivo de descuento markdown1.md:
Y dos archivos de látex adicionales document1, que se ve así:
Y otro, document2.tex, que se ve así:
Suponiendo que desea incluir document1.tex y document2.tex en markdown1.md, simplemente haría esto en markdown1.md
Ejecute pandoc sobre él, p. Ej.
en terminal
pandoc markdown1.md -o markdown1.pdf
Su documento final se verá más o menos así:
Algo que significa completo
Cabeza hablante
Sección
Profundidad.
Sección
Filo de la navaja.
Sección
Glah
Sección
Balh Balh
fuente
Uso Marked 2 en Mac OS X. Admite la siguiente sintaxis para incluir otros archivos.
Lamentablemente, no puede alimentar eso a pandoc ya que no entiende la sintaxis. Sin embargo, escribir un script para eliminar la sintaxis para construir una línea de comando pandoc es bastante fácil.
fuente
Otra solución del lado del cliente basada en HTML que utiliza markdown-it y jQuery . A continuación se muestra un pequeño contenedor HTML como documento maestro, que admite inclusiones ilimitadas de archivos de descuento, pero no incluye anidadas. La explicación se proporciona en los comentarios de JS. Se omite el manejo de errores.
fuente
En mi humilde opinión, puede obtener su resultado concatenando sus archivos de entrada * .md como:
fuente