前言

大家有没有想过,教科书上的公式是怎么写出来并排版的如此美观的呢?如何能在文档中绘制出美观而精确的科研绘图?想必绝大多数同学都只知道MS Office,但是这太Low了,而且排版格式经手多人会变得千奇百怪。科研人就要有科研人的个性,不仅要严谨,还要有科研人的专属工具,展现出科研人高大上的一面!

R + Markdown = RMarkdown

Markdown大家都知道,但凡入门了计算机的玩家都靠这个来写博客,记录知识和见闻,但知道Rmarkdown的玩家就不多了,毕竟R语言受众相对C,Java,Python而言还是太少。但身为科研工作者不能不知道它,因为R是开源的,主要用于统计分析、绘图以及数据挖掘的强大编程语言。你可能会说“我都有Python了,用个Jupyter不一样的吗? ”,但Jupyter这种人尽皆知的工具无法体现出您的与众不同,尽管Jupyter现在也能在Python3.10+的环境中结合Jupyter-Tikz来实现相同的效果,但科研人还是要多学学新工具。

Rmarkdown的使用需要基于R+Rstudio,R和Rstudio直接去官网下载就行了,独立安装即可。需要注意的是,如果你想在conda环境里安装Rstudio,抱歉,目前4.0的还不支持。

Latex + Tikz + GeoGebra

Latex对于经常使用Python的玩家而言,应该都知道,目前使用最多的两个版本分别是MikTex和Texlive。个人推荐MikTex,因为精简一些安装会快一点,如果想安装新的包直接在MikTex Console里打就行,至于Texlive,没一两个小时别想安装好,当然你也可以取消勾选很多不安装。

Latex的基本语法可以直接在网上搜,一搜一大把,我这里就不赘述了,这里主要讲讲如何在Latex里用Tikz绘图。

Tikz官方的Manual在这里,里面从最基础的tutorial到进阶版绘图指令全都有。此外,这里是一些Tikz的模板,用的好甚至能画一只Totoro在你的PDF里。

重点来了,Tikz似乎需要一定的学习成本,我本来也只想画一些简单的示意图,如何能快速得到所见即所得的结果呢?

这就必须要引进另一个神器——GeoGebra了。

  1. 首先,去官网下载GeoGebra v5,切记是v5(往下拉,找到Classic 5),因为这个版本才支持PGF/Tikz代码导出。

    GeoGebra5
  2. 先随便画一个图形,就用sinc(x)\text{sinc}(x)好了,画出来如图:

    sinc
  3. 右键弹出选项框,取消显示坐标轴、网格、标签,并右键框选需要导出的绘图区域:

    sinc_export
  4. 文件\rightarrow导出\rightarrowPGF/Tikz代码,生成PGF/Tikz代码,复制:

    sinc_export_code

    可以根据需要修改图片的大小,修改X和Y的单位,可以控制图片在PDF中的显示大小,同样也可以在Rmarkdown的代码块选项中,设置out.width/out.height来控制图片大小。

  5. 将代码复制进Rmarkdown的Chunk中,根据需要设置:

    1
    2
    3
    ```{tikz, echo=FALSE, out.width="40", fig.align="center"}
    # 你的tikz代码
    ```

    如果需要调包,需要将包的声明\usepackage{xxx}丢到前面的header-includes里。此外,Rmarkdown的Chunk里要删除\documentclass{xx}\begin{document}和其对应的结束标签。

  6. Knit生成的PDF文件如下:

    pdf_output