首页 > 其他分享 >Markdown转Beamer进阶

Markdown转Beamer进阶

时间:2025-01-20 17:32:13浏览次数:1  
标签:Markdown 进阶 pandoc -- PySAGES Beamer mermaid

技术背景

在前面的一篇文章中,我们介绍过Markdown转Beamer的基本方法。通过这个方案,我们可以只写普通的Markdown文档,甚至可以用Github或者Gitee进行保存和协同编辑。然后在本地环境中通过pandoc进行编译构建,最终可以生成一个Beamer风格的pdf文件。这里我们不讨论到底是用PPT写比较好,还是Beamer比较好,抑或者是Markdown,我们只探讨Markdown转Beamer风格pdf文件这一操作可能面临的一些问题。

添加目录页

可以通过修改pandoc编译指令完成,在编译命令中添加:

-s --toc --toc-depth=1

例如:

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

这样就会把几个一级标题自动汇聚成一个目录页。

添加组织信息

在Markdown文件的开头写一个json格式的配置:

---
title: "My Beamer"
author: "Dechin"
institute: My Institute
date: 2025.01.20
---

这样依赖,这几个关键信息在编译后就会显示在首页和每一页的页脚上。

使用mermaid流程图

mermaid是Markdown中常用的一种流程图,可以直接通过文字,来自动生成一个流程图图片。在整个Markdown编译成Beamer的过程中,这一步有可能是最难的环境配置之一(后面还会提到一个算法伪代码的配置)。正常的mermaid安装和配置流程是这样的:

$ apt install nodejs
$ npm install --global mermaid-filter

然后在pandoc编译时加上:

-F /path_to_nodejs/Nodejs/node_global/bin/mermaid-filter

如果出现一个跟sandbox有关的报错,就打开/path_to_nodejs/Nodejs/node_global/bin/mermaid-filter这个文件,找到大约82行左右,有一个fullCmd的定义,在这个定义最后加上一个json配置文件,修改完的fullCmd大概长这样:

var fullCmd = `${cmd}  ${confFileOpts} ${puppeteerOpts} -w ${options.width} -s ${options.scale} -f -i "${tmpfileObj.name}" -t ${options.theme} -b ${options.background} -o "${savePath}" -p /home/tmp/docs/puppeteer-config.json`

这个json配置文件的内容很简单,就写上这么一句:

{
    "args": ["--no-sandbox"]
}

就可以了。然后执行完成的pandoc编译指令进行编译,大概是长这样:

$ pandoc --latex-engine=xelatex -t beamer -o md1.pdf -s --toc --toc-depth=1 -F /path_to_nodejs/Nodejs/node_global/bin/mermaid-filter -V theme=Dresden -V colortheme=seagull -V mainfont='AR PL KaitiM GB' md1.md

这样就可以正确的生成mermaid内容。如果在上述过程中,遇到其他类型的报错信息,大概率是nodejs版本的问题,这个有需要的话再另作介绍。有个问题是上述生成的图片,有可能因为尺寸问题,会导致生成的图片有些模糊。默认的应该是输出png格式的图片,其实这些也是可以修改的。还是在/path_to_nodejs/Nodejs/node_global/bin/mermaid-filter配置文件里面,大约29~30行的位置,有一个图片width和图片format的配置,直接修改这里的format配置就可以输出矢量图了,我建议使用pdf格式的矢量图,因为svg格式的矢量图会有其他问题。修改完内容大概是这样的:

width: process.env.MERMAID_FILTER_WIDTH || 800,
format: process.env.MERMAID_FILTER_FORMAT || 'pdf',

这样输出的mermaid流程图就是清晰的了。以下是一个简单的流程图示例:

## PySAGES Workflow
\center

#```mermaid
sequenceDiagram
    User-->>PySAGES: CV, Method
    User->>PySAGES: pysages.run()
    PySAGES->>Backend: Initialize()
    PySAGES->>Backend: Simulation.run()
    Backend-->>PySAGES: Force
    PySAGES-->>Backend: Bias Force
    PySAGES->>Backend: Stop()
    Backend-->>User: Traj
    User->>PySAGES: pysages.analyse()
#```

生成的效果如下所示:

图片居中

直接在Markdown的图片前配置一个\center即可。

字体大小

类似于图片居中的配置,我们只要在需要配置的字体前加上\small即可切换到small字号的字体,关于其他字号的字体,大概是这样的顺序:

图片内容来自于参考链接1。

算法伪代码

这是程序猿们常用的一个算法表示形式,在Markdown使用pandoc编译的情况下,我们需要单独下载一个名为algorithms的包,下载地址为:https://ctan.org/pkg/algorithms。下载和解压缩完成后,在目录下执行如下指令进行配置:

$ latex algorithms.ins
$ latex algorithms.dtx

运行完成后会在当前路径下生成两个sty文件。我的操作方法是把这两个sty文件拷贝到markdown的*.md文件同级目录下,然后修改pandoc的默认beamer配置文件/usr/share/pandoc/data/templates/default.beamer,添加这么两行内容:

