Pandoc 多Markdown转单PDF

2023-05-16

文章目录

    • Pandoc 简介
    • Pandoc 安装
    • pandoc-latex-template
    • 字体安装
    • Powershell 脚本
    • Ubuntu Pandoc
    • Markdown 合并

Pandoc 简介

Pandoc, 免费的文档转换器, 支持常见的各种文件格式的相互转换, 如Markdown, HTML, EPUB, LaTeX, docx, RTF, PDF 等.

本篇以Windows下的多Markdown转单PDF为例, 最后也会介绍Ubuntu下的使用方法.

Pandoc 安装

Windows下的安装:

  • Pandoc: 直接到 Installing pandoc 下载安装.
  • MiKTeX: 直接到 Getting MiKTeX 下载安装, Pandoc默认使用 LaTeX 创建PDF, Windows上安装MiKTeX就包含了LaTeX. 安装完后, 打开 MiKTeX Console 检查MiKTeX及宏包的更新(第一次运行Pandoc转出PDF时, 可能会提示安装缺失的宏包)

安装完后, 检查和添加Pandoc和MiKTeX的环境变量

在这里插入图片描述

环境变量添加完, 首次需要在Powershell中刷新下环境, 让Powershell能找到MiKTeX一堆宏包exe文件的路径

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") 

pandoc-latex-template

如果用默认参数, pandoc xxx.md --pdf-engine=xelatex -o yyy.pdf 生成PDF, 会发现各种小问题, 如代码块未和正文明显区分, 代码块中的单行过长会超出文档边界等.

类似PPT套模版, Pandoc生成好看的PDF也需要一套好用的模版, 如这个star数超多的 pandoc-latex-template, 即大名鼎鼎的eisvogel.

下载最新的pandoc-latex-template的 Releases 压缩包, 解压后, 把 eisvogel.latex 文件放入 C:\Users\<Your-Username>\AppData\Roaming\pandoc\templates\ 目录下即可(没有就自己新建目录).

Readme和examples中也介绍了很多eisvogel可以调的参数, 如命令行中让代码块不显示行号 -V listings-disable-line-numbers=true 等.

字体安装

Pandoc默认参数不支持中文, 需要指定中文字体才可以, Powershell 中查看支持的中文字体:

fc-list :lang=zh

最好是安装一些商用免费的. 如 得意黑?, 华为的鸿蒙字体HarmonyOS Sans?, 小米的MiSans? 等

下面的脚本以 阿里巴巴普惠体 和 微软cascadia-code 字体为例, 下载压缩包解压后, 双击ttf文件即可在Windows上安装. 这两种字体的数字’1, 小写l和大写I是可以分清楚的, 数字0 和大写O也能分清.

Powershell 脚本

现在有以下一些文件

> wsl tree -L 2                                  
.
├── 2022
│   ├── docker.assets	# .assets文件夹里面是md文件对应的图片
│   ├── docker.md
│   ├── wsl2.assets
│   └── wsl2.md
├── 2023
│   ├── rusterr.md
│   ├── test0.assets
│   ├── test0.md
│   ├── zellij.assets
│   └── zellij.md
├── cover.md
├── logo.png
└── md2pdf.ps1

文件 cover.md 是手写的封面文件, 主要是设置主标题, 副标题, 作者, 日期, logo, 颜色等

---
title: "Markdown Notes"
subtitle: "Write in TyporalI"
author: [Karoto]
date: "2023-01-12"
keywords: [Markdown, PDF]
---

把所有的.md文件转出成一个PDF文件, 下面是一个尚可能用的脚本, 仅供参考, md2pdf.ps1

# Recursive search for all .md files in the current directory and subdirectories
$mdfiles = Get-ChildItem -Path . -Recurse -Filter *.md
# Recursive search for all .assets folders in the current directory and subdirectories
$assets = Get-ChildItem -Path . -Recurse -Filter *.assets
# copy all .md files and .assets folders to new directory
New-Item -ItemType Directory -Path ./temp
$mdfiles | Copy-Item -Destination ./temp -Recurse
$assets | Copy-Item -Destination ./temp -Recurse
# change directory to new directory
Set-Location ./temp
# Recursive search for all .md files in the current directory and subdirectories
$mdfiles = Get-ChildItem -Path . -Recurse -Filter *.md
# print $mdfiles
$mdfiles | ForEach-Object {Write-Host $_.FullName}

