VScode如何实时预览LaTeX?

您所在的位置:网站首页 mac随航如何使用 VScode如何实时预览LaTeX?

VScode如何实时预览LaTeX?

2023-03-22 13:34| 来源: 网络整理| 查看: 265

好像感觉我要火了, 这个必须专业回答下啊, 看完别忘了点赞啊!!

用户友好型实时预览的定义

即不用手动编译, 不用手动刷新文档(PDF)的LaTeX写作方式.

实现方式与工具

目前主要用的是Latexmk这个perl脚本或者支持实时预览的Markdown编辑器.

关于TeX集成系统的一个建议

个人建议用TeXLive而非MikTeX甚至CTeX套装, 相比而言我用TeXLive时碰到的问题最少. 后两种你可能发现好好的文档有一天突然不能编译了, 关键是你还啥都没干啊, 而且升级个包也可能出错. 咋办, 事实证明此时最好的方式就是重装TeX系统. 如果你坚持用后两者的话, 个人建议安装安装Basic版的Miktex, 这样在出问题时可以快速安装好/占用空间少/前几次可能需要自动从网络下载宏包.

Texlive建议安装时可以去掉宏包文档与源文件, 这可以节省不少空间(1~2G). 但是建议安装Full的宏包(即各种宏包都装上, 你以后再也不用愁别人的文档你不能编译了).

Texlive也不是完美无暇的. 个人觉得缺点是: 1. 不能自动下载缺失宏包(所以全装最保险), 当然可以手动下载了(tlmgr, tlmgr --gui). 2. 不支持持续更新. 你会发现Texlive每年出一个终极版, Texlive2018是不能直接升级到Texlive2019的, 只能通过重装才行(别担心, 有人用Texlive2000写文章你信吗?). 这种奇葩的升级方式不妨看看这里

Why does TeX Live “require” yearly updates? How do I update my TeX distribution?

下面我总是假设我们的系统是Windows7+Texlive2018(所有宏包已经安装上).

1. Latexmk脚本实现实时预览

利用这种方式, 其实无论你用哪种编辑器都可以实现实时预览. Latexmk可以认为是一个TeX包, 你可能需要安装(检查命令行/CMD: latexmk -v 是否输出版本号), 参考官方安装指南.

悄悄告诉你, 我用的Cmder作为命令行终端模拟器1.1 TeXworks配置实时预览

打开系统自带的TeXworks, 在编辑/首选项/排版面板下, 点击处理工具子面板右下角的+, 新建Latexmk编译器. 参数如图所示

测试自动编译. 我们新建一个TeX文档:

\documentclass{amsart} \usepackage[b5paper]{geometry} \usepackage[UTF8]{ctex} \title{测试自动编译} \author{Van Abel} \date{\today} \begin{document} \maketitle \end{document}

然后选择刚才新建的Latexmk编译器编译, 得到

接下来, 我们要测试TeX文档自动改变时Latexmk会自动编译. 添加一行“这是一个测试”并保存文档(Ctrl+S), 我们发现确实自动编译了, 并且Texworks自动刷新了PDF, 如图所示(理论上搞个动图, 但是太麻烦放弃)

你学会了吗? 会了你应该会配置WinEdt了吧? (我自己没用WinEdt了, 故没写教程).

