我正在使用 Vim + LaTeX-Suite 插件编写 LaTeX 源文件。我注意到 LaTeX-Suite 会自动将 中的字符变为斜体\textit
。
有没有办法\emph
也可以启用这种行为?
答案1
请注意,与 不同\textit
,\emph
充当表示强调的开关。因此,在常规文本中使用时,\emph
默认情况下定义为斜体,但在已强调的文本中\emph
切换回直立。因此,在编辑器中突出显示为斜体在语义上并不完全正确\emph
。
但是,这可以毫不费力地完成。高亮来自 Vim 本身,而不是 Latex-Suite。语法高亮定义存储在类似于的目录中/usr/share/vim/vim80/syntax
(具体位置可能因您的安装方法和版本而异)。在文件中tex.vim
定义了 LaTeX 的高亮。Vim 可以从放置在 中的文件中读取其他高亮定义。因此,您可以从原始文件~/.vim/after/syntax
中复制 的相关定义,替换并将其保存为目录中的附加文件。\textit
tex.vim
\emph
/after/syntax
在以下文件中,前两个块从原始文件中复制而来,tex.vim
用于定义变量tex_fast
和tex_conceal
,第三个块包含 的实际定义\emph
。请注意,我没有实现粗体+强调的组合。
~/.vim/after/syntax/tex.vim
:
" by default, enable all region-based highlighting
let s:tex_fast= "bcmMprsSvV"
if exists("g:tex_fast")
if type(g:tex_fast) != 1
" g:tex_fast exists and is not a string, so
" turn off all optional region-based highighting
let s:tex_fast= ""
else
let s:tex_fast= g:tex_fast
endif
endif
" let user determine which classes of concealment will be supported
" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
if !exists("g:tex_conceal")
let s:tex_conceal= 'abdmgsS'
else
let s:tex_conceal= g:tex_conceal
endif
" particular support for emph {{{1
if s:tex_fast =~# 'b'
if s:tex_conceal =~# 'b'
if !exists("g:tex_nospell") || !g:tex_nospell
syn region texItalStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
else
syn region texItalStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
endif
endif
endif
Vim 的截图: