技术背景

在早期我写过一些文章介绍用RMarkdown写Beamer,还有相应的TinyTex配置。后来Xie Yihui大神发文离开了RMarkdown核心团队,想来中文社区的支持力度和活跃度可能会有所降低。于是干脆直接用pandoc,把普通的markdown文件编译成Latex Beamer PDF格式。

pandoc的安装

这里给的是Ubuntu Linux操作系统的pandoc安装方案:

$ apt install pandoc

安装完成后可以运行如下指令确认是否安装成功:

$ pandoc --help

以及查看版本:

$ pandoc --version
pandoc 1.19.2.4
Compiled with pandoc-types 1.17.0.5, texmath 0.9.4.4, skylighting 0.3.3.1
Default user data directory: /root/.pandoc
Copyright (C) 2006-2016 John MacFarlane
Web: http://pandoc.org
This is free software; see the source for copying conditions.
There is no warranty, not even for merchantability or fitness
for a particular purpose.

安装pdflatex

系统里面没有pdflatex的话无法将latex文件编译成pdf文件,这里提供的是一个简略版安装:

$ apt install texlive texlive-xetex latex-cjk-all texmaker

安装完成后,随便做一个markdown文件测试下编译效果:

到这一步,基本上大部分的英文Markdown Beamer PDF构建就没什么问题了。

代码块和公式块

这个是比较常用的功能,相关的测试Markdown文件如下:

