使用markdown宏包为LaTeX编辑文本,把markdown语句转化为LaTeX语句(vscode)

博客指出LaTeX排版能力强但编辑文本麻烦,Markdown书写文本方便但排版不够精细。探讨将Markdown导入LaTeX的方法,否定了用pandoc转化的方式,介绍在LaTeX中直接输入Markdown源代码并转化命令的方法,还以VSCode为例说明配置LaTeX Workshop及添加Markdown语句的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

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的效果
生成效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值