# PDF Name
$pdffile = "../notes.pdf"

# Convert .md files to .pdf
pandoc $mdfiles -o $pdffile --from markdown --template eisvogel  --listings `
    --pdf-engine=xelatex `
    -V mainfont='Alibaba PuHuiTi' `
    -V sansfont='Alibaba PuHuiTi' `
    -V monofont='Cascadia Mono' `
    -V CJKmainfont='Alibaba PuHuiTi' `
    -V CJKsansfont='Alibaba PuHuiTi' `
    -V CJKmonofont='Cascadia Mono' `
    --toc `
    -V toc-own-page=true `
    -V toc-title="Content" `
    -V toc-color=NavyBlue `
    --number-sections `
    -V colorlinks=true `
    -V linkcolor=blue `
    -V urlcolor=blue `
    -V code-block-font-size=\scriptsize `
    -V titlepage=true `
    -V titlepage-color="FFFFFF" `
    -V titlepage-rule-color="FFFFFF" `
    -V titlepage-text-color="000000" `
    -V titlepage-logo="../logo.png" `
    -V logo-width=20mm `

# change directory back to original directory
Set-Location ..
# remove temp directory
Remove-Item -Path ./temp -Recurse

说明:

  • 脚本中把所有的md文件和assets文件夹复制到临时文件夹temp, 这里没有对重名文件处理, 如果有, 可能的结果是覆盖
  • 进入temp文件夹, 运行pandoc命令生成了pdf文件
  • 最后是退出temp文件夹并删除temp
  • --template eisvogel 使用了 模版 eisvogel
  • -V, --variable 变量
  • 正文, 封面和目录字体使用 阿里巴巴普惠体 Alibaba PuHuiTi, 代码英文字体是 Cascadia Mono
  • CJK的意思是Chinese, Japanese和Korean, 代表中日韩文字
  • --toc 自动添加目录, toc-title="Content" 这个写成 toc-title="目录" 会报错, 还不知道怎么解决
  • --number-sections 自动添加章节编号 1, 1.1, 2.1 这种, 不用自己在Markdown中手写编号, 章节的顺序是 $mdfiles 这个string list里面按照拼音升序的顺序, 如果想改变章节顺序, 可以手动编号或直接手写 $mdfiles 变量列表
  • 颜色方面, toc-color=NavyBlue设置了目录是深蓝色字体, titlepage-text-color="000000"设置封面黑色字体, linkcolor=blue 和 urlcolor=blue 设置链接是蓝色字体
  • 代码块的字体比正文小了些: code-block-font-size=\scriptsize, 可以设置为 \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge and \Huge
  • 有行号的代码块复制的时候会连行号一块复制, 可以设置不显示行号 -V listings-disable-line-numbers=true
  • titlepage-logo="../logo.png"logo-width=20mm 指定了封面logo的目录和大小, 其实也可以直接写到封面的md文件里面

下面就看一下powershell脚本运行后, 生成的 notes.pdf 文件的效果

封面的标题, 副标题, 作者, logo 和日期:

在这里插入图片描述

自动编号的目录和页眉

在这里插入图片描述

页脚

在这里插入图片描述

正文图片, 链接颜色:

在这里插入图片描述

代码高亮, 行号, 单行的自动换行:

在这里插入图片描述

整体效果还算不错, 更好的封面效果可以参阅 title-page-custom

Ubuntu Pandoc

在 Ubuntu20 测试, 一直报 ! LaTeX Error: File scrartcl.cls’ not found.` 还不知道怎么解决, Ubuntu18没有这个问题, 所以暂时推荐在Ubuntu18上来测试.

Pandoc和texlive安装

#!/bin/bash
# https://pandoc.org/installing.html#linux
# https://github.com/jgm/pandoc/releases
wget https://github.com/jgm/pandoc/releases/download/2.19.2/pandoc-2.19.2-1-amd64.deb
sudo dpkg -i pandoc-2.19.2-1-amd64.deb
pandoc --version
sudo apt install -y texlive texlive-xetex texlive-latex-recommended

阿里巴巴普惠体和Cascadia Code字体安装

