问题
LaTeX有非常强大的排版能力,但是如果用它编辑文本内容时却比较麻烦。
markdown用于书写文本比较方便,可以迅速地做一些简单的排版(比如目录、分级标题、标注、代码块等),还支持LaTeX中的数学公式的使用,但是不能直接进一步进行更加精细的排版
能不能把已经写好的markdown直接导入到latex中?
markdown虽然使用LaTeX中的数学公式,但是在某些排版和公式的调用上使用的命令是不同的,如果将markdown的代码直接复制到tex文件中是不能编译的,所以需要经过转化
可能的方法:
- 将markdown文件转化为tex文件
使用pandoc将markdown文件直接转化为tex文件,可以在pandoc的template文件夹中添加模板,可以指定生成tex文件的样式
这种方法可以直接给markdown文件添加一个格式,直接生成一个tex文件,但是取决于使用的模板是否合适,生成出来的tex文件五花八门,通常会有很多格式上的冲突,而且文件中的代码乱七八糟,修改起来还比较麻烦
所以这里介绍另一种方法
- 在LaTeX中直接输入markdown源代码,编译时将md命令转化为相应的LaTeX命令
使用LaTeX中的markdown
宏包
使用
这里以vscode为例
配置LaTeX Workshop
在vscode扩展商店中搜索LaTeX Workshop,安装
这里需要修改一下配置文件,在编译过程中添加--shell-escape
标记才能使用markdown
宏包
打开vscode的配置文件settings.json
- 如果你已经配置过了LaTeX Workshop,则需要在tools和recipes中添加一种或几种编译命令(在原代码基础上改动)
{
"latex-workshop.latex.tools": [ //找到
{
"name": "xelatex-shell-escape",//可以随便改,但必须与下方recipes中的tools一致
"command": "xelatex",//这里是编译的方式,可以根据使用修改,有xelate、pdflatex、latexmk、bibtex等不同的编译方式
"args": [
"--shell-escape",//这里就是添加的标记,
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
//这里是添加进去的,最好不要改动原来的配置
//...
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex-shell-escape-recipe",
"tools": [
"xelatex-shell-escape"//要与上面一致
]
},
//...
],
}
- 如果你还没有配置过LaTeX Workshop,就把下面的代码复制到settings.json 中即可
编译时选择 xelatex-shell-escape-recipe 进行编译,如果需要除xelatex之外的编译方式,模仿添加
{
"latex-workshop.latex.tools": [
{
"name": "xelatex-shell-escape",
"command": "xelatex",
"args": [
"--shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex-shell-escape-recipe",
"tools": [
"xelatex-shell-escape"
]
},
{
"name": "xelatex",
"tools": [
"xelatex"
],
},
{
"name": "pdflatex",
"tools": [
"pdflatex"
]
},
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "pdf->bib->pdf->pdf",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}
],
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.bbl",
"*.blg",
"*.idx",
"*.ind",
"*.lof",
"*.lot",
"*.out",
"*.toc",
"*.acn",
"*.acr",
"*.alg",
"*.glg",
"*.glo",
"*.gls",
"*.ist",
"*.fls",
"*.log",
"*.fdb_latexmk"
],
//tex文件浏览器,可选项为"none" "browser" "tab" "external"
"latex-workshop.view.pdf.viewer": "tab",
//自动编译tex文件
"latex-workshop.latex.autoBuild.run": "onFileChange",
//显示内容菜单:(1)编译文件;(2)定位游标
"latex-workshop.showContextMenu": true,
//显示错误
"latex-workshop.message.error.show": false,
//显示警告
"latex-workshop.message.warning.show": false,
//从使用的包中自动补全命令和环境
"latex-workshop.intellisense.package.enabled": true,
//设置为never,为不清除辅助文件
"latex-workshop.latex.autoClean.run": "never",
//设置vscode编译tex文档时的默认编译链
"latex-workshop.latex.recipe.default": "lastUsed",
// 用于反向同步的内部查看器的键绑定。ctrl/cmd +点击(默认)或双击
"latex-workshop.view.pdf.internal.synctex.keybinding": "double-click",
}
在tex中添加markdown语句
设置markdown宏包
使用 \markdownSetup{...}
来进行设置
\usepackage{markdown}
\markdownSetup{smartEllipses = true}
%开启后可以把markdown中的...转化为省略号
\markdownSetup{hashEnumerators = true}
%有序列表增强,开启后可以采用多种形式书写有序列表
\markdownSetup{inlineFootnotes = true}
%开启后可以添加markdown的超链接和尾注
\markdownSetup{fencedCode = true}
%开启后可以转化markdown的代码块
\markdownSetup{pipeTables = true}
%开启后可以转化markdown的插图和表格
在LaTeX中书写markdown
具体原理和扩展做法可以参照下面这位大佬
以 Markdown 撰写文稿,以 LaTeX 排版
下面仅给出实例
\documentclass[UTF8]{ctexart}
\usepackage{markdown}
\markdownSetup{smartEllipses = true}
\markdownSetup{hashEnumerators = true}
\markdownSetup{inlineFootnotes = true}
\markdownSetup{fencedCode = true}
\markdownSetup{pipeTables = true}
\begin{document}
\begin{markdown}%这里开始书写markdown
# LaTeX 中的markdown书写
## 二级标题
### 三级标题
#### 四级标题
输入一段文本
### 三级标题(可以自动编号)
## 二级标题(可以自动编号)
### 三级标题
代码块测试
```cpp
#include<iostream>
using namespace std
int main(){
cout<<"Hello World!"<<endl;
return 0
}```
表格测试
| 序号 | 姓名 |
|-----|-----|
| 1 | 说的道理 |
| 2 | 奥利安费 |
| 3 | 哈姆 |
脚注测试1^[这里是脚注1]
脚注测试2^[这里是脚注2]
列表测试
* 1
* 2
* 3
------
1. 理塘DJ
2. 珍珠
3. 测码
------
#. 传统香烟
#. 电子烟
\end{markdown}%这里结束书写markdown
\end{document}
下面是生成的pdf的效果