vim-latex编辑多合一文件时的一键编译

在使用vimnvim编译latex文件时,对于单个源文件,自然使用vim-latex插件足够应对,但是对于一个多合一文件,比如说一本书,这里会有一个主文件,然后各个章节分开来写,但是每次写一部分后都要切换到主文件编译,然后再回到当前章节文件编辑,这显然是十分低效率的。于是研究使用一键编译,在多合一文件时能够直接编译主文件,设计思路是:

  1. 建立一个文件夹,. 例如:特殊函数/特殊函数.tex

  2. 绑定'F10'映射到编译命令,使用shell命令截取文件夹的名称,也就获得了主文件的名称,进而直接编译就可以了,文件夹内的其他子文件就不用再管了。

  3. 映射设置,位于'~/.config/nvim/lua/plg/vim-latex.lua`中,相关部分设置为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    --绑定快捷键
    vim.api.nvim_create_autocmd("FileType",{
    pattern = "tex",
    callback = function()
    -- 配置F4打开模板
    vim.api.nvim_set_keymap("n", "<F4>", ":TTemplate<CR>", {noremap = true, silent = true})
    -- 配置pdflatex编译,原vim-latex中使用\ll 默认 xelatex 编译
    vim.api.nvim_set_keymap("n", "<F6>", [[<cmd>!pdflatex % <CR>]], {noremap = true, silent = true})
    -- 配置F8编译 aux辅助文件,直接根据数据库生成文献引用, 注意使用%:t:r 截取文件名
    vim.api.nvim_set_keymap("n", "<F8>", [[<cmd>!bibtex %:t:r.aux <CR>]], {noremap = true, silent = true})
    -- 配置F10编译多合一文件时,以当前目录名为主文件,以节省时间
    vim.api.nvim_set_keymap("n", "<F10>", [[<cmd>!xelatex $(echo $PWD|awk -F"/" '{print $NF}').tex <CR>]], {noremap = true, silent = true})
    end
    })

  4. 多合一文件的结构参考

    特殊函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    \documentclass[a4paper,fontset = windows]{ctexbook}
    \usepackage{xeCJKfntef}
    \usepackage[svgnames]{xcolor}
    \usepackage[margin=2cm]{geometry}
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    \usepackage{float}
    \usepackage{amsfonts}
    \usepackage{amssymb}
    \usepackage{mathtools}
    \usepackage{amsthm}
    \usepackage{amsmath}
    \usepackage{physics}
    \usepackage{multicol}
    \usepackage{lineno}
    %\usepackage{mathpazo}
    \usepackage[
    pdfborder=0 0 0,
    bookmarksnumbered=true
    ]{hyperref}
    \usepackage[user=teacher]{cexam}
    \usepackage{colornote}
    \usepackage[fontwarning=off]{ctrlwarning}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.18}
    %\usepackage{doc}
    %\usepackage{draftwatermark}
    %\SetWatermarkText{冯振华}
    \includeonly{
    Gamma函数,
    Reimannζ函数,
    常系数线性微分方程,
    特殊函数的微分解法,
    积分变换,
    特殊函数的积分解法,
    Whittaker,
    椭圆函数,
    不等式高级水平必备,
    线性代数,
    张量分析,
    附录,
    }
    \begin{document}
    %\title{\Huge 特殊函数新解}
    %\author{ 冯振华}
    %\date{2020年12月3日}
    %\maketitle
    \input{coverpage}
    \tableofcontents
    \include{Gamma函数}
    \include{Reimannζ函数}
    \include{常系数线性微分方程}
    \include{特殊函数的微分解法}
    \include{积分变换}
    \include{特殊函数的积分解法}
    \include{Whittaker}
    \include{椭圆函数}
    \include{不等式高级水平必备}
    \include{线性代数}
    \include{张量分析}
    \include{附录}
    \end{document}

注意:在绑定到F10的编译命令中,本来应当借助于vimscript的内置变量,但是%:h返回值是当前目录的缩写., 而我需要的是和主文件同名的文件夹名,同时也没有使用shell截取字符串的方法,因为##%都被vimscript解析成它的命令用来替换,所以直接使用了awk来截截取文件夹名,从而也获得了主文件的名称。同时注意,由于使用了主文件/主文件.tex的命名方式,在多文件latex的编辑过程中,应当遵守这个规定命名。同时键位F9已经分配给了nabla插件,用来显示公式,所以此处多合一编辑分配了最后一个键位F10