2013-08-26 19 views
17

Có cách nào để nhúng một tài liệu markdown (hoặc tài liệu phụ của nó - Tôi đang sử dụng PanDoc) trong tài liệu khác ngoại trừ sử dụng jQuery().load(url)?Nhúng một tài liệu đánh dấu vào một tài liệu khác

Tôi muốn có tài liệu có ví dụ. main.md, chapter1.md, chapter2.md, với main.md tải chapter1.mdchapter2.md tự động.

main.md sẽ có văn bản ở giữa hai chương, ví dụ:

main.md:

Some opening text... 
... 
[chapter1.md] 

Some additional text... 
... 
[chapter2.md] 
... 
something else. 

Vì vậy, tôi không thể sử dụng một cách tiếp cận cat *.md > final.md

Trả lời

8

Markdown bởi chính nó thiếu một ký hiệu cho bao gồm các file, mà thay vít đó.

pandoc có ví dụ về cách sử dụng bộ lọc haskell tùy chỉnh trên các khối mã để bao gồm các tệp nhưng điều này a. để lại một khối mã xung quanh văn bản và (quan trọng hơn) b. không phân tích cú pháp tệp mới dưới dạng đánh dấu, và thẳng thắn là haskell của tôi không phải là nhiệm vụ sửa lỗi đó.

Tuy nhiên, bạn có thể đạt được điều này bằng cách thực hiện quá trình xử lý trước, sử dụng perl *. Tôi giả định rằng mỗi bao gồm là trên một dòng của chính nó của các hình thức hiển thị ở trên.

perl -ne 's/^\[(.+)\].*/`cat $1`/e;print' main.md > final.md 

* Tôi không thích phải sử dụng perl, nhưng sed thiếu khả năng đọc từ tệp sử dụng mẫu đối sánh để xác định tên.

+0

Lời cảm ơn hoàn hảo @OliverMatthews. Tôi có thể sử dụng python thay vì perl nhưng một quá trình trước âm thanh như một ý tưởng tốt. –

+0

Sau hàng chục giờ đầu tư để tìm kiếm một phương pháp khả thi và nhanh chóng để thực hiện bao gồm trong Pandoc này là cuối cùng những gì làm việc. Cảm ơn bạn! – certainlyakey

+0

Dưới đây là cách tuyên bố perl của tôi trông giống như bây giờ - đó là một chút sửa đổi để nó có thể ôm đường dẫn tệp bằng không gian và tương thích với các plugin ST tìm đường dẫn như AutoFileName. Ngoài ra nó được thoát ra để làm việc bên trong một hệ thống xây dựng ST. Cú pháp là '# (đường dẫn/đến/tệp)': 'perl -ne 's /^#\\ ((.+)\\).*/' cat \ "\\ $ 1 \" '/ e; in '$ {file_base_name} .md> result.md' – certainlyakey

2

Nếu bạn không muốn các chương con nội tuyến, bạn có thể chỉ cần chèn các liên kết vào chương chính. Bằng cách này, bạn không cần một bước tiền xử lý.

Như Oliver Matthews đã viết, bạn có thể viết bước tiền xử lý của riêng bạn với perl.

Hoặc bạn có thể sử dụng một bộ tiền xử lý hiện có, như m4 hoặc cpp (Bộ tiền xử lý C) cho phép bao gồm các tệp. Tuy nhiên, cpp có thể không đối phó tốt với các phần mã C trong tài liệu. Đặc biệt là khi có nhiều chỉ thị trong đó.

Ngoài ra còn có các thanh công cụ có sẵn trên internet kết hợp các tài liệu riêng biệt vào một thứ gì đó lớn hơn. Thật không may, tôi đã có vấn đề hiện tại để truy cập vào bản sao lưu các dấu trang của tôi.

Và đây là câu hỏi tương tự, với câu trả lời: Markdown and including multiple files mặc dù câu trả lời không giải thích cách chèn các chương con ở giữa văn bản khác.

+0

Cảm ơn @Sebastian.Một liên kết rất hữu ích nữa. –

+0

Tôi đã nghĩ đến việc sử dụng cpp (và sử dụng #include), nhưng hình dung nó sẽ là một nỗi đau khi các tiêu đề cũng bắt đầu bằng #s. Đối với những người thích những thứ bí truyền hơn, luôn có funnelweb (đó có lẽ là những gì tôi đã sử dụng cá nhân, nhưng tôi đã cố gắng giới hạn nó với những thứ bạn đã cài đặt). –