---
title: "Test Markdown"
author: "Dechin"
date: "`2022.03.29`"
output:
beamer_presentation:
theme: Dresden
colortheme: seagull
--- # Title 1 ## Slide 1/2 - Bullet 1
- Bullet 2
- Bullet 3 ## Slide 2/2 \```python
import numpy as np
print ('This is a python code block')
\``` # Title 2 ## Slide 1/1 Test Equation input
$$
-i\hbar\frac{\partial}{\partial t}\left|\psi\right>=E\left|\psi\right>
$$

需要注意的是,案例中Python代码块前面的两个斜杆要去掉,这里放两个斜杆是为了防止跟博客园平台的Markdown语法冲突。使用Pandoc直接编译效果如下:

这个样式就表示编译成功。

主题和颜色主题

这个是跟此前的RMarkdown非常不同的一个地方,RMarkdown的语法中是在.rmd的Markdown文件中直接配置相关的theme和colortheme。但是在上面的章节中我们可以显然的看到这个主题和颜色主题配置没有被编译进去。在pandoc编译时,我们需要在命令行中配置相应的主题,例如这样编译:

$ pandoc -t beamer -o md1.pdf -V theme=Dresden md1.md

使用这种方法可以配置Dresden主题,也是我个人比较常用的一个主题,效果大概如下:

使用同样的-V可以进一步配置颜色主题:

$ pandoc -t beamer -o md1.pdf -V theme=Dresden -V colortheme=seagull md1.md

这里配置了一个灰色主题:

关于Beamer的更多主题,可以参考这个网站。关于pandoc相关主题的更多配置选项,可以参考其中文手册

中文内容

如果文档中有中文内容,可以先安装一个字体配置工具:

$ apt install fontconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
fontconfig is already the newest version (2.12.6-0ubuntu2).
fontconfig set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.

查询本地有哪些中文字体:

$ fc-list :lang=zh
/usr/share/fonts/truetype/arphic-bkai00mp/bkai00mp.ttf: AR PL KaitiM Big5,文鼎PL中楷:style=Regular
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf: Droid Sans Fallback:style=Regular
/usr/share/fonts/truetype/arphic-gkai00mp/gkai00mp.ttf: AR PL KaitiM GB,文鼎PL简中楷:style=Regular
/usr/share/fonts/truetype/arphic-gbsn00lp/gbsn00lp.ttf: AR PL SungtiL GB,文鼎PL简报宋:style=Regular
/usr/share/fonts/truetype/arphic-bsmi00lp/bsmi00lp.ttf: AR PL Mingti2L Big5,文鼎PL細上海宋:style=Regular

如果没有中文字体,可以考虑从Windows系统迁移一些字体过来,这里暂不做介绍。然后在编译的时候,加上一个--latex-engine=xelatex的选项(不加会编译报错),和字体配置选项(不加中文会被编译成空白),具体编译指令如下:

$ pandoc --latex-engine=xelatex -t beamer -o md1.pdf -V theme=Dresden -V colortheme=seagull -V mainfont='AR PL KaitiM GB' md1.md

生成的pdf效果如下:

这样就实现了中文内容的编译。

总结概要

通过使用pandoc,使得我们可以直接将普通的Markdown文件编译成一个Latex Beamer PDF格式的演示文稿文件。相比于RMarkdown有更强的灵活性和通用性,只是不能在生成文稿时运行相关代码,不过这点对于那些只需要一个“静态”演示文稿的人来说影响不大。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/pandoc.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

Markdown转Beamer的更多相关文章

  1. 通过R Studio用Markdown写Beamer

    技术背景 在写一些学术演示文档时,经常有可能用到Beamer--一种Latex的学术风PPT模板,比如下图所示的这种: 这种风格的演示文档有几个明显的优点:简约.严肃.可以用Latex敲公式和推导.可 ...

  2. 使用Markdown+Pandoc+LaTex+Beamer制作幻灯片

    概述 为什么使用markdown? mardown是一种轻量级的标记语言,语法简单,可读性好,并且容易转化成其他格式的文档, 在技术文档撰写中得到越来越广泛的应用.相信大家对markdown都有一定了 ...

  3. Markdown转pdf

    最近由于项目需要,要用到把markdown转换成pdf文件下载下来,最开始的时候想到的是先把markdown转成html,用到的是Parsedown:然后再将html转成pdf,用到了html2pdf ...

  4. Markdown+Pandoc 最佳写作拍档 (mailp.in)

    Markdown+Pandoc 最佳写作拍档 我们为什么写作? 自从人们开始写作,写作便是记录.抒发.批判.反省的好工具.从石板上的刻印到笔墨纸砚,再到如今的信息时代.从静态的个人主页到托管博客,从个 ...

  5. Wiz写Blog? 不会再爱了,全面拥抱Markdown+Pandoc

    Wiz写Blog? 不会再爱了,全面拥抱Markdown+Pandoc 文章转载自 http://iout.in/archives/454.html 我们为什么写作? 自从人们开始写作,写作便是记录. ...

  6. [置顶] 献给写作者的 Markdown 新手指南

    作者:http://jianshu.io/p/q81RER 出处:http://jianshu.io/p/q81RER 献给写作者的 Markdown 新手指南 简书 「简书」作为一款「写作软件」在诞 ...

  7. NiceMark——我的Markdown编辑器

    NiceMark--我的Markdown编辑器 闲来无事,写了一个Markdown编辑器.基于electron,完全采用Web前段技术(Html,css,JavaScript)实现.代码已托管在Git ...

  8. Markdown 图片助手-MarkdownPicPicker

    title: Markdown 图片助手 v0.1 toc: true comments: true date: 2016-06-04 16:40:06 tags: [Python, Markdown ...

  9. 前端学Markdown

    前面的话   我个人理解,Markdown就是一个富文本编辑器语言,类似于sass对于css的功能,Markdown也可以叫做HTML预处理器,只不过它是一门轻量级的标记语言,可以更简单的实现HTML ...

  10. 好用的Markdown编辑器一览 readme.md 编辑查看

    https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...

随机推荐

  1. Solon 3.0 新特性:SqlUtils

    Solon 3.0 引入了新的 SqlUtils 用于数据库基础操作,SqlUtils 是对 JDBC 较为原始的封装,采用了 Utils API 的风格,极为反普归真. 特性有: 支持事务管理 支持 ...

  2. vue打包后,添加入spring boot下,访问不到字体的BUG

    主要报错:OTS parsing error: incorrect file size in WOFF header OTS parsing error: incorrect entrySelecto ...

  3. 云原生周刊:2024 年 K8s 基准报告 | 2024.4.8

    开源项目推荐 Argo CD Image Updater Argo CD Image Updater 是一个自动更新 Argo CD 管理的 Kubernetes 工作负载容器镜像的工具.简而言之,它 ...

  4. LLM应用实战: OpenAI多代理新作-Swarm

    1.背景 本qiang~关注到OpenAI两周前发布的轻量级多代理框架Swarm,因此想要深入了解了一下,运行了官方提供的例子,整理并总结一些心得体会~ 源码非常简单,各位看官们可以小读一下,本文采用 ...

  5. H5移动端字体自适应(也适用于宽高)

    原文地址: https://mp.weixin.qq.com/s/hhmav2sbAgb7w17ipVZiTw 方法一:纯css方法, 精确度高,IOS 和 安卓 字体大小同等比例1.1 以16px为 ...

  6. TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) 补题记录(A-E)

    AtCoder Beginner Contest 377 A - Rearranging ABC 字符串有ABC三个字母即可. #include<bits/stdc++.h> using ...

  7. 不同团队如何实现登录系统 (just for fun)

    某一天 ceo 需要一个登录系统,找了开发团队 控制狂团队 领导点了卡布奇诺,打开了自己轻薄的 mac book, 点开 word 文档, 开始编写: 1. 项目背景 2. 名词解析 3. 数据表设计 ...

  8. 2024最新免费IP地址SSL证书申请

    为IP地址申请免费的SSL证书相对较为困难,因为多数证书颁发机构(CA)提供的免费SSL证书主要是基于域名的.不过,还是可以尝试以下方法来申请免费的IP地址SSL证书: 一.确认IP地址与了解需求 确 ...

  9. [python] Python异步编程库asyncio使用指北

    Python的asyncio模块提供了基于协程(coroutines)的异步编程(asynchronous programming)模型.作为一种高效的编程范式,异步编程允许多个轻量级任务并发执行,且 ...

  10. 牛客小白月赛105 (Python题解)

    牛客小白月赛105 (Python题解) 比赛链接:点击传送 A-lz的吃饭问题 代码: a, b = map(int,input().split()) c, d = map(int,input(). ...