# fonts, Alibaba-PuHuiTi
# https://www.zitijia.com/i/250417369808129081.html
# 下载解压
sudo mkdir -p /usr/share/fonts/Alibaba-PuHuiTi
sudo cp -r Alibaba-PuHuiTi/* /usr/share/fonts/Alibaba-PuHuiTi
sudo fc-cache -fv
fc-list :lang=zh | grep Alibaba

# fonts, Cascadia Code
# https://github.com/microsoft/cascadia-code/releases
wget https://github.com/microsoft/cascadia-code/releases/download/v2111.01/CascadiaCode-2111.01.zip
unzip CascadiaCode-2111.01.zip
sudo mkdir -p /usr/share/fonts/Cascadia-Code
sudo cp -r ttf/* /usr/share/fonts/Cascadia-Code
sudo fc-cache -fv
fc-list | grep Cascadia

Eisvogel模版安装

# Eisvogel
# https://github.com/Wandmalfarbe/pandoc-latex-template/releases
mkdir -p eisvogel && cd eisvogel
wget https://github.com/Wandmalfarbe/pandoc-latex-template/releases/download/v2.1.0/Eisvogel-2.1.0.tar.gz
tar -xvf Eisvogel-2.1.0.tar.gz
mkdir -p ~/.pandoc/templates
cp eisvogel.latex ~/.pandoc/templates
cd ..

下面是Ubuntu的脚本 md2pdf.sh

#!/bin/bash

# if tmp exists, delete it
if [ -d "tmp" ]; then
    rm -rf tmp
fi
mkdir -p tmp

# Recursive search for all .md files in the current directory and subdirectories
md_files=$(find . -type f -name "*.md")
# Recursive search for all .assets folders in the current directory and subdirectories
assets_folders=$(find . -type d -name "*.assets")
# copy all .assets folders and .md files to the temp directory
cp -r $md_files $assets_folders tmp
cd tmp
# Recursive search for all .md files in the current directory and subdirectories
md_files=$(find . -type f -name "*.md")
echo $md_files
# PDF Name
pdf_name="../notes.pdf"

# Convert all .md files to .pdf
pandoc -o $pdf_name $md_files \
    --from markdown \
    --template eisvogel \
    --pdf-engine=xelatex --listings \
    --toc --number-sections \
    -V mainfont="Alibaba PuHuiTi" \
    -V sansfont="Alibaba PuHuiTi" \
    -V monofont="Cascadia Code" \
    -V CJKmainfont="Alibaba PuHuiTi" \
    -V CJKsansfont="Alibaba PuHuiTi" \
    -V CJKmonofont="Cascadia Code" \
    -V colorlinks=true \
    -V urlcolor=blue \
    -V linkcolor=blue \
    -V toc-color=NavyBlue \
    -V titlepage=true \
    -V titlepage-color="FFFFFF" \
    -V titlepage-rule-color="FFFFFF" \
    -V titlepage-text-color="000000" \
    -V titlepage-logo="../logo.png" \
    -V logo-width=20mm 
    

说明:

  • 仍然是把所有的md文件和assets文件夹拷贝到tmp文件夹
  • 去掉了 code-block-font-size=\scriptsize, 这么写有问题, 代码块前会有scriptsize字符, 改成code-block-font-size=\\scriptsize 有一个图片的位置变了, 索性删去了
  • 导出的PDF文档效果和Windows上基本一致

Markdown 合并

其实可以直接把多个Markdown合并成一个md文件, 图片都是相对路径, 把图片的assets文件夹和合并后的md文件放一个目录, 然后用Typora打开md文件, 导出PDF即可, 下面给出一个合并的脚本

#!/bin/bash

# if tmp exists, delete it
if [ -d "tmp" ]; then
    rm -rf tmp
fi
mkdir -p tmp

# Recursive search for all .md files in the current directory and subdirectories
md_files=$(find . -type f -name "*.md")
# Recursive search for all .assets folders in the current directory and subdirectories
assets_folders=$(find . -type d -name "*.assets")
# copy all .assets folders and .md files to the temp directory
cp -r $md_files $assets_folders tmp
cd tmp
# Recursive search for all .md files in the current directory and subdirectories
md_files=$(find . -type f -name "*.md")
echo $md_files
# all .md files into one file
echo "# Contents
@[toc]
" > all.md
cat $md_files >> all.md

欢迎关注微信公众号
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandoc 多Markdown转单PDF 的相关文章

  • 在 R Markdown 文件中嵌入 pdf 并调整分页

    我即将完成博士学位 我需要在 R Markdown 文本中间的某个位置嵌入一些论文 pdf 格式 将 R Markdown 转换为 PDF 时 我希望将这些 PDF 论文嵌入到转换中 但是 我希望这些 PDF 论文也根据 Markdown
  • 如何在Android中将图像文件转换为pdf文件

    我正在尝试在 Android 应用程序中将图像文件 jpg 转换为 pdf 文件 我用过itextpdf罐子和机器人文本罐 都不适合我 下面是使用时的代码itextpdf Document document new Document Str
  • 使用 KnitR 在 R 中以编程方式创建 Markdown 表

    我刚刚开始了解 KnitR 以及使用 Markdown 生成 R 文档和报告 这对于我与工作有关的许多日常报告来说似乎是完美的 然而 我没有看到的一件事是使用 Markdown 格式打印数据框和表格的简单方法 有点像xtable 但使用 M
  • 如何用C#替换PDF中的文本?

    我在这里看到了很多解决方案 但没有一个是明确或好的答案 这是我的简单问题 希望得到直接答案 我有一个 PDF 文件 模板 其创建的文本如下 名字 姓氏 地址 电话号码 是否可以使用 C 代码将这些模板替换为我选择的文本 没有字段 没有其他复
  • 在solr中获取pdf搜索结果的页码

    我正在构建一个 Web 应用程序 用户可以在其中搜索 pdf 文档并使用 pdf js 查看它们 我想显示搜索结果 其中包含找到搜索词的段落的简短片段以及用于在右侧页面打开文档的链接 所以我需要的是每个搜索结果的页码和简短的文本片段 我正在
  • 将 Highcharts 导出为 PDF(使用 javascript 和本地服务器 - 无互联网连接)

    我在我的应用程序中使用 Highcharts 没有任何互联网连接 我的 html 页面上有多个图表 我想生成一个包含该页面中所有图表的 PDF 报告 我怎样才能做到这一点而不将数据发送到互联网上的任何服务器 我将感谢您提供的任何帮助或任何示
  • 摆脱 Sphinx 中的“重复标签”警告

    在 Sphinx 中 我收到大量警告 例如 PATH FILENAME LINE WARNING duplicate label LABELNAME other instance in PATH FILENAME 似乎将所有节标题视为 标签
  • rmarkdown:pandoc:找不到 pdflatex

    当我在 Mac 上使用 render rmarkdown 从 Rmd 文件生成 pdf 文件时 出现错误消息 pandoc pdflatex not found pdflatex is needed for pdf output Error
  • 如何在 R 和 RStudio 中构建 pdf 小插图

    我是编写 R 包的新手 我正在尝试学习如何为我的包裹制作小插图 我创建了一个小插图文件夹 其中包含文件 getting started Rmd title WaterML Tutorial author Jiri Kadlec date r
  • 重命名 PDF 文件中的指定目标

    我一直在 PDF 文件中使用命名目标来在文件中的特定位置打开 PDF 文件 负责生成 PDF 文档的团队使用工具从书签自动生成命名目的地 因此命名目的地往往具有诸如 9 Glossary 或 Additional Information 之
  • 如何在 ionic 应用程序中显示 pdf 文件而无需下载

    我所做的事情 在应用程序浏览器中使用 使用谷歌文档 使用的网页视图 所以我尝试了所有这些方法来使用 ionic 在 Android 设备中显示 pdf 文件 但没有用 我可以在所有这些方法中看到下载按钮 谁能告诉我如何在没有用户下载选项的情
  • Python PIL 由于某种原因无法打开 PDF

    所以我的程序能够打开 PNG 但不能打开 PDF 所以我这样做只是为了测试 但它仍然无法打开 甚至是一个简单的 PDF 我不知道为什么 from PIL import Image with Image open r Adams K a pd
  • 使用 ps2pdf (ghostscript) 创建正确的 PDF/X

    我已经为此苦苦挣扎了几天 所以我想我应该在这里寻求帮助 基本上 我尝试使用 ps2pdf 版本 9 10 创建正确的 PDF X 1 和 PDF X 3 文档 是的 我知道据说 ps2pdf 仅支持 PDF X 3 请参阅这个线程 http
  • 将 PDF 转换为 JPG 时质量低

    我正在尝试使用 Imagemagic RMAgick 将 PDF 文档转换为图像 原始 PDF 也是从图像创建的 不是原生矢量 PDF image Magick Image from blob original pdf self forma
  • 渲染从 SimpleDocTemplate 构建的 ReportLab pdf

    我有一个 django 应用程序 当前使用用户可以下载的画布生成 pdf 我创建一个 StringIO 缓冲区 执行一些操作 然后发送调用 response write Set up response response HttpRespon
  • 如何使用 iTextSharp 设置 PDF 段落或字体行高?

    如何使用 iTextSharp 更改 PDF 字体或段落的行高 排版中的行距称为行距 如果可以使用行间距 则可以使用 Paragraph Leading 或 Paragraph LeadingMultiplier 看http itextsh
  • 使用 Pyqt4 从 URL 下载数千个 PDF

    理想情况下 我试图从给定网站下载数千个 PDF 然而 由于某种原因 它甚至无法下载 100 个 PDF 我不知道为什么 这是代码 usr bin env python import time from pyPdf import PdfFil
  • 如何在 IPython 中设置 markdown 链接的基本 url?

    我很高兴地设置 在我的 IPython html 笔记本 IPython 0 12 的 Markdown 单元中 以便能够将链接缩写为 wiki documentation doc html 在 Markdown 单元格中 但这使得保存笔记
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • 使用cmd批处理文件获取pdf中的页数

    我可以看到使用 C PHP 和其他语言获取 pdf 中的页数有很多问题 但我想知道使用批处理文件或 cmd 是否有一种简单的方法来获取页数 Using pdftk http www accesspdf com pdftk pdftk my

随机推荐

  • 对.net事件的看法

    一 事件的本质 事件是软件系统里的两个子系统之间 xff0c 或者两个模块之间 xff0c 或者两个对象之间发送消息 xff0c 并处理消息的过程 在面向对象的世界里 xff0c 就可以统一认为是两个对象之间的行为 两个对象之间发送的这种消
  • 深入理解module.exports、exports、require、export、export default、import

    前言 xff1a 说到module exports exports require export export default import这些 xff0c 有一点我们是必须要提一下的 xff0c 就是模块化编程方式 以上这些都是模块之间的
  • 服务器安全设置Centos7 防火墙firewall与iptables

    一 gt gt gt gt gt gt 启用centos7 iptables防火墙Centos7 防火墙firewall设置方法 我们Sinesafe在处理客户服务器Linux Centos7 64位系统里配置防火墙安全设置需要选择2种方案
  • VTK基本概念之坐标系统

    坐标系统 在实际开发中 xff0c 必须理解不同坐标系统之间的关系 计算机图形学里常用的四种坐标系 xff1a Model坐标系 Word坐标系 View坐标系和Display坐标系统 xff0c 转换关系如下图所示 VTK支持多种不同类型
  • STM32学习(蜂鸣器实验)

    蜂鸣器硬件电路连接 蜂鸣器软件设计 库函数 使能输入输出口时钟 调用函数RCC AHB1PeriphClockCmd 初始化输入输出口模式 调用函数GPIO Init 操作输入输出口 xff0c 输出高低电平 beep h ifdef BE
  • Esxi\CentOS7.6虚机\2080ti驱动 Unable to determine the device handle for GPU 0000:0B:00:00: Unknown ERROR

    整体背景 服务器使用Esxi虚拟出CentOS7 6的虚机 xff0c 然后在虚机中给2080ti显卡安装驱动 安装过程 1 配置显卡直通 此部分由运维完成 xff0c 未参与其中 xff0c 可参考攻略 xff1a https blog
  • 从断舍离中整理生活

    前言 公众号有一个多月未更文 xff0c 主要思考了后续更文的方向 xff0c 最终确定了以读书笔记分享为主题 xff0c 和大家一起学习 一起成长 今天开始 xff0c 每周至少更新一篇文章 xff0c 大家有想看的书可以在后台留言 xf
  • Android Studio升级到 3.2.0,部分依赖库报错 android.arch.lifecycle:runtime:1.0.3,解决办法

    Android Studio升级到 3 2 0 xff0c 部分依赖库报错 问题描述 xff1a Cannot find a version of android arch lifecycle runtime that satisfies
  • OpenCV4.7.0、FFmpeg5.1 Nvidia GPU视频硬解码

    1 环境 操作系统 xff1a Ubuntu18 04 GPU xff1a Nvidia GeForce RTX 2080TI 2 安装2080TI驱动 请参考文章 158条消息 NVIDIA GPU 驱动程序安装 洪流之源的博客 CSDN
  • MQ-2烟雾传感器的使用

    一 MQ 2烟雾传感器简介 MQ 2 烟雾传感器采用在清洁空气中电导率较低的二氧化锡 SnO2 xff0c 属于表面离子式N型半导体 当MQ 2烟雾传感器在200到300摄氏度环境时 xff0c 二氧化锡吸附空气中的氧 xff0c 形成氧的
  • HC-SR04超声波测距模块介绍

    超声波简介 超声波是由机械振动产生的 可在不同介质中以不同的速度传播 具有定向性好 能量集中 传输过程中衰减较小 反射能力较强等优点 超声波传感器可广泛应用于非接触式检测方法 它不受光线 被测物颜色等影响 对恶劣的工作环境具有一定的适应能力
  • 液晶12864显示图片

    液晶12864简介 12864是128 64点阵液晶模块的点阵数简称 基本参数 1 低电源电压 xff08 VDD 43 3 0 xff5e 43 5 5V xff09 2 显示分辨率 128 64 点 3 内置汉字字库 xff0c 提供8
  • 液晶12864显示字符

    液晶12864简介 12864是128 64点阵液晶模块的点阵数简称 基本参数 1 低电源电压 xff08 VDD 43 3 0 xff5e 43 5 5V xff09 2 显示分辨率 128 64点 3 内置汉字字库 xff0c 提供81
  • Bash:command:未找到命令

    前言 在Linux系统中 xff0c 经常会遇到这样的问题 xff1a bash xff1a command xff1a 未找到命令 这个真的很烧脑 xff0c 遇到的次数多 xff0c 在网上也查了好多 xff0c 答案五花八门 xff0
  • S32K148----SDK笔记----CAN收发

    文章目录 前言建立工程ProcessorExpert配置发送CAN报文CAN接收中断工程代码微信公众号 前言 S32K148自带3路CAN 官方的SDK给了can pal的例程 本文更基础一点 直接用flexcan组件相关的函数 CANFD
  • TC397开发板KIT_A2G_TC397_5V_TFT简介

    开发板简介 照片资料调试资源供电扩展CAN 用的开发板是KIT A2G TC397 5V TFT 其实更推荐KIT A2G TC397 3V3 TFT 售价 1 670 59 照片 正面 背面 5V的板子和3 3V的板子主要是下面几个器件不
  • AURIX TC397 Flash编程

    目录 Flash编程基础知识Flash Programming微信公众号 Flash编程基础知识 参考 Flash Programming 1 for KIT AURIX TC397 TFT 本例展示了如何烧写PFLASH Program
  • 周立功USBCAN-II的Python调用

    目录 USBCAN II环境配置CAN收发运行zcanpro微信公众号 USBCAN II USBCAN II 或者叫USBCAN2是周立功 致远电子 比较经典的USB接口的CAN卡 有两路标准CAN 最高支持到1M波特率 单用USB就可以
  • 拒绝丧偶式育儿,正确「养育男孩」

    前言 如何养育男孩 xff1f 当写下这几个字的时候 xff0c 我已在心里默念了好几遍 xff0c 不知道该如何回答 在2年前的某个凌晨2点18分 xff0c 第一声婴儿地啼哭 xff0c 护士告诉我 是个男孩 开始 xff0c 我就买了
  • Pandoc 多Markdown转单PDF

    文章目录 Pandoc 简介Pandoc 安装pandoc latex template字体安装Powershell 脚本Ubuntu PandocMarkdown 合并 Pandoc 简介 Pandoc 免费的文档转换器 支持常见的各种文