譯自: https://opensource.com/article/18/8/markdown-html-publishing
作者: Peter Cheer
譯者: geekpi
用這個有用工具從 Markdown 文件創建一個基礎的網站。
有很多理由喜歡 Markdown,這是一門簡單的語言,有易于學習的語法,它可以與任何文本編輯器一起使用。使用像 Pandoc 這樣的工具,你可以將 Markdown 文本轉換為 各種流行格式 ,包括 HTML。你還可以在 Web 服務器中自動執行轉換過程。由 TimoD?rr 創建的名為 MDwiki 的 HTML5 和 JavaScript 應用可以將一堆 Markdown 文件在瀏覽器請求它們時轉換為網站。MDwiki 網站包含一個操作指南和其他信息可幫助你入門:
Mdwiki 網站的樣子。
在 Web 服務器內部,基本的 MDwiki 站點如下所示:
該站點的 web 服務器文件夾的樣子
我將此項目的 MDwiki HTML 文件重命名為 START.HTML。還有一個處理導航的 Markdown 文件和一個 JSON 文件來保存一些配置設置。其他的都是網站內容。
雖然整個網站設計被 MDwiki 固定了,但內容、樣式和頁面數量卻沒有。你可以在 MDwiki 站點 查看由 MDwiki 生成的一系列不同站點。公平地說,MDwiki 網站缺乏網頁設計師可以實現的視覺吸引力 —— 但它們是功能性的,用戶應該平衡其簡單的外觀與創建和編輯它們的速度和簡易性。
Markdown 有不同的風格,可以針對不同的特定目的擴展穩定的核心功能。MDwiki 使用 GitHub 風格 Markdown ,它為流行的編程語言添加了格式化代碼塊和語法高亮等功能,使其非常適合生成程序文檔和教程。
MDwiki 還支持 “gimmick”,它增加了如嵌入 YouTube 視頻和顯示數學公式等額外功能。如果在某些項目中需要它們,這些值得探索。我發現 MDwiki 是創建技術文檔和教育資源的理想工具。我還發現了一些可能不會立即顯現出來的技巧和 hack。
當部署在 Web 服務器中時,MDwiki 可與任何現代 Web 瀏覽器一起使用。但是,如果你使用 Mozilla Firefox 訪問 MDwiki,那么就不需要 Web 服務器。大多數 MDwiki 用戶會選擇在 Web 服務器上部署完整的項目,以避免排除潛在用戶,但只需使用文本編輯器和 Firefox 即可完成開發和測試。任何現代瀏覽器都可以讀取加載到 Moodle 虛擬學習環境(VLE)中的完整的 MDwiki 項目,這在教育環境中非常有用。 (對于其他 VLE 軟件,這可能也是如此,但你應該測試它。)
MDwiki 的默認配色方案并非適用于所有項目,但你可以將其替換為從 Bootswatch.com 下載的其他主題。為此,只需在編輯器中打開 MDwiki HTML 文件,找到 extlib/css/bootstrap-3.0.0.min.css,然后插入下載的 Bootswatch 主題。還有一個 MDwiki gimmick,讓用戶在瀏覽器中載入 MDwiki 后,選擇 Bootswatch 主題來替換默認值。我經常與有視力障礙的用戶一起工作,他們傾向于喜歡高對比度的主題,在深色背景上使用白色文字。
MDwiki 頁面使用 Bootswatch Superhero 主題
MDwiki、Markdown 文件和靜態圖像可以用于許多目的。但是,你有時可能希望包含 JavaScript 幻燈片或反饋表單。Markdown 文件可以包含 HTML 代碼,但將 Markdown 與 HTML 混合會讓人感到困惑。一種解決方案是在單獨的 HTML 文件中創建所需的功能,并將其顯示在帶有 iframe 標記的 Markdown 文件中。我從 Twine Cookbook 知道了這個想法,它是 Twine 交互式小說引擎的支持站點。Twine Cookbook 實際上并沒有使用 MDwiki,但結合 Markdown 和 iframe 標簽開辟了廣泛的創作可能性。
這是一個例子:
此 HTML 將顯示由 Markdown 文件中的 Twine 交互式小說引擎創建的 HTML 頁面。
<iframe height="400" src="sugarcube_dungeonmoving_example.html" width="90%"></iframe>
MDwiki 生成的站點結果如下所示:
簡而言之,MDwiki 是一個出色的小應用,可以很好地實現其目的。
via: https://opensource.com/article/18/8/markdown-html-publishing
作者: Peter Cheer 選題: lujun9972 譯者: geekpi 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
和這篇文章一樣,我就是用Markdown寫的。相信各位平時也就用Markdown寫寫文檔,做做筆記,轉成XHtml、Html等,今天教大伙一招騷操作:用Markdown寫PPT。
絕大多數朋友做 PPT都是用的 PowerPoint 或者 KeyNote 吧?功能是比較強大,但你有沒有遇到過這樣的痛點:
如果你遇到這些痛點,那請你一定要看下去。如果你沒有遇到,那也請你看下去吧。
好,說回正題,我列舉了那么多痛點,那這些痛點咋解決呢?
能!甚至解決方案更加輕量級,那就是用 Markdown 來做 PPT!
你試過用 Markdown 寫 PPT 嗎?沒有吧,試試吧,試過之后你就發現上面的功能簡直易如反掌。
具體怎么實現呢?
接下來,就有請今天的主角登場了!它就是——Slidev。
簡而言之,Slidev 就是可以讓我們用 Markdown 寫 PPT 的工具庫,基于 Node.js、Vue.js 開發。
利用它我們可以簡單地把 Markdown 轉化成 PPT,而且它可以支持各種好看的主題、代碼高亮、公式、流程圖、自定義的網頁交互組件,還可以方便地導出成 pdf 或者直接部署成一個網頁使用。
下面我們就來了解下它的基本使用啦。
首先我們需要先安裝好 Node.js,推薦 14.x 及以上版本,安裝方法見這里
接著,我們就可以使用 npm 這個命令了。
然后我們可以初始化一個倉庫,運行命令如下:
npm init slidev@latest
這個命令就是初始化一個 Slidev 的倉庫,運行之后它會讓我們輸入和選擇一些選項,如圖所示:
比如上圖就是先輸入項目文件夾的名稱,比如這里我取名叫做 slidevtest。
總之一些選項完成之后,Slidev 會在本地 3000 端口上啟動,如圖所示:
接著,我們就可以打開瀏覽器 http://localhost:3000 來查看一個 HelloWorld 版本的 PPT 了,如圖所示:
我們可以點擊空格進行翻頁,第二頁展示了一張常規的 PPT 的樣式,包括標題、正文、列表等,如圖所示:
那這一頁的 Markdown 是什么樣的呢?其實就是非常常規的 Markdown 文章的寫法,內容如下:
# What is Slidev?
Slidev is a slides maker and presenter designed for developers, consist of the following features
- **Text-based** - focus on the content with Markdown, and then style them later
- **Themable** - theme can be shared and used with npm packages
- ? **Developer Friendly** - code highlighting, live coding with autocompletion
- **Interactive** - embedding Vue components to enhance your expressions
- **Recording** - built-in recording and camera view
- **Portable** - export into PDF, PNGs, or even a hostable SPA
- **Hackable** - anything possible on a webpage
<br>
<br>
Read more about [Why Slidev?](https://sli.dev/guide/why)
是不是?我們只需要用同樣格式的 Markdown 語法就可以輕松將其轉化為 PPT 了。
再下一頁介紹了各種快捷鍵的操作,這個就很常規了,比如點擊空格、上下左右鍵來進行頁面切換,如圖所示:
更多快捷鍵的操作可以看這里,一些簡單的快捷鍵列舉如下:
接下來就是代碼環節了,因為 Markdown 對代碼編寫非常友好,所以展示自然也不是問題了,比如代碼高亮、代碼對齊等都是常規操作,如圖所示:
那左邊的代碼定義就直接這么寫就行了:
# Code
Use code snippets and get the highlighting directly![^1]
```ts {all|2|1-6|9|all}
interface User {
id: number
firstName: string
lastName: string
role: string
}
function updateUser(id: number, update: User) {
const user = getUser(id)
const newUser = {...user, ...update}
saveUser(id, newUser)
}
```
由于是 Markdown,所以我們可以指定是什么語言,比如 TypeScript、Python 等等。
接下來就是非常酷炫的環節了,我們還可以自定義一些網頁組件,然后展示出來。
比如我們看下面的一張圖。左邊就呈現了一個數字計數器,點擊左側數字就會減 1,點擊右側數字就會加 1;另外圖的右側還嵌入了一個組件,這里顯示了一個推特的消息,通過一個卡片的形式呈現了出來,不僅僅可以看內容,甚至我們還可以點擊下方的喜歡、回復、復制等按鈕來進行一些交互。
這些功能在網頁里面并不稀奇,但是如果能做到 PPT 里面,那感覺就挺酷的。
那這一頁怎么做到的呢?這個其實是引入了一些基于 Vue.js 的組件,本節對應的 Markdown 代碼如下:
# Components
<div grid="~ cols-2 gap-4">
<div>
You can use Vue components directly inside your slides.
We have provided a few built-in components like `<Tweet/>` and `<Youtube/>` that you can use directly. And adding your custom components is also super easy.
```html
<Counter :count="10" />
```
<!-- ./components/Counter.vue -->
<Counter :count="10" m="t-4" />
Check out [the guides](https://sli.dev/builtin/components.html) for more.
</div>
<div>
```html
<Tweet id="1390115482657726468" />
```
<Tweet id="1390115482657726468" scale="0.65" />
</div>
</div>
這里我們可以看到,這里引入了 Counter、Tweet 組件,而這個 Counter 就是 Vue.js 的組件,代碼如下:
<script setup lang="ts">
import { ref } from 'vue'
const props = defineProps({
count: {
default: 0,
},
})
const counter = ref(props.count)
</script>
<template>
<div flex="~" w="min" border="~ gray-400 opacity-50 rounded-md">
<button
border="r gray-400 opacity-50"
p="2"
font="mono"
outline="!none"
hover:bg="gray-400 opacity-20"
@click="counter -= 1"
>
-
</button>
<span m="auto" p="2">{{ counter }}</span>
<button
border="l gray-400 opacity-50"
p="2"
font="mono"
outline="!none"
hover:bg="gray-400 opacity-20"
@click="counter += 1"
>
+
</button>
</div>
</template>
這就是一個標準的基于 Vue.js 3.x 的組件,都是標準的 Vue.js 語法,所以如果我們要添加想要的組件,直接自己寫就行了,什么都能實現,只要網頁能支持的,統統都能寫!
當然,一些主題定制也是非常方便的,我們可以在 Markdown 文件直接更改一些配置就好了,比如就把 theme 換個名字,整個主題樣式就變了,看如下的對比圖:
上面就是一些內置主題,當然我們也可以去官方文檔查看一些別人已經寫好的主題,見:。
另外我們自己寫主題也是可以的,所有的主題樣式都可以通過 CSS 等配置好,想要什么就可以有什么,見:。
接下來就是一個非常強大實用的功能,公式和圖表,支持 Latex、流程圖,如圖所示:
比如上面的 Latex 的源代碼就是這樣的:
Inline $\sqrt{3x-1}+(1+x)^2$
Block
$$
\begin{array}{c}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} &
= \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{array}
$$
其語法也是和 Latex 一樣的。
其背后是怎么實現的呢?其實是因為 Slidev 默認集成了 Katex 這個庫,見:https://katex.org/,有了 Katex 的加持,所有公式的顯示都不是事。
有的朋友就好奇了,既然是用 Markdown 寫 PPT,那么每一頁之間是怎么分割的呢?
其實很簡單,最常規的,用三條橫線分割就好了,比如:
---
layout: cover
---
# 第 1 頁
This is the cover page.
---
# 第 2 頁
The second page
當然,除了使用三橫線,我們還可以使用更豐富的定義模式,可以給每一頁制定一些具體信息,就是使用兩層三橫線。
比如這樣:
---
theme: seriph
layout: cover
background: 'https://source.unsplash.com/1600x900/?nature,water'
---
上面這樣的配置可以替代三橫線,是另一種可以用作頁面分隔的寫法,借助這種寫法我們可以定義更多頁面的具體信息。
當然我們肯定也想給 PPT 添加備注,這個也非常簡單,通過注釋的形式寫到 Markdown 源文件就好了:
---
layout: cover
---
# 第 1 頁
This is the cover page.
<!-- 這是一條備注 -->
這里可以看到其實就是用了注釋的特定語法。
當然還有很多酷炫的功能,比如說,我們在講 PPT 的時候,可能想同時自己也出鏡,Slidev 也可以支持。
因為開的是網頁,而網頁又有捕捉攝像頭的功能,所以最終效果可以是這樣子:
是的沒錯!右下角就是演講者的個人頭像,它被嵌入到了 PPT 中!是不是非常酷!
當然,Slidev 還支持演講錄制功能,因為它背后集成了 WebRTC 和 RecordRTC 的 API,一些錄制配置如下所示:
所以,演講過程的錄制完全不是問題。
具體的操作可以查看:
當然用 Slidev 寫的 PPT 還可以支持部署,因為這畢竟就是一個網頁。
而且部署非常簡單和輕量級,因為這就是一些純靜態的 HTML、JavaScript 文件,我們可以輕松把它部署到 GitHub Pages、Netlify 等站點上。
試想這么一個場景:別人在演講之前還在各種拷貝 PPT,而你打開了一個瀏覽器直接輸入了一個網址,PPT 就出來了,眾人驚嘆,就問你裝不裝逼?
具體的部署操作可以查看:
讓我們看幾個別人已經部署好的 PPT,直接網頁打開就行了:
就是這么簡單方便。
什么?你想實現版本控制,那再簡單不過了。
Markdown 嘛,配合下專業版本管理工具 Git,版本控制再也不是難題。
以上就是對 Slidev 的簡單介紹,確實不得不說有些功能真的非常實用,而且我本身特別喜歡 Markdown 和網頁開發,所以這個簡直對我來說太方便了。
本文轉自https://www.cnblogs.com/BlueSocks/p/16056714.html
者:前端小智 來源:大遷世界
.md文件是markdown的一種標記語言,和html比較起來,更簡單快捷,主要體現在:標記符的數量和書寫上。
方式一:使用i5ting_toc插件
需要先安裝npm(安裝node.js后會自帶npm),然后才能安裝i5ting插件:
npm install i5ting_toc -g
執行命令行生成html文件,在輸入前要進入到對應根目錄下:
i5ting_toc -f **.md
需要注意的是:寫md文檔的特殊符號時記得添加空格。小技巧:如何快速在當前目錄打開cmd?選擇當前目錄,按住shift,然后鼠標右鍵在此處打開命令窗口(在此處打開powerShell窗口)。
方式二:使用gitbook
同樣先需要安裝node,然后運行:
npm i gitbook gitbook-cli -g
生成md文件,這個命令會生成相應的md的文件,然后在相應的文件里寫你的內容即可:
gitbook init
md轉html,生成一個_doc目錄,打開就可以看到你html文件了。
gitbook build
方式三:利用前端代碼
實現原理是采用node.js搭建服務器,讀取md文件轉化為html片斷。瀏覽器發送ajax請求獲取片段后再渲染生成html網頁。
node代碼:
var express = require('express');
var http = require('http');
var fs = require('fs');
var bodyParser = require('body-parser');
var marked = require('marked'); // 將md轉化為html的js包
var app = express();
app.use(express.static('src')); //加載靜態文件
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.get('/getMdFile',urlencodedParser, function(req, res) {
var data = fs.readFileSync('src/test.md', 'utf-8'); //讀取本地的md文件
res.end(JSON.stringify({
body : marked(data)
}));
} );
//啟動端口監聽
var server = app.listen(8088, function () {
var host = server.address().address;
var port = server.address().port;
console.log("應用實例,訪問地址為 http://%s:%s", host, port)
});
前端html:
<div id="content"> <h1 class="title">md-to-HTML web app</h1> <div id="article"> </div></div><script type="text/JavaScript" src="js/jquery-1.11.3.min.js"></script><script> var article = document.getElementById('article'); $.ajax({ url: "/getMdFile", success: function(result) { console.log('數據獲取成功'); article.innerHTML = JSON.parse(result).body; }, error: function (err) { console.log(err); article.innerHTML = '<p>獲取數據失敗</p>'; } });</script>
*請認真填寫需求信息,我們會在24小時內與您取得聯系。