\usepackage{algorithm}
\usepackage{algorithmic}

然后就可以在Markdown里面写伪代码了,如下是一个简单的官方示例:

\begin{algorithmic}[1]
\REQUIRE $n \geq 0$
\ENSURE $y = x^n$
\STATE $y \leftarrow 1$
\STATE $X \leftarrow x$
\STATE $N \leftarrow n$
\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \leftarrow X \times X$
\STATE $N \leftarrow N / 2$
\ELSE[$N$ is odd]
\STATE $y \leftarrow y \times X$
\STATE $N \leftarrow N - 1$
\ENDIF
\ENDWHILE
\end{algorithmic}

编译后生成的效果是这样的:

添加页码

由于默认的这个模板里面不显示页码,所以需要修改一下beamer模板,加入如下配置:

\expandafter\def\expandafter\insertshorttitle\expandafter{%
	\insertshorttitle\hfill%
	\insertframenumber\,/\,\inserttotalframenumber}

添加致谢

在markdown文件的结尾加上:

## 

\center
\Huge
\vspace{1cm}
Thanks for your attention!

如果需要,可以自己配上花体。

总结概要

接上一篇介绍的基本Markdown通过pandoc编译转为Beamer风格文档的文章,本文主要介绍一些Markdown转Beamer其中的进阶用法。如Mermaid流程图,和Algorithms算法伪代码的使用等。

版权声明

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

作者ID:DechinPhy

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

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

参考链接

  1. https://blog.csdn.net/xovee/article/details/127811886

标签:Markdown,进阶,pandoc,--,PySAGES,Beamer,mermaid
From: https://www.cnblogs.com/dechinphy/p/18681750/markdown2beamer

相关文章

  • Python进阶:深入理解import机制与importlib的妙用
    目录一、Pythonimport机制概述1.1import语句的基本用法1.2模块缓存机制1.3导入搜索路径1.4导入钩子和查找器二、importlib的妙用2.1动态模块导入2.2使用importlib实现插件系统2.3重新加载模块三、总结在Python编程的世界里,import语句是开发者最常用的工......
  • Markdown学习
    Markdown学习标题三级标题四级标题字体Hello,world!Hello,world!Hello,world!Hello,world!引用选择狂神说Java,走向人生巅峰分割线图片超链接[点击跳转到我的博客]()列表asdads表格名字性别生日张三男1997.1.1代码......
  • JS宏进阶:正则表达式的使用
    正则表达式,对于任何一门编程语言来说,都是一种非常强大的工具,主要用于搜索、编辑或操作文本和数据。因此,在JS中,也存在相应的对象newRegExp(),在本章中,将详细介绍正则表达式在JS宏中的运用。一、正则表达式的创建在基础篇章中,曾提及正则表达式对象,在JS中有两种创建方法,示例如......
  • 【JavaEE进阶】SpringMVC 响应
    目录......
  • Redis 深度解析:从基础到进阶,全面掌握高效缓存技术
    Redis深度解析:从基础到进阶,全面掌握高效缓存技术引言:Redis作为现代开发中不可或缺的技术之一Redis(RemoteDictionaryServer)作为一种开源的高性能键值数据库,在实际开发中发挥着至关重要的作用。它以其极高的读写性能、丰富的数据结构、持久化机制以及支持多种编程语言的客......
  • Tomcat进阶篇
    目录对应的输出结果一、聊聊ClassLoader的那些事儿1.类加载器的过程2.类加载器的分类3.BootstrapClassLoader4.ExtensionClassLoader5.自定义类加载器6.双亲委派机制Catalina为什么不new出来?1.Web容器的特性2.Tomcat类加载器结构3.Tomcat的类加载器的继承结......
  • Markdown VScode的原文本
    #Markdownvscode教学##一.准备工作1.安装VScode2.下载必要插件  MarkdownAllinOne  MarkdownPreviewEnhanced  MarkdownPDF  Markdownimage3.创建.md文档,打开同步预览,并开始编辑##二.基础语法1.**标题**  #一级标题  #+空格+......
  • Flask Web开发实战:入门、进阶与原理解析PDF免费下载
    适读人群:本书适合了解Python基本语法,想要自己动手做网站的编程人员;熟悉Python。想要从事PythonWeb开发的后端工程师、运维工程师和爬虫工程师;香葱Django等其他PythonWeb框架转向Flask的Python工程师阅读。PythonWeb框架Flask开发团队成员撰写,内容全面,从基础知识到进阶实战,再到......
  • Markdown语法学习
    序:Markdown语法学习此篇继建立好自己的博客之后,为了更好的完成今后的学习和记录,学习markdown语法。学习自狂神说。文本编辑器:typora文件后缀:xxx.mdmarkdown语法的优势:标题,字体样式,链接,列表,表格,图片,代码都整合标题way:一级标题就是#+空格+内容,2-6级标题就是多少个#+空格+内......
  • MarkDown学习
    MarkDown学习标题三级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说java分割线图片超链接点击跳转到百度列表ABCABC表格名字性别生日张三男1997.1.1代码......