Czy istnieje rozwidlenie przeceny, które pozwala odwoływać się do innych plików, na przykład plik dołączony? W szczególności chcę utworzyć osobny plik przeceny z linkami, które często wywołuję, ale nie zawsze (nazywam to B.md), a następnie, gdy odsyłam przez odniesienie w pliku md, który piszę (A.md), jak to, aby pobrać link z innego pliku (B.md), a nie z końca bieżącego pliku (A.md).
197
Odpowiedzi:
Krótka odpowiedź brzmi: nie. Długa odpowiedź brzmi: tak. :-)
Markdown został zaprojektowany, aby umożliwić ludziom pisanie prostego, czytelnego tekstu, który można łatwo przekształcić w prosty znacznik HTML. Tak naprawdę nie układa dokumentu. Na przykład nie ma realnego sposobu wyrównywania obrazu do prawej lub lewej strony. Jeśli chodzi o twoje pytanie, nie ma polecenia markdown, które zawierałoby pojedynczy link z jednego pliku do drugiego w dowolnej wersji markdown (o ile mi wiadomo).
Pandoc jest najbliżej tej funkcjonalności . Pandoc pozwala łączyć pliki w ramach transformacji, co pozwala łatwo renderować wiele plików w jedno wyjście. Na przykład, jeśli tworzysz książkę, możesz mieć następujące rozdziały:
Możesz je scalić, wykonując polecenie w tym samym katalogu:
Ponieważ pandoc scali wszystkie pliki przed wykonaniem tłumaczenia, możesz dołączyć swoje linki do ostatniego pliku w następujący sposób:
Więc część twojego
01_preface.md
może wyglądać tak:Część twojej
02_introduction.md
może wyglądać tak:Tak długo, jak twój ostatni plik zawiera wiersz:
... to samo polecenie użyte wcześniej wykona scalenie i konwersję, jednocześnie włączając to łącze w całym tekście. Tylko upewnij się, że zostawiłeś pustą linię lub dwie na początku tego pliku. Dokumentacja pandoc mówi, że dodaje pustą linię między plikami, które są scalane w ten sposób, ale nie działało to dla mnie bez pustej linii.
źródło
pandoc *.md > markdown_book.html
powoduje wpandoc: *.md: openfile: invalid argument (Invalid argument)
- wydaje się, że nie obsługuje podanej składni.Chciałbym tylko wspomnieć, że można użyć
cat
polecenia, aby połączyć pliki wejściowe przed ich potokowaniem,markdown_py
co ma taki sam efekt, jak wpandoc
przypadku wielu plików wejściowych.działa prawie tak samo jak powyższy przykład pandoc dla Python wersji Markdown na moim Macu.
źródło
cat *.md
implikuje nieelastyczną konwencję nazewnictwa plików. Konwencja ta nie tylko niekoniecznie zabrania stosowania rekurencyjnych, ale w przypadku większych projektów dokumentacji dodawanie nowych plików do miksu byłoby bolesne. Będziesz musiał dużo policzyć i zmienić nazwę. Projekt przeceny ma w tym celu preprocesor od 2010 roku.Możesz faktycznie użyć Markdown Preprocessor ( MarkdownPP ). Korzystając z hipotetycznego przykładu książki z innych odpowiedzi, tworzysz
.mdpp
pliki reprezentujące twoje rozdziały. Te.mdpp
pliki mogą następnie korzystać z!INCLUDE "path/to/file.mdpp"
dyrektywy, która działa rekursywnie zastępującej dyrektywę z zawartością pliku wskazanej w końcowej produkcji.Potrzebny byłby wtedy plik
index.mdpp
zawierający:Aby renderować książkę, po prostu uruchom preprocesor na
index.mdpp
:Nie zapomnij spojrzeć na
readme.mdpp
w MarkdownPP repozytorium ekspozycja preprocesora funkcje dostosowane do większych projektów dokumentacji.źródło
Moim rozwiązaniem jest użycie m4. Jest obsługiwany na większości platform i jest zawarty w pakiecie binutils.
Najpierw dołącz
changequote()
do pliku makro , aby zmienić znaki cudzysłowu na preferowane (domyślnie jest to ''). Makro jest usuwane podczas przetwarzania pliku.W wierszu polecenia:
źródło
m4
jest ledwo znany, ale w rzeczywistości jest niezwykle potężnym narzędziem, jeśli chodzi o takie ogólne potrzeby. Wystarczy wspomnieć o dokumentacji, że może być „dość uzależniająca”.Niedawno napisałem coś takiego w Node o nazwie markdown-include, która pozwala na dołączanie plików markdown ze składnią w stylu C, na przykład:
Wierzę, że to dobrze pasuje do pytania, które zadajesz. Wiem, że to stary, ale chciałem go przynajmniej zaktualizować.
Możesz dołączyć to do dowolnego pliku zniżki. Ten plik może również zawierać więcej włączeń, a tagowanie-dołączenie utworzy wewnętrzny link i wykona całą pracę za Ciebie.
Możesz pobrać go za pośrednictwem
npm
źródło
Multimarkdown ma to natywnie. Nazywa to transkluzją plików :
wystarczy. Dziwne imię, ale zaznacza wszystkie pola.
źródło
Używam
includes.txt
pliku ze wszystkimi moimi plikami we właściwej kolejności i wykonuję pandoc w następujący sposób:pandoc -s $(cat includes.txt) --quiet -f markdown -t html5 --css pandoc.css -o index.html
Działa jak marzenie!
źródło
glob
metodami, chyba że numerujesz pliki.W rzeczywistości możesz używać
\input{filename}
i\include{filename}
które są komendami lateksowymi, bezpośrednio wPandoc
, ponieważ obsługuje prawie wszystkiehtml
ilatex
składnię.Ale uwaga, dołączony plik będzie traktowany jako
latex
plik. Ale można skompilowaćmarkdown
TOlatex
zPandox
łatwością.źródło
Asciidoc ( http://www.methods.co.nz/asciidoc/ ) jest tak naprawdę zniżką na sterydy. Ogólnie rzecz biorąc, Asciidoc i Markdown będą wyglądać bardzo podobnie i raczej łatwo je zmienić. Ogromna korzyść asciidoc nad obniżki jest obsługa obejmuje już inne pliki asciidoc ale również dla dowolnego formatu chcesz. Możesz nawet częściowo dołączyć pliki na podstawie numerów linii lub znaczników do dołączonych plików.
Dołączanie innych plików jest naprawdę ratowaniem życia podczas pisania dokumentów.
Możesz na przykład mieć plik asciidoc z taką zawartością:
i zachowaj swoją próbkę w
script.pl
I jestem pewien, że będziesz się zastanawiać, więc tak, Github obsługuje również asciidoc.
źródło
Myślę, że lepiej przyjąć nową składnię dołączania plików (więc nie zepsują się blokami kodu, myślę, że włączenie stylu C jest całkowicie niepoprawne) i napisałem małe narzędzie w Perlu, nazywając go
cat.pl
, ponieważ działa jakcat
(cat a.txt b.txt c.txt
scali się trzy pliki), ale łączy pliki głęboko , a nie w szerokość . Jak używać?Szczegółowa składnia to:
@include <-=path=
%include <-=path=
Może poprawnie obsługiwać pętle dołączania plików (jeśli a.txt <- b.txt, b.txt <- a.txt, to czego oczekujesz?).
Przykład:
a.txt:
b.txt:
perl cat.pl a.txt > c.txt
, c.txt:Więcej przykładów na https://github.com/district10/cat/blob/master/tutorial_cat.pl_.md .
Napisałem również wersję Java, która ma identyczny efekt (nie taki sam, ale zamknięty).
źródło
<<[include_file.md]
(Oznaczony jako 2 na macOS): gist.github.com/district10/d46a0e207d888d0526aef94fb8d8998c@
jest używany do cytowań zpandoc-citeproc
(np. „@Darwin1859
”).Jestem właściwie zaskoczony, że nikt na tej stronie nie zaoferował żadnych rozwiązań HTML. O ile rozumiem, pliki MarkDown mogą zawierać szeroką część (jeśli nie wszystkie) znaczników HTML. Wykonaj następujące kroki:
Od tutaj : umieścić swoje pliki Przecena w
<span style="display:block"> ... </span>
tagach mieć pewność, będą renderowane jako obniżki. Masz wiele innych właściwości stylu, które możesz dodać. Ten, który lubię totext-align:justify
.Od tutaj : Dołącz pliki w głównym pliku za pomocą
<iframe src="/path/to/file.md" seamless></iframe>
PS1. to rozwiązanie nie działa na wszystkich silnikach / renderach MarkDown. Na przykład Typora poprawnie renderuje pliki, ale nie Visual Studio Code. Byłoby wspaniale, gdyby inni mogli podzielić się swoimi doświadczeniami z innymi platformami. Szczególnie chciałbym usłyszeć o GitHub i GitLab ...
PS2. Po dalszych badaniach wydaje się, że występują poważne problemy z niekompatybilnością, które prowadzą do nieprawidłowego renderowania na wielu platformach, w tym w Typorze, GitHub i kodzie Visual Studio. Nie używaj tego, dopóki ich nie rozwiążę. Nie usunę odpowiedzi tylko ze względu na dyskusję i jeśli możesz podzielić się swoimi opiniami.
PS3. Aby dokładniej zbadać ten problem, zadałem to pytanie tutaj na StackOverflow i tutaj na Reddit .
PS4. Po kilku badaniach doszedłem do wniosku, że na razie AsciiDoc jest lepszą opcją dla dokumentacji. Ma wbudowaną funkcję włączania, jest renderowany przez GitHub, a główne edytory kodu, takie jak Atom i vscode, mają rozszerzenia do podglądu na żywo. Można użyć Pandoc lub innych narzędzi do automatycznej konwersji istniejącego kodu MarkDown na AsciiDoc z niewielkimi zmianami.
PS5. Innym lekkim językiem znaczników z wbudowaną funkcją włączania jest
reStructuredText
... include:: inclusion.txt
Standardowo ma składnię. Istnieje również edytor ReText z podglądem na żywo.źródło
Wiem, że to stare pytanie, ale nie widziałem żadnych odpowiedzi na ten efekt: Zasadniczo, jeśli używasz Markdown i Pandoc do konwersji pliku na pdf, w swoich danych yaml u góry strony, możesz dołączyć coś takiego:
Ponieważ pandoc używa lateksu do konwersji wszystkich dokumentów,
header-includes
sekcja wywołuje pakiet pdfpages. Następnie, jeśli dodasz\includepdf{/path/to/pdf/document.pdf}
, wstawi wszystko, co jest zawarte w tym dokumencie. Ponadto można w ten sposób dołączyć wiele plików pdf.Jako bonus zabawy, a to tylko dlatego, że często używam Markdown, jeśli chcesz dołączyć pliki inne niż Markdown, na przykład pliki lateksowe. Zmodyfikowałem nieco tę odpowiedź . Powiedz, że masz plik markdown markdown1.md:
I dwa dodatkowe dokumenty z lateksu1, które wyglądają tak:
I kolejny, document2.tex, który wygląda następująco:
Zakładając, że chcesz dołączyć document1.tex i document2.tex do markdown1.md, po prostu zrób to dla markdown1.md
Uruchom nad nim pandoc, np
w terminalu
pandoc markdown1.md -o markdown1.pdf
Twój końcowy dokument będzie wyglądał mniej więcej tak:
Coś oznacza pełne
Gadająca głowa
Sekcja
Głębia.
Sekcja
Krawędź żyletki.
Sekcja
Glah
Sekcja
Balh Balh
źródło
Używam Marked 2 na Mac OS X. Obsługuje następującą składnię do dołączania innych plików.
Niestety nie można tego karmić pandocem, ponieważ nie rozumie on składni. Jednak napisanie skryptu usuwającego składnię w celu utworzenia wiersza poleceń pandoc jest dość łatwe.
źródło
Kolejne rozwiązanie po stronie klienta oparte na HTML, wykorzystujące markdown-it i jQuery . Poniżej znajduje się małe opakowanie HTML jako dokument główny, który obsługuje nieograniczoną liczbę plików przeceny, ale nie obejmuje zagnieżdżonych. Wyjaśnienie znajduje się w komentarzach JS. Obsługa błędów jest pomijana.
źródło
IMHO, Możesz uzyskać wynik, łącząc pliki wejściowe * .md, takie jak:
źródło