可能有人说Texworks太弱, 其实也还好, 毕竟支持自动补全(\usep+Tab, \begin{eq+Tab, Ctrl+Tab跳出补全环境), 以及实时预览(Ctrl+'切换源码与PDF).

如果你还不满意, 那么请看下面的强大的Vim+vimtex+SumatraPDF+Latexmk配置实时预览的例子.

1.2 Vim+vimtex+SumatraPDF+Latexmk配置实时预览

预警!!! Vim配置比较复杂, 不建议新手使用!! 但是爱折腾的人肯定喜欢, 用惯了效率较高.

下载安装Vim8.1, 使用Cmder的话可以用下列命名下载并安装(最好不要选择Native Language Support, 否则出错时反而看不懂)curl -O https://ftp.nluug.nl/pub/vim/pc/gvim81.exe gvim81.exe下载安装SumatraPDF, 并设置环境路径使得vimtex以找到SumatraPDF.exe, 设置方法见附录1.安装git-for-windows, 别忘了勾选添加git到环境变量安装Vim的插件管理插件 vim-plug, 使用Cmder可以用官方安装命令安装curl -fLo ~/vimfiles/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim配置vimrc, 可以参考附录2的配置测试实时预览vimtex实现实时预览https://www.zhihu.com/video/1097484063383891968

好像我没有演示自动补全. 这个是需要下载tex.snippet以及texmath.snippet的, 并将其放到~\vimfiles\myvim\UltiSnips目录里面. 然后你可以试试新起一行输入:b+Tab, 更多补全自己看看这两个snippet的内容即可.

这里有个使用Vimtex+Ultisnip排版的效果, 理论上可以和老师板书的速度一致. 参考

https://castel.dev/post/lecture-notes-1/ https://zhuanlan.zhihu.com/p/60049290 2. 其他编辑器

除了上面说的latexmk, 目前还有一些支持实时预览的在线/离线编辑器. 我将他们归结到markdown编辑器. 理由是他们都支持markdown语法. 拿来用tex写点小东西也是非常方便的.

2.1 在线编辑器.

最容易上手的Stackedit.io, 目前的版本是用的Katex来渲染熟悉公式, 好处是反应快, 基本感觉不到延迟. 但是支持的数学公式命令还不够多. cases/equation等都只能用aligned来替换. 比较早期的版本(新版右下角有链接), 使用的是mathjax脚本渲染数学. 优缺点和Katex正好反过来了.

2.2 vim插件.

Github上有个iamcco/markdown-preview.nvim, 也是支持markdown+Katex的. 不过可能需要Nodejs, 作者预编译版本目前还有点问题. 好处是可以使用Vim编辑以及Ultsnip的自动补全.

3. 附录3.1 添加SumatraPDF.exe到系统路径

Windows7的话, 在计算机上右键/属性/高级系统设置/环境变量/在系统变量中新建一个变量, 变量值就是你存放SumatraPDF.exe的目录. 如图

然后再在系统变量中找到path变量, 在变量值最后添加

;%sumatrapdf%

即可.

3.2 一个vimrc 配置

使用前请创建如下目录, Cmder命令如下:

mkdir -p ~\vimfiles\myvim cd ~\vimfiles\myvim mkdir vimtemp UltiSnips plugged sessions

然后使用gvim编辑~\vimfiles\vimrc, 将如下内容复制粘贴到vimrc中. 编辑vimrc可以在gvim中输入

:e ~\vimfiles\vimrc

保存(:w)后, 执行

:so %

在执行

:PlugInstall

即可安装vimtex等插件.

UPDATE20190410修复正向(TeX->PDF)反向(PDF->TeX)搜索, 亲测对多文件也行.增加几个常用快捷键(normal模式):;r reload vimtex;m display math short key;c compile tex;e toggle error;t show table of topicnw next windowUPDATE20190411使用ultisnip需要安装python.

安装方法如下:

在你下载的vim中输入:version, 查看当前编译的是32位还是64位版本, 例如我给的链接下载的vim8.1的话显示: MS-Windows 32-bit GUI version表示32位版本. 然后往下翻, 找到Compilation的链接库, 显示-DDYNAMIC_PYTHON_DLL="\python2.7.dll"表示你安装python2.7就可以了. 综合起来就是下载32位的python 2.7安装即可. 可能需要像设置sumatraPDF一样设置下环境变量. Cmder输入where python即可找到python路径.

可以通过:echo has('python')查看你的vim版本是否支持python;

可以通过:py print(2+3)来看你的vim是否可以找到python.

2. 使用我的配置的话, 由于我修改了airline的默认符号, 需要下载对应的powerline字体, 双击安装即可.

申明: 尽管我努力保证如下的vimrc能够正常使用, 但是还是可能有一些没有考虑到的问题. 再次警告: 配置vim比较复杂, 对伸手党不够友好. 我想你都准备用vim了, 就要有爱折腾的心理准备. Anyway, 若有问题欢迎交流反馈.

" vim: fdm=marker fdl=0 fdls=0 " General settings {{{ " Not for vi {{{ set nocp " }}} " Line number {{{ set nu " }}} " Auto change to the current directory {{{ set acd " }}} " Auto complete of vim command-line {{{ set wmnu set wildmode=longest,list,full " }}} " Increase search {{{ set incsearch " }}} " Show position of cursor at status line {{{ set ruler " }}} " Syntex highlighting {{{ syntax on " }}} " Autochdir {{{ au BufEnter * silent! lcd %:p:h " }}} " Allow backspace in insert mode {{{ set backspace=2 " }}} " No beep {{{ set vb " }}} " Shorter spaces {{{ set shiftwidth=2 tabstop=2 " }}} " Auto indent {{{ if has('autocmd') filetype plugin indent on endif " }}} " Copy indent {{{ set autoindent " }}} " Smart indent {{{ set smartindent " }}} " Smart table {{{ set smarttab " }}} " Use space for tab {{{ set expandtab " }}} " Set wrap, list disables line break {{{ set wrap lbr tw=0 wm=0 nolist " }}} " Remove menu/tool bar {{{ set go=ae " }}} " Share clipboard {{{ set clipboard=unnamed " }}} " }}} " Encodings {{{ " Encoding for file {{{ set fenc=utf-8 " }}} " Encoding for file's content {{{ " If you want gvim under windws prompt " callback of shell command correctly " you need the following settings: " set enc=chinese set enc=utf-8 scriptencoding utf-8 " }}} " Encoding for term {{{ set termencoding=utf-8 " }}} " Supported encoding {{{ set fencs=usc-bom, \utf-8, \chinese, \cp936, \gb18030, \big5, \euc-jp, \euc-kr, \latin1 " }}} " Supported filefomart {{{ " auto detect mac,unix,dos set ffs=mac,unix,dos " }}} " Vim message encoding {{{ language messages zh_CN.utf-8 " }}} " }}} " User functions {{{ " Toggle Verbose mode {{{ function! ToggleVerbose() if !&verbose set verbosefile=~/desktop/vimtex.log set verbose=15 else set verbose=0 set verbosefile= endif endfunction " }}} " TeX live preiview {{{ fu! TexLivePreview() if filewritable( bufname( '%' ) ) silent update % endif endfu au CursorHoldI,CursorHold *.tex call TexLivePreview() " }}} " }}} " User variables {{{ let $USRVIMD =$HOME.'\vimfiles\myvim\' let $USRPLUGD=$USRVIMD.'plugged\' let $USRTEMPD=$USRVIMD.'vimtemp\' let $LASTWKDR=$USRVIMD.'sessions\' " }}} " Plugins {{{ call plug#begin( $USRPLUGD ) " for latex Plug 'lervag/vimtex' " for powerline Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " for soloarlized Plug 'altercation/vim-colors-solarized' " for snip Plug 'Sirver/ultisnips' call plug#end() " }}} " Plugin configuration {{{ " Vimtex {{{ if isdirectory( $USRPLUGD . 'vimtex' ) let g:tex_flavor = "latex" let g:vimtex_quickfix_open_on_warning = 0 let g:vimtex_quickfix_mode = 2 let g:vimtex_view_general_viewer='sumatrapdf' let g:vimtex_compiler_latexrun_engines = { \ '-' : 'xelatex' \} let g:vimtex_view_general_options_latexmk = '-reuse-instance' let g:vimtex_view_general_options \ = '-reuse-instance -forward-search @tex @line @pdf' \ . ' -inverse-search "gvim --servername ' . v:servername \ . ' --remote-send \"^^' \ . ':drop \%f^:\%l^:normal\! zzzv^' \ . ':execute ''drop '' . fnameescape(''\%f'')^' \ . ':\%l^:normal\! zzzv^' \ . ':call remote_foreground('''.v:servername.''')^^\""' endif " }}} " Airline configuration {{{ if isdirectory( $USRPLUGD . 'vim-airline' ) let g:airline_powerline_fonts = 1 let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#whitespace#enabled = 1 "let g:airline_theme='powerlineish' "let g:Powerline_symbols= 'fancy' " if !exists('g:airline_symbols') let g:airline_symbols = {} endif " unicode symbols let g:airline_symbols.crypt = '' let g:airline_symbols.linenr = '¶' let g:airline_symbols.maxlinenr = '' let g:airline_symbols.branch = '' let g:airline_symbols.paste = 'Þ' let g:airline_symbols.readonly = '' let g:airline_symbols.spell = 'SPELL' let g:airline_symbols.notexists = '∄' let g:airline_symbols.whitespace = 'Ξ' " the font set guifont=DejaVu_Sans_Mono_for_Powerline:h16:cANSI:qDRAFT endif " }}} " Solarized {{{ if isdirectory( $USRPLUGD . 'vim-colors-solarized' ) let g:solarized_termcolors=256 let g:solarized_termtrans=1 set t_Co=256 syntax enable if has('gui_running') set bg=light else set bg=dark endif colo solarized endif " }}} " Ultisnips {{{ if isdirectory( $USRPLUGD . 'ultisnips' ) " Add ultisnips plugin dir to path set rtp -=$USRPLUGD.'ultisnips' " Add snippets dir to rtp if isdirectory( $USRVIMD ) set rtp +=$USRVIMD endif " Set snippet search dir if isdirectory( $USRVIMD ) let g:UltiSnipsSnippetsDir = $USRVIMD. 'UltiSnips' "Disable build-in i_CTRL-X_CTRL-K inoremap endif endif " }}} " }}} " User keymaps {{{ " copy to clipboard vnoremap ;x "*y " past from clipboard vnoremap ;p "*p " show math short key nnoremap ;m :VimtexImapsList " reload vimtex nnoremap ;r :VimtexReload " clean call of vimtex nnoremap ;n :VimtexClean " execute call of vimtex nnoremap ;c :VimtexCompile " preview nnoremap ;v :VimtexView " toggle of errors nnoremap ;e :VimtexErrors " toggle table of topic nnoremap ;t :VimtexTocToggle " next window nnoremap nw " }}} " Auto cmd {{{ "Automatical source vimrc on write au! BufWritePost $MYVIMRC source $MYVIMRC "Auto change markdown file to tex fileformat au! BufEnter *.md set ft=tex " Go to last file(s) if invoked without arguments. set ssop-=options set ssop-=terminal set ssop-=help set ssop+=winpos set ssop+=resize autocmd VimLeave * nested if (!isdirectory($LASTWKDR)) | \ call mkdir($LASTWKDR) | \ endif | \ execute "mksession! " . $LASTWKDR . "Session.vim" autocmd VimEnter * nested if argc() == 0 && filereadable($LASTWKDR . "Session.vim") | \ execute "source " . $LASTWKDR. "Session.vim" " }}}

最后, 感谢你看到这里. 离开之前, 别忘了点赞哦~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3