1" Vim syntax file 2" Language: TeX 3" Maintainer: Charles E. Campbell <[email protected]> 4" Last Change: Mar 30, 2018 5" Version: 109 6" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX 7" 8" Notes: {{{1 9" 10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries, 11" use %stopzone. 12" 13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped 14" by suitable use of %stopzone. 15" 16" 3. If you have a slow computer, you may wish to modify 17" 18" syn sync maxlines=200 19" syn sync minlines=50 20" 21" to values that are more to your liking. 22" 23" 4. There is no match-syncing for $...$ and $$...$$; hence large 24" equation blocks constructed that way may exhibit syncing problems. 25" (there's no difference between begin/end patterns) 26" 27" 5. If you have the variable "g:tex_no_error" defined then none of the 28" lexical error-checking will be done. 29" 30" ie. let g:tex_no_error=1 31" 32" 6. Please see :help latex-syntax for information on 33" syntax folding :help tex-folding 34" spell checking :help tex-nospell 35" commands and mathzones :help tex-runon 36" new command highlighting :help tex-morecommands 37" error highlighting :help tex-error 38" new math groups :help tex-math 39" new styles :help tex-style 40" using conceal mode :help tex-conceal 41 42" Version Clears: {{{1 43" quit when a syntax file was already loaded 44if exists("b:current_syntax") 45 finish 46endif 47let s:keepcpo= &cpo 48set cpo&vim 49scriptencoding utf-8 50 51" by default, enable all region-based highlighting 52let s:tex_fast= "bcmMprsSvV" 53if exists("g:tex_fast") 54 if type(g:tex_fast) != 1 55 " g:tex_fast exists and is not a string, so 56 " turn off all optional region-based highighting 57 let s:tex_fast= "" 58 else 59 let s:tex_fast= g:tex_fast 60 endif 61endif 62 63" let user determine which classes of concealment will be supported 64" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts 65if !exists("g:tex_conceal") 66 let s:tex_conceal= 'abdmgsS' 67else 68 let s:tex_conceal= g:tex_conceal 69endif 70if !exists("g:tex_superscripts") 71 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]' 72else 73 let s:tex_superscripts= g:tex_superscripts 74endif 75if !exists("g:tex_subscripts") 76 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]' 77else 78 let s:tex_subscripts= g:tex_subscripts 79endif 80 81" Determine whether or not to use "*.sty" mode {{{1 82" The user may override the normal determination by setting 83" g:tex_stylish to 1 (for "*.sty" mode) 84" or to 0 else (normal "*.tex" mode) 85" or on a buffer-by-buffer basis with b:tex_stylish 86let s:extfname=expand("%:e") 87if exists("g:tex_stylish") 88 let b:tex_stylish= g:tex_stylish 89elseif !exists("b:tex_stylish") 90 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx" 91 let b:tex_stylish= 1 92 else 93 let b:tex_stylish= 0 94 endif 95endif 96 97" handle folding {{{1 98if !exists("g:tex_fold_enabled") 99 let s:tex_fold_enabled= 0 100elseif g:tex_fold_enabled && !has("folding") 101 let s:tex_fold_enabled= 0 102 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support" 103else 104 let s:tex_fold_enabled= 1 105endif 106if s:tex_fold_enabled && &fdm == "manual" 107 setl fdm=syntax 108endif 109if s:tex_fold_enabled && has("folding") 110 com! -nargs=* TexFold <args> fold 111else 112 com! -nargs=* TexFold <args> 113endif 114 115" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1 116" but _ is the only one that causes problems. 117" One may override this iskeyword setting by providing 118" g:tex_isk 119if exists("g:tex_isk") 120 if b:tex_stylish && g:tex_isk !~ '@' 121 let b:tex_isk= '@,'.g:tex_isk 122 else 123 let b:tex_isk= g:tex_isk 124 endif 125elseif b:tex_stylish 126 let b:tex_isk="@,48-57,a-z,A-Z,192-255" 127else 128 let b:tex_isk="48-57,a-z,A-Z,192-255" 129endif 130if v:version > 704 || (v:version == 704 && has("patch-7.4.1142")) 131 exe "syn iskeyword ".b:tex_isk 132else 133 exe "setl isk=".b:tex_isk 134endif 135if exists("g:tex_no_error") && g:tex_no_error 136 let s:tex_no_error= 1 137else 138 let s:tex_no_error= 0 139endif 140if exists("g:tex_comment_nospell") && g:tex_comment_nospell 141 let s:tex_comment_nospell= 1 142else 143 let s:tex_comment_nospell= 0 144endif 145if exists("g:tex_nospell") && g:tex_nospell 146 let s:tex_nospell = 1 147else 148 let s:tex_nospell = 0 149endif 150 151" Clusters: {{{1 152" -------- 153syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones 154if !s:tex_no_error 155 syn cluster texCmdGroup add=texMathError 156endif 157syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement 158syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell 159syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell 160syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell 161if !s:tex_nospell 162 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell 163 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell 164 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher 165else 166 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption 167 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption 168 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher 169endif 170syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ 171syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter 172if !exists("g:tex_no_math") 173 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ 174 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ 175 syn cluster texMatchGroup add=@texMathZones 176 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2 177 syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone 178 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle 179 if !s:tex_no_error 180 syn cluster texMathMatchGroup add=texMathError 181 syn cluster texMathZoneGroup add=texMathError 182 endif 183 syn cluster texMathZoneGroup add=@NoSpell 184 " following used in the \part \chapter \section \subsection \subsubsection 185 " \paragraph \subparagraph \author \title highlighting 186 syn cluster texDocGroup contains=texPartZone,@texPartGroup 187 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone 188 syn cluster texChapterGroup contains=texSectionZone,texParaZone 189 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone 190 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone 191 syn cluster texSubSubSectionGroup contains=texParaZone 192 syn cluster texParaGroup contains=texSubParaZone 193 if has("conceal") && &enc == 'utf-8' 194 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol 195 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol 196 endif 197endif 198 199" Try to flag {} and () mismatches: {{{1 200if s:tex_fast =~# 'm' 201 if !s:tex_no_error 202 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError 203 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell 204 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError 205 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell 206 else 207 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup 208 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup 209 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup 210 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup 211 endif 212 if !s:tex_nospell 213 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell 214 else 215 syn region texParen start="(" end=")" transparent contains=@texMatchGroup 216 endif 217endif 218if !s:tex_no_error 219 syn match texError "[}\])]" 220endif 221if s:tex_fast =~# 'M' 222 if !exists("g:tex_no_math") 223 if !s:tex_no_error 224 syn match texMathError "}" contained 225 endif 226 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup 227 endif 228endif 229 230" TeX/LaTeX keywords: {{{1 231" Instead of trying to be All Knowing, I just match \..alphameric.. 232" Note that *.tex files may not have "@" in their \commands 233if exists("g:tex_tex") || b:tex_stylish 234 syn match texStatement "\\[a-zA-Z@]\+" 235else 236 syn match texStatement "\\\a\+" 237 if !s:tex_no_error 238 syn match texError "\\\a*@[a-zA-Z@]*" 239 endif 240endif 241 242" TeX/LaTeX delimiters: {{{1 243syn match texDelimiter "&" 244syn match texDelimiter "\\\\" 245 246" Tex/Latex Options: {{{1 247syn match texOption "[^\\]\zs#\d\+\|^#\d\+" 248 249" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 250if b:tex_stylish 251 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 252 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 253else 254 syn match texAccent "\\[bcdvuH]\A"me=e-1 255 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1 256endif 257syn match texAccent "\\[bcdvuH]$" 258syn match texAccent +\\[=^.\~"`']+ 259syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+ 260syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$" 261 262 263" \begin{}/\end{} section markers: {{{1 264syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName 265if s:tex_fast =~# 'm' 266 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment 267 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell 268endif 269 270" \documentclass, \documentstyle, \usepackage: {{{1 271syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs 272if s:tex_fast =~# 'm' 273 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell 274endif 275 276" Preamble syntax-based folding support: {{{1 277if s:tex_fold_enabled && has("folding") 278 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup 279endif 280 281" TeX input: {{{1 282syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement 283syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt 284syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt 285syn match texInputCurlies "[{}]" contained 286if s:tex_fast =~# 'm' 287 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment 288endif 289 290" Type Styles (LaTeX 2.09): {{{1 291syn match texTypeStyle "\\rm\>" 292syn match texTypeStyle "\\em\>" 293syn match texTypeStyle "\\bf\>" 294syn match texTypeStyle "\\it\>" 295syn match texTypeStyle "\\sl\>" 296syn match texTypeStyle "\\sf\>" 297syn match texTypeStyle "\\sc\>" 298syn match texTypeStyle "\\tt\>" 299 300" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 301if s:tex_conceal !~# 'b' 302 syn match texTypeStyle "\\textbf\>" 303 syn match texTypeStyle "\\textit\>" 304endif 305syn match texTypeStyle "\\textmd\>" 306syn match texTypeStyle "\\textrm\>" 307syn match texTypeStyle "\\textsc\>" 308syn match texTypeStyle "\\textsf\>" 309syn match texTypeStyle "\\textsl\>" 310syn match texTypeStyle "\\texttt\>" 311syn match texTypeStyle "\\textup\>" 312syn match texTypeStyle "\\emph\>" 313 314syn match texTypeStyle "\\mathbb\>" 315syn match texTypeStyle "\\mathbf\>" 316syn match texTypeStyle "\\mathcal\>" 317syn match texTypeStyle "\\mathfrak\>" 318syn match texTypeStyle "\\mathit\>" 319syn match texTypeStyle "\\mathnormal\>" 320syn match texTypeStyle "\\mathrm\>" 321syn match texTypeStyle "\\mathsf\>" 322syn match texTypeStyle "\\mathtt\>" 323 324syn match texTypeStyle "\\rmfamily\>" 325syn match texTypeStyle "\\sffamily\>" 326syn match texTypeStyle "\\ttfamily\>" 327 328syn match texTypeStyle "\\itshape\>" 329syn match texTypeStyle "\\scshape\>" 330syn match texTypeStyle "\\slshape\>" 331syn match texTypeStyle "\\upshape\>" 332 333syn match texTypeStyle "\\bfseries\>" 334syn match texTypeStyle "\\mdseries\>" 335 336" Some type sizes: {{{1 337syn match texTypeSize "\\tiny\>" 338syn match texTypeSize "\\scriptsize\>" 339syn match texTypeSize "\\footnotesize\>" 340syn match texTypeSize "\\small\>" 341syn match texTypeSize "\\normalsize\>" 342syn match texTypeSize "\\large\>" 343syn match texTypeSize "\\Large\>" 344syn match texTypeSize "\\LARGE\>" 345syn match texTypeSize "\\huge\>" 346syn match texTypeSize "\\Huge\>" 347 348" Spacecodes (TeX'isms): {{{1 349" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x 350syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar 351syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained 352 353" Sections, subsections, etc: {{{1 354if s:tex_fast =~# 'p' 355 if !s:tex_nospell 356 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell 357 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell 358 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell 359 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell 360 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell 361 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell 362 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell 363 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell 364 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell 365 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell 366 else 367 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup 368 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup 369 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup 370 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup 371 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup 372 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup 373 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup 374 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup 375 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup 376 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup 377 endif 378endif 379 380" particular support for bold and italic {{{1 381if s:tex_fast =~# 'b' 382 if s:tex_conceal =~# 'b' 383 if !exists("g:tex_nospell") || !g:tex_nospell 384 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell 385 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell 386 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell 387 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell 388 else 389 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup 390 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup 391 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup 392 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup 393 endif 394 endif 395endif 396 397" Bad Math (mismatched): {{{1 398if !exists("g:tex_no_math") && !s:tex_no_error 399 syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}" 400 syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}" 401 syn match texBadMath "\\[\])]" 402endif 403 404" Math Zones: {{{1 405if !exists("g:tex_no_math") 406 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2 407 " Starred forms are created if starform is true. Starred 408 " forms have syntax group and synchronization groups with a 409 " "S" appended. Handles: cluster, syntax, sync, and highlighting. 410 fun! TexNewMathZone(sfx,mathzone,starform) 411 let grpname = "texMathZone".a:sfx 412 let syncname = "texSyncMathZone".a:sfx 413 if s:tex_fold_enabled 414 let foldcmd= " fold" 415 else 416 let foldcmd= "" 417 endif 418 exe "syn cluster texMathZones add=".grpname 419 if s:tex_fast =~# 'M' 420 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd 421 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 422 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 423 endif 424 exe 'hi def link '.grpname.' texMath' 425 if a:starform 426 let grpname = "texMathZone".a:sfx.'S' 427 let syncname = "texSyncMathZone".a:sfx.'S' 428 exe "syn cluster texMathZones add=".grpname 429 if s:tex_fast =~# 'M' 430 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd 431 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 432 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' 433 endif 434 exe 'hi def link '.grpname.' texMath' 435 endif 436 endfun 437 438 " Standard Math Zones: {{{2 439 call TexNewMathZone("A","displaymath",1) 440 call TexNewMathZone("B","eqnarray",1) 441 call TexNewMathZone("C","equation",1) 442 call TexNewMathZone("D","math",1) 443 444 " Inline Math Zones: {{{2 445 if s:tex_fast =~# 'M' 446 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd' 447 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup 448 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup 449 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup 450 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup 451 else 452 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup 453 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup 454 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup 455 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup 456 endif 457 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup 458 endif 459 460 syn match texMathOper "[_^=]" contained 461 462 " Text Inside Math Zones: {{{2 463 if s:tex_fast =~# 'M' 464 if !exists("g:tex_nospell") || !g:tex_nospell 465 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell 466 else 467 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup 468 endif 469 endif 470 471 " \left..something.. and \right..something.. support: {{{2 472 syn match texMathDelimBad contained "\S" 473 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm' 474 syn match texMathDelim contained "\\left\[" 475 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ 476 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} 477 let s:texMathDelimList=[ 478 \ ['<' , '<'] , 479 \ ['>' , '>'] , 480 \ ['(' , '('] , 481 \ [')' , ')'] , 482 \ ['\[' , '['] , 483 \ [']' , ']'] , 484 \ ['\\{' , '{'] , 485 \ ['\\}' , '}'] , 486 \ ['|' , '|'] , 487 \ ['\\|' , '‖'] , 488 \ ['\\backslash' , '\'] , 489 \ ['\\downarrow' , '↓'] , 490 \ ['\\Downarrow' , '⇓'] , 491 \ ['\\lbrace' , '['] , 492 \ ['\\lceil' , '⌈'] , 493 \ ['\\lfloor' , '⌊'] , 494 \ ['\\lgroup' , '⌊'] , 495 \ ['\\lmoustache' , '⎛'] , 496 \ ['\\rbrace' , ']'] , 497 \ ['\\rceil' , '⌉'] , 498 \ ['\\rfloor' , '⌋'] , 499 \ ['\\rgroup' , '⌋'] , 500 \ ['\\rmoustache' , '⎞'] , 501 \ ['\\uparrow' , '↑'] , 502 \ ['\\Uparrow' , '↑'] , 503 \ ['\\updownarrow', '↕'] , 504 \ ['\\Updownarrow', '⇕']] 505 if &ambw == "double" || exists("g:tex_usedblwidth") 506 let s:texMathDelimList= s:texMathDelimList + [ 507 \ ['\\langle' , '〈'] , 508 \ ['\\rangle' , '〉']] 509 else 510 let s:texMathDelimList= s:texMathDelimList + [ 511 \ ['\\langle' , '<'] , 512 \ ['\\rangle' , '>']] 513 endif 514 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad 515 for texmath in s:texMathDelimList 516 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1] 517 endfor 518 519 else 520 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad 521 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad 522 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad 523 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]" 524 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow 525 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow 526 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow 527 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow 528 syn keyword texMathDelimKey contained lbrace lvert rfloor 529 endif 530 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>" 531 syn match texMathDelim contained "\\lefteqn\>" 532endif 533 534" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1 535syn match texSpecialChar "\\[$&%#{}_]" 536if b:tex_stylish 537 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1 538else 539 syn match texSpecialChar "\\[SP@]\A"me=e-1 540endif 541syn match texSpecialChar "\\\\" 542if !exists("g:tex_no_math") 543 syn match texOnlyMath "[_^]" 544endif 545syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" 546if s:tex_conceal !~# 'S' 547 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚ 548 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘ 549 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„ 550 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“ 551 syn match texSpecialChar '\\hyp\>' contained conceal cchar=- 552endif 553 554" Comments: {{{1 555" Normal TeX LaTeX : %.... 556" Documented TeX Format: ^^A... -and- leading %s (only) 557if !s:tex_comment_nospell 558 syn cluster texCommentGroup contains=texTodo,@Spell 559else 560 syn cluster texCommentGroup contains=texTodo,@NoSpell 561endif 562syn case ignore 563syn keyword texTodo contained combak fixme todo xxx 564syn case match 565if s:extfname == "dtx" 566 syn match texComment "\^\^A.*$" contains=@texCommentGroup 567 syn match texComment "^%\+" contains=@texCommentGroup 568else 569 if s:tex_fold_enabled 570 " allows syntax-folding of 2 or more contiguous comment lines 571 " single-line comments are not folded 572 syn match texComment "%.*$" contains=@texCommentGroup 573 if s:tex_fast =~# 'c' 574 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup 575 TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell 576 endif 577 else 578 syn match texComment "%.*$" contains=@texCommentGroup 579 if s:tex_fast =~# 'c' 580 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell 581 endif 582 endif 583endif 584 585" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files. 586if !s:tex_nospell 587 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell 588else 589 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup 590endif 591 592" Separate lines used for verb` and verb# so that the end conditions {{{1 593" will appropriately terminate. 594" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. 595if s:tex_fast =~# 'v' 596 if exists("g:tex_verbspell") && g:tex_verbspell 597 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell 598 " listings package: 599 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell 600 if b:tex_stylish 601 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell 602 else 603 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell 604 endif 605 else 606 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" 607 if b:tex_stylish 608 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" 609 else 610 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" 611 endif 612 endif 613endif 614 615" Tex Reference Zones: {{{1 616if s:tex_fast =~# 'r' 617 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup 618 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup 619 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup 620 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup 621 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup 622 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup 623 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite 624 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite 625endif 626syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite 627 628" Handle newcommand, newenvironment : {{{1 629syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl 630if s:tex_fast =~# 'V' 631 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl 632 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl 633 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup 634endif 635syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl 636if s:tex_fast =~# 'V' 637 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl 638 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup 639 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup 640endif 641 642" Definitions/Commands: {{{1 643syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl 644if b:tex_stylish 645 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl 646 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl 647else 648 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl 649 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl 650endif 651syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl 652syn match texDefParm contained "#\d\+" 653 654" TeX Lengths: {{{1 655syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" 656 657" TeX String Delimiters: {{{1 658syn match texString "\(``\|''\|,,\)" 659 660" makeatletter -- makeatother sections 661if !s:tex_no_error 662 if s:tex_fast =~# 'S' 663 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained 664 endif 665 syn match texStyleStatement "\\[a-zA-Z@]\+" contained 666 if s:tex_fast =~# 'S' 667 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained 668 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained 669 endif 670endif 671 672" Conceal mode support (supports set cole=2) {{{1 673if has("conceal") && &enc == 'utf-8' 674 675 " Math Symbols {{{2 676 " (many of these symbols were contributed by Björn Winckler) 677 if s:tex_conceal =~# 'm' 678 let s:texMathList=[ 679 \ ['|' , '‖'], 680 \ ['aleph' , 'ℵ'], 681 \ ['amalg' , '∐'], 682 \ ['angle' , '∠'], 683 \ ['approx' , '≈'], 684 \ ['ast' , '∗'], 685 \ ['asymp' , '≍'], 686 \ ['backepsilon' , '∍'], 687 \ ['backsimeq' , '≃'], 688 \ ['backslash' , '∖'], 689 \ ['barwedge' , '⊼'], 690 \ ['because' , '∵'], 691 \ ['beth' , 'ܒ'], 692 \ ['between' , '≬'], 693 \ ['bigcap' , '∩'], 694 \ ['bigcirc' , '○'], 695 \ ['bigcup' , '∪'], 696 \ ['bigodot' , '⊙'], 697 \ ['bigoplus' , '⊕'], 698 \ ['bigotimes' , '⊗'], 699 \ ['bigsqcup' , '⊔'], 700 \ ['bigtriangledown', '∇'], 701 \ ['bigtriangleup' , '∆'], 702 \ ['bigvee' , '⋁'], 703 \ ['bigwedge' , '⋀'], 704 \ ['blacksquare' , '∎'], 705 \ ['bot' , '⊥'], 706 \ ['bowtie' , '⋈'], 707 \ ['boxdot' , '⊡'], 708 \ ['boxminus' , '⊟'], 709 \ ['boxplus' , '⊞'], 710 \ ['boxtimes' , '⊠'], 711 \ ['Box' , '☐'], 712 \ ['bullet' , '•'], 713 \ ['bumpeq' , '≏'], 714 \ ['Bumpeq' , '≎'], 715 \ ['cap' , '∩'], 716 \ ['Cap' , '⋒'], 717 \ ['cdot' , '·'], 718 \ ['cdots' , '⋯'], 719 \ ['circ' , '∘'], 720 \ ['circeq' , '≗'], 721 \ ['circlearrowleft', '↺'], 722 \ ['circlearrowright', '↻'], 723 \ ['circledast' , '⊛'], 724 \ ['circledcirc' , '⊚'], 725 \ ['clubsuit' , '♣'], 726 \ ['complement' , '∁'], 727 \ ['cong' , '≅'], 728 \ ['coprod' , '∐'], 729 \ ['copyright' , '©'], 730 \ ['cup' , '∪'], 731 \ ['Cup' , '⋓'], 732 \ ['curlyeqprec' , '⋞'], 733 \ ['curlyeqsucc' , '⋟'], 734 \ ['curlyvee' , '⋎'], 735 \ ['curlywedge' , '⋏'], 736 \ ['dagger' , '†'], 737 \ ['dashv' , '⊣'], 738 \ ['ddagger' , '‡'], 739 \ ['ddots' , '⋱'], 740 \ ['diamond' , '⋄'], 741 \ ['diamondsuit' , '♢'], 742 \ ['div' , '÷'], 743 \ ['doteq' , '≐'], 744 \ ['doteqdot' , '≑'], 745 \ ['dotplus' , '∔'], 746 \ ['dots' , '…'], 747 \ ['dotsb' , '⋯'], 748 \ ['dotsc' , '…'], 749 \ ['dotsi' , '⋯'], 750 \ ['dotso' , '…'], 751 \ ['doublebarwedge' , '⩞'], 752 \ ['downarrow' , '↓'], 753 \ ['Downarrow' , '⇓'], 754 \ ['ell' , 'ℓ'], 755 \ ['emptyset' , '∅'], 756 \ ['eqcirc' , '≖'], 757 \ ['eqsim' , '≂'], 758 \ ['eqslantgtr' , '⪖'], 759 \ ['eqslantless' , '⪕'], 760 \ ['equiv' , '≡'], 761 \ ['eth' , 'ð'], 762 \ ['exists' , '∃'], 763 \ ['fallingdotseq' , '≒'], 764 \ ['flat' , '♭'], 765 \ ['forall' , '∀'], 766 \ ['frown' , '⁔'], 767 \ ['ge' , '≥'], 768 \ ['geq' , '≥'], 769 \ ['geqq' , '≧'], 770 \ ['gets' , '←'], 771 \ ['gimel' , 'ℷ'], 772 \ ['gg' , '⟫'], 773 \ ['gneqq' , '≩'], 774 \ ['gtrdot' , '⋗'], 775 \ ['gtreqless' , '⋛'], 776 \ ['gtrless' , '≷'], 777 \ ['gtrsim' , '≳'], 778 \ ['hbar' , 'ℏ'], 779 \ ['heartsuit' , '♡'], 780 \ ['hookleftarrow' , '↩'], 781 \ ['hookrightarrow' , '↪'], 782 \ ['iff' , '⇔'], 783 \ ['iiint' , '∭'], 784 \ ['iint' , '∬'], 785 \ ['Im' , 'ℑ'], 786 \ ['imath' , 'ɩ'], 787 \ ['implies' , '⇒'], 788 \ ['in' , '∈'], 789 \ ['infty' , '∞'], 790 \ ['int' , '∫'], 791 \ ['jmath' , ''], 792 \ ['land' , '∧'], 793 \ ['lceil' , '⌈'], 794 \ ['ldots' , '…'], 795 \ ['le' , '≤'], 796 \ ['leadsto' , '↝'], 797 \ ['left(' , '('], 798 \ ['left\[' , '['], 799 \ ['left\\{' , '{'], 800 \ ['leftarrow' , '←'], 801 \ ['Leftarrow' , '⇐'], 802 \ ['leftarrowtail' , '↢'], 803 \ ['leftharpoondown', '↽'], 804 \ ['leftharpoonup' , '↼'], 805 \ ['leftrightarrow' , '↔'], 806 \ ['Leftrightarrow' , '⇔'], 807 \ ['leftrightsquigarrow', '↭'], 808 \ ['leftthreetimes' , '⋋'], 809 \ ['leq' , '≤'], 810 \ ['leq' , '≤'], 811 \ ['leqq' , '≦'], 812 \ ['lessdot' , '⋖'], 813 \ ['lesseqgtr' , '⋚'], 814 \ ['lesssim' , '≲'], 815 \ ['lfloor' , '⌊'], 816 \ ['ll' , '≪'], 817 \ ['lmoustache' , '╭'], 818 \ ['lneqq' , '≨'], 819 \ ['lor' , '∨'], 820 \ ['ltimes' , '⋉'], 821 \ ['mapsto' , '↦'], 822 \ ['measuredangle' , '∡'], 823 \ ['mid' , '∣'], 824 \ ['models' , '╞'], 825 \ ['mp' , '∓'], 826 \ ['nabla' , '∇'], 827 \ ['natural' , '♮'], 828 \ ['ncong' , '≇'], 829 \ ['ne' , '≠'], 830 \ ['nearrow' , '↗'], 831 \ ['neg' , '¬'], 832 \ ['neq' , '≠'], 833 \ ['nexists' , '∄'], 834 \ ['ngeq' , '≱'], 835 \ ['ngeqq' , '≱'], 836 \ ['ngtr' , '≯'], 837 \ ['ni' , '∋'], 838 \ ['nleftarrow' , '↚'], 839 \ ['nLeftarrow' , '⇍'], 840 \ ['nLeftrightarrow', '⇎'], 841 \ ['nleq' , '≰'], 842 \ ['nleqq' , '≰'], 843 \ ['nless' , '≮'], 844 \ ['nmid' , '∤'], 845 \ ['notin' , '∉'], 846 \ ['nparallel' , '∦'], 847 \ ['nprec' , '⊀'], 848 \ ['nrightarrow' , '↛'], 849 \ ['nRightarrow' , '⇏'], 850 \ ['nsim' , '≁'], 851 \ ['nsucc' , '⊁'], 852 \ ['ntriangleleft' , '⋪'], 853 \ ['ntrianglelefteq', '⋬'], 854 \ ['ntriangleright' , '⋫'], 855 \ ['ntrianglerighteq', '⋭'], 856 \ ['nvdash' , '⊬'], 857 \ ['nvDash' , '⊭'], 858 \ ['nVdash' , '⊮'], 859 \ ['nwarrow' , '↖'], 860 \ ['odot' , '⊙'], 861 \ ['oint' , '∮'], 862 \ ['ominus' , '⊖'], 863 \ ['oplus' , '⊕'], 864 \ ['oslash' , '⊘'], 865 \ ['otimes' , '⊗'], 866 \ ['owns' , '∋'], 867 \ ['P' , '¶'], 868 \ ['parallel' , '║'], 869 \ ['partial' , '∂'], 870 \ ['perp' , '⊥'], 871 \ ['pitchfork' , '⋔'], 872 \ ['pm' , '±'], 873 \ ['prec' , '≺'], 874 \ ['precapprox' , '⪷'], 875 \ ['preccurlyeq' , '≼'], 876 \ ['preceq' , '⪯'], 877 \ ['precnapprox' , '⪹'], 878 \ ['precneqq' , '⪵'], 879 \ ['precsim' , '≾'], 880 \ ['prime' , '′'], 881 \ ['prod' , '∏'], 882 \ ['propto' , '∝'], 883 \ ['rceil' , '⌉'], 884 \ ['Re' , 'ℜ'], 885 \ ['rfloor' , '⌋'], 886 \ ['right)' , ')'], 887 \ ['right]' , ']'], 888 \ ['right\\}' , '}'], 889 \ ['rightarrow' , '→'], 890 \ ['Rightarrow' , '⇒'], 891 \ ['rightarrowtail' , '↣'], 892 \ ['rightleftharpoons', '⇌'], 893 \ ['rightsquigarrow', '↝'], 894 \ ['rightthreetimes', '⋌'], 895 \ ['risingdotseq' , '≓'], 896 \ ['rmoustache' , '╮'], 897 \ ['rtimes' , '⋊'], 898 \ ['S' , '§'], 899 \ ['searrow' , '↘'], 900 \ ['setminus' , '∖'], 901 \ ['sharp' , '♯'], 902 \ ['sim' , '∼'], 903 \ ['simeq' , '⋍'], 904 \ ['smile' , '‿'], 905 \ ['spadesuit' , '♠'], 906 \ ['sphericalangle' , '∢'], 907 \ ['sqcap' , '⊓'], 908 \ ['sqcup' , '⊔'], 909 \ ['sqsubset' , '⊏'], 910 \ ['sqsubseteq' , '⊑'], 911 \ ['sqsupset' , '⊐'], 912 \ ['sqsupseteq' , '⊒'], 913 \ ['star' , '✫'], 914 \ ['subset' , '⊂'], 915 \ ['Subset' , '⋐'], 916 \ ['subseteq' , '⊆'], 917 \ ['subseteqq' , '⫅'], 918 \ ['subsetneq' , '⊊'], 919 \ ['subsetneqq' , '⫋'], 920 \ ['succ' , '≻'], 921 \ ['succapprox' , '⪸'], 922 \ ['succcurlyeq' , '≽'], 923 \ ['succeq' , '⪰'], 924 \ ['succnapprox' , '⪺'], 925 \ ['succneqq' , '⪶'], 926 \ ['succsim' , '≿'], 927 \ ['sum' , '∑'], 928 \ ['supset' , '⊃'], 929 \ ['Supset' , '⋑'], 930 \ ['supseteq' , '⊇'], 931 \ ['supseteqq' , '⫆'], 932 \ ['supsetneq' , '⊋'], 933 \ ['supsetneqq' , '⫌'], 934 \ ['surd' , '√'], 935 \ ['swarrow' , '↙'], 936 \ ['therefore' , '∴'], 937 \ ['times' , '×'], 938 \ ['to' , '→'], 939 \ ['top' , '⊤'], 940 \ ['triangle' , '∆'], 941 \ ['triangleleft' , '⊲'], 942 \ ['trianglelefteq' , '⊴'], 943 \ ['triangleq' , '≜'], 944 \ ['triangleright' , '⊳'], 945 \ ['trianglerighteq', '⊵'], 946 \ ['twoheadleftarrow', '↞'], 947 \ ['twoheadrightarrow', '↠'], 948 \ ['ulcorner' , '⌜'], 949 \ ['uparrow' , '↑'], 950 \ ['Uparrow' , '⇑'], 951 \ ['updownarrow' , '↕'], 952 \ ['Updownarrow' , '⇕'], 953 \ ['urcorner' , '⌝'], 954 \ ['varnothing' , '∅'], 955 \ ['vartriangle' , '∆'], 956 \ ['vdash' , '⊢'], 957 \ ['vDash' , '⊨'], 958 \ ['Vdash' , '⊩'], 959 \ ['vdots' , '⋮'], 960 \ ['vee' , '∨'], 961 \ ['veebar' , '⊻'], 962 \ ['Vvdash' , '⊪'], 963 \ ['wedge' , '∧'], 964 \ ['wp' , '℘'], 965 \ ['wr' , '≀']] 966" \ ['jmath' , 'X'] 967" \ ['uminus' , 'X'] 968" \ ['uplus' , 'X'] 969 if &ambw == "double" || exists("g:tex_usedblwidth") 970 let s:texMathList= s:texMathList + [ 971 \ ['right\\rangle' , '〉'], 972 \ ['left\\langle' , '〈']] 973 else 974 let s:texMathList= s:texMathList + [ 975 \ ['right\\rangle' , '>'], 976 \ ['left\\langle' , '<']] 977 endif 978 for texmath in s:texMathList 979 if texmath[0] =~# '\w$' 980 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] 981 else 982 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] 983 endif 984 endfor 985 986 if &ambw == "double" 987 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫ 988 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪ 989 else 990 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫ 991 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪ 992 endif 993 994 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â 995 syn match texMathSymbol '\\hat{A}' contained conceal cchar= 996 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ 997 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ 998 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê 999 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê 1000 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ 1001 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ 1002 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î 1003 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î 1004 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô 1005 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô 1006 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ 1007 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ 1008 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û 1009 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û 1010 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ 1011 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ 1012 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ 1013 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ 1014" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅ 1015 1016 syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ 1017 syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ 1018 syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ 1019 syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ 1020 syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ 1021 syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ 1022 syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ 1023 syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ 1024 syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ 1025 syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ 1026 syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ 1027 syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ 1028 syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ 1029 syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ 1030 syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ 1031 syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ 1032 syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ 1033 syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ 1034 syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ 1035 syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ 1036 syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ 1037 syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ 1038 syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ 1039 syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ 1040 syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ 1041 syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ 1042 syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż 1043 syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż 1044 1045 syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ 1046 syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ 1047 syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė 1048 syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė 1049 syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ 1050 syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ 1051 syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ 1052 1053 syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ 1054 syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ 1055 syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ 1056 syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ 1057 endif 1058 1059 " Greek {{{2 1060 if s:tex_conceal =~# 'g' 1061 fun! s:Greek(group,pat,cchar) 1062 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar 1063 endfun 1064 call s:Greek('texGreek','\\alpha\>' ,'α') 1065 call s:Greek('texGreek','\\beta\>' ,'β') 1066 call s:Greek('texGreek','\\gamma\>' ,'γ') 1067 call s:Greek('texGreek','\\delta\>' ,'δ') 1068 call s:Greek('texGreek','\\epsilon\>' ,'ϵ') 1069 call s:Greek('texGreek','\\varepsilon\>' ,'ε') 1070 call s:Greek('texGreek','\\zeta\>' ,'ζ') 1071 call s:Greek('texGreek','\\eta\>' ,'η') 1072 call s:Greek('texGreek','\\theta\>' ,'θ') 1073 call s:Greek('texGreek','\\vartheta\>' ,'ϑ') 1074 call s:Greek('texGreek','\\kappa\>' ,'κ') 1075 call s:Greek('texGreek','\\lambda\>' ,'λ') 1076 call s:Greek('texGreek','\\mu\>' ,'μ') 1077 call s:Greek('texGreek','\\nu\>' ,'ν') 1078 call s:Greek('texGreek','\\xi\>' ,'ξ') 1079 call s:Greek('texGreek','\\pi\>' ,'π') 1080 call s:Greek('texGreek','\\varpi\>' ,'ϖ') 1081 call s:Greek('texGreek','\\rho\>' ,'ρ') 1082 call s:Greek('texGreek','\\varrho\>' ,'ϱ') 1083 call s:Greek('texGreek','\\sigma\>' ,'σ') 1084 call s:Greek('texGreek','\\varsigma\>' ,'ς') 1085 call s:Greek('texGreek','\\tau\>' ,'τ') 1086 call s:Greek('texGreek','\\upsilon\>' ,'υ') 1087 call s:Greek('texGreek','\\phi\>' ,'ϕ') 1088 call s:Greek('texGreek','\\varphi\>' ,'φ') 1089 call s:Greek('texGreek','\\chi\>' ,'χ') 1090 call s:Greek('texGreek','\\psi\>' ,'ψ') 1091 call s:Greek('texGreek','\\omega\>' ,'ω') 1092 call s:Greek('texGreek','\\Gamma\>' ,'Γ') 1093 call s:Greek('texGreek','\\Delta\>' ,'Δ') 1094 call s:Greek('texGreek','\\Theta\>' ,'Θ') 1095 call s:Greek('texGreek','\\Lambda\>' ,'Λ') 1096 call s:Greek('texGreek','\\Xi\>' ,'Χ') 1097 call s:Greek('texGreek','\\Pi\>' ,'Π') 1098 call s:Greek('texGreek','\\Sigma\>' ,'Σ') 1099 call s:Greek('texGreek','\\Upsilon\>' ,'Υ') 1100 call s:Greek('texGreek','\\Phi\>' ,'Φ') 1101 call s:Greek('texGreek','\\Psi\>' ,'Ψ') 1102 call s:Greek('texGreek','\\Omega\>' ,'Ω') 1103 delfun s:Greek 1104 endif 1105 1106 " Superscripts/Subscripts {{{2 1107 if s:tex_conceal =~# 's' 1108 if s:tex_fast =~# 's' 1109 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher 1110 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher 1111 endif 1112 " s:SuperSub: 1113 fun! s:SuperSub(group,leader,pat,cchar) 1114 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts) 1115" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">") 1116 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar 1117 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' 1118 endif 1119 endfun 1120 call s:SuperSub('texSuperscript','\^','0','⁰') 1121 call s:SuperSub('texSuperscript','\^','1','¹') 1122 call s:SuperSub('texSuperscript','\^','2','²') 1123 call s:SuperSub('texSuperscript','\^','3','³') 1124 call s:SuperSub('texSuperscript','\^','4','⁴') 1125 call s:SuperSub('texSuperscript','\^','5','⁵') 1126 call s:SuperSub('texSuperscript','\^','6','⁶') 1127 call s:SuperSub('texSuperscript','\^','7','⁷') 1128 call s:SuperSub('texSuperscript','\^','8','⁸') 1129 call s:SuperSub('texSuperscript','\^','9','⁹') 1130 call s:SuperSub('texSuperscript','\^','a','ᵃ') 1131 call s:SuperSub('texSuperscript','\^','b','ᵇ') 1132 call s:SuperSub('texSuperscript','\^','c','ᶜ') 1133 call s:SuperSub('texSuperscript','\^','d','ᵈ') 1134 call s:SuperSub('texSuperscript','\^','e','ᵉ') 1135 call s:SuperSub('texSuperscript','\^','f','ᶠ') 1136 call s:SuperSub('texSuperscript','\^','g','ᵍ') 1137 call s:SuperSub('texSuperscript','\^','h','ʰ') 1138 call s:SuperSub('texSuperscript','\^','i','ⁱ') 1139 call s:SuperSub('texSuperscript','\^','j','ʲ') 1140 call s:SuperSub('texSuperscript','\^','k','ᵏ') 1141 call s:SuperSub('texSuperscript','\^','l','ˡ') 1142 call s:SuperSub('texSuperscript','\^','m','ᵐ') 1143 call s:SuperSub('texSuperscript','\^','n','ⁿ') 1144 call s:SuperSub('texSuperscript','\^','o','ᵒ') 1145 call s:SuperSub('texSuperscript','\^','p','ᵖ') 1146 call s:SuperSub('texSuperscript','\^','r','ʳ') 1147 call s:SuperSub('texSuperscript','\^','s','ˢ') 1148 call s:SuperSub('texSuperscript','\^','t','ᵗ') 1149 call s:SuperSub('texSuperscript','\^','u','ᵘ') 1150 call s:SuperSub('texSuperscript','\^','v','ᵛ') 1151 call s:SuperSub('texSuperscript','\^','w','ʷ') 1152 call s:SuperSub('texSuperscript','\^','x','ˣ') 1153 call s:SuperSub('texSuperscript','\^','y','ʸ') 1154 call s:SuperSub('texSuperscript','\^','z','ᶻ') 1155 call s:SuperSub('texSuperscript','\^','A','ᴬ') 1156 call s:SuperSub('texSuperscript','\^','B','ᴮ') 1157 call s:SuperSub('texSuperscript','\^','D','ᴰ') 1158 call s:SuperSub('texSuperscript','\^','E','ᴱ') 1159 call s:SuperSub('texSuperscript','\^','G','ᴳ') 1160 call s:SuperSub('texSuperscript','\^','H','ᴴ') 1161 call s:SuperSub('texSuperscript','\^','I','ᴵ') 1162 call s:SuperSub('texSuperscript','\^','J','ᴶ') 1163 call s:SuperSub('texSuperscript','\^','K','ᴷ') 1164 call s:SuperSub('texSuperscript','\^','L','ᴸ') 1165 call s:SuperSub('texSuperscript','\^','M','ᴹ') 1166 call s:SuperSub('texSuperscript','\^','N','ᴺ') 1167 call s:SuperSub('texSuperscript','\^','O','ᴼ') 1168 call s:SuperSub('texSuperscript','\^','P','ᴾ') 1169 call s:SuperSub('texSuperscript','\^','R','ᴿ') 1170 call s:SuperSub('texSuperscript','\^','T','ᵀ') 1171 call s:SuperSub('texSuperscript','\^','U','ᵁ') 1172 call s:SuperSub('texSuperscript','\^','W','ᵂ') 1173 call s:SuperSub('texSuperscript','\^',',','︐') 1174 call s:SuperSub('texSuperscript','\^',':','︓') 1175 call s:SuperSub('texSuperscript','\^',';','︔') 1176 call s:SuperSub('texSuperscript','\^','+','⁺') 1177 call s:SuperSub('texSuperscript','\^','-','⁻') 1178 call s:SuperSub('texSuperscript','\^','<','˂') 1179 call s:SuperSub('texSuperscript','\^','>','˃') 1180 call s:SuperSub('texSuperscript','\^','/','ˊ') 1181 call s:SuperSub('texSuperscript','\^','(','⁽') 1182 call s:SuperSub('texSuperscript','\^',')','⁾') 1183 call s:SuperSub('texSuperscript','\^','\.','˙') 1184 call s:SuperSub('texSuperscript','\^','=','˭') 1185 call s:SuperSub('texSubscript','_','0','₀') 1186 call s:SuperSub('texSubscript','_','1','₁') 1187 call s:SuperSub('texSubscript','_','2','₂') 1188 call s:SuperSub('texSubscript','_','3','₃') 1189 call s:SuperSub('texSubscript','_','4','₄') 1190 call s:SuperSub('texSubscript','_','5','₅') 1191 call s:SuperSub('texSubscript','_','6','₆') 1192 call s:SuperSub('texSubscript','_','7','₇') 1193 call s:SuperSub('texSubscript','_','8','₈') 1194 call s:SuperSub('texSubscript','_','9','₉') 1195 call s:SuperSub('texSubscript','_','a','ₐ') 1196 call s:SuperSub('texSubscript','_','e','ₑ') 1197 call s:SuperSub('texSubscript','_','h','ₕ') 1198 call s:SuperSub('texSubscript','_','i','ᵢ') 1199 call s:SuperSub('texSubscript','_','j','ⱼ') 1200 call s:SuperSub('texSubscript','_','k','ₖ') 1201 call s:SuperSub('texSubscript','_','l','ₗ') 1202 call s:SuperSub('texSubscript','_','m','ₘ') 1203 call s:SuperSub('texSubscript','_','n','ₙ') 1204 call s:SuperSub('texSubscript','_','o','ₒ') 1205 call s:SuperSub('texSubscript','_','p','ₚ') 1206 call s:SuperSub('texSubscript','_','r','ᵣ') 1207 call s:SuperSub('texSubscript','_','s','ₛ') 1208 call s:SuperSub('texSubscript','_','t','ₜ') 1209 call s:SuperSub('texSubscript','_','u','ᵤ') 1210 call s:SuperSub('texSubscript','_','v','ᵥ') 1211 call s:SuperSub('texSubscript','_','x','ₓ') 1212 call s:SuperSub('texSubscript','_',',','︐') 1213 call s:SuperSub('texSubscript','_','+','₊') 1214 call s:SuperSub('texSubscript','_','-','₋') 1215 call s:SuperSub('texSubscript','_','/','ˏ') 1216 call s:SuperSub('texSubscript','_','(','₍') 1217 call s:SuperSub('texSubscript','_',')','₎') 1218 call s:SuperSub('texSubscript','_','\.','‸') 1219 call s:SuperSub('texSubscript','_','r','ᵣ') 1220 call s:SuperSub('texSubscript','_','v','ᵥ') 1221 call s:SuperSub('texSubscript','_','x','ₓ') 1222 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ') 1223 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ') 1224 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ') 1225 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ') 1226 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ') 1227 1228 delfun s:SuperSub 1229 endif 1230 1231 " Accented characters and Ligatures: {{{2 1232 if s:tex_conceal =~# 'a' 1233 if b:tex_stylish 1234 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 1235 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 1236 syn match texLigature '--' 1237 syn match texLigature '---' 1238 else 1239 fun! s:Accents(chr,...) 1240 let i= 1 1241 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"] 1242 if i > a:0 1243 break 1244 endif 1245 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?' 1246 let i= i + 1 1247 continue 1248 endif 1249 if accent =~# '\a' 1250 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} 1251 else 1252 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} 1253 endif 1254 let i= i + 1 1255 endfor 1256 endfun 1257 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v 1258 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ') 1259 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ') 1260 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č') 1261 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č') 1262 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď') 1263 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď') 1264 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě') 1265 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě') 1266 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ') 1267 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ') 1268 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ') 1269 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ') 1270 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ') 1271 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ') 1272 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ') 1273 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ') 1274 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ') 1275 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ') 1276 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ') 1277 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň') 1278 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň') 1279 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ') 1280 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ') 1281 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř') 1282 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř') 1283 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š') 1284 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š') 1285 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť') 1286 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť') 1287 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ') 1288 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ') 1289 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') 1290 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') 1291 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ') 1292 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ') 1293 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž') 1294 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž') 1295 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ') 1296 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v 1297 delfun s:Accents 1298 syn match texAccent '\\aa\>' conceal cchar=å 1299 syn match texAccent '\\AA\>' conceal cchar=Å 1300 syn match texAccent '\\o\>' conceal cchar=ø 1301 syn match texAccent '\\O\>' conceal cchar=Ø 1302 syn match texLigature '\\AE\>' conceal cchar=Æ 1303 syn match texLigature '\\ae\>' conceal cchar=æ 1304 syn match texLigature '\\oe\>' conceal cchar=œ 1305 syn match texLigature '\\OE\>' conceal cchar=Œ 1306 syn match texLigature '\\ss\>' conceal cchar=ß 1307 syn match texLigature '--' conceal cchar=– 1308 syn match texLigature '---' conceal cchar=— 1309 endif 1310 endif 1311endif 1312 1313" --------------------------------------------------------------------- 1314" LaTeX synchronization: {{{1 1315syn sync maxlines=200 1316syn sync minlines=50 1317 1318syn sync match texSyncStop groupthere NONE "%stopzone\>" 1319 1320" Synchronization: {{{1 1321" The $..$ and $$..$$ make for impossible sync patterns 1322" (one can't tell if a "$$" starts or stops a math zone by itself) 1323" The following grouptheres coupled with minlines above 1324" help improve the odds of good syncing. 1325if !exists("g:tex_no_math") 1326 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}" 1327 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}" 1328 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}" 1329 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}" 1330 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}" 1331 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}" 1332 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}" 1333 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>" 1334endif 1335 1336" --------------------------------------------------------------------- 1337" Highlighting: {{{1 1338 1339" Define the default highlighting. {{{1 1340if !exists("skip_tex_syntax_inits") 1341 1342 " TeX highlighting groups which should share similar highlighting 1343 if !exists("g:tex_no_error") 1344 if !exists("g:tex_no_math") 1345 hi def link texBadMath texError 1346 hi def link texMathDelimBad texError 1347 hi def link texMathError texError 1348 if !b:tex_stylish 1349 hi def link texOnlyMath texError 1350 endif 1351 endif 1352 hi def link texError Error 1353 endif 1354 1355 hi texBoldStyle gui=bold cterm=bold 1356 hi texItalStyle gui=italic cterm=italic 1357 hi texBoldItalStyle gui=bold,italic cterm=bold,italic 1358 hi texItalBoldStyle gui=bold,italic cterm=bold,italic 1359 hi def link texCite texRefZone 1360 hi def link texDefCmd texDef 1361 hi def link texDefName texDef 1362 hi def link texDocType texCmdName 1363 hi def link texDocTypeArgs texCmdArgs 1364 hi def link texInputFileOpt texCmdArgs 1365 hi def link texInputCurlies texDelimiter 1366 hi def link texLigature texSpecialChar 1367 if !exists("g:tex_no_math") 1368 hi def link texMathDelimSet1 texMathDelim 1369 hi def link texMathDelimSet2 texMathDelim 1370 hi def link texMathDelimKey texMathDelim 1371 hi def link texMathMatcher texMath 1372 hi def link texAccent texStatement 1373 hi def link texGreek texStatement 1374 hi def link texSuperscript texStatement 1375 hi def link texSubscript texStatement 1376 hi def link texSuperscripts texSuperscript 1377 hi def link texSubscripts texSubscript 1378 hi def link texMathSymbol texStatement 1379 hi def link texMathZoneV texMath 1380 hi def link texMathZoneW texMath 1381 hi def link texMathZoneX texMath 1382 hi def link texMathZoneY texMath 1383 hi def link texMathZoneV texMath 1384 hi def link texMathZoneZ texMath 1385 endif 1386 hi def link texBeginEnd texCmdName 1387 hi def link texBeginEndName texSection 1388 hi def link texSpaceCode texStatement 1389 hi def link texStyleStatement texStatement 1390 hi def link texTypeSize texType 1391 hi def link texTypeStyle texType 1392 1393 " Basic TeX highlighting groups 1394 hi def link texCmdArgs Number 1395 hi def link texCmdName Statement 1396 hi def link texComment Comment 1397 hi def link texDef Statement 1398 hi def link texDefParm Special 1399 hi def link texDelimiter Delimiter 1400 hi def link texInput Special 1401 hi def link texInputFile Special 1402 hi def link texLength Number 1403 hi def link texMath Special 1404 hi def link texMathDelim Statement 1405 hi def link texMathOper Operator 1406 hi def link texNewCmd Statement 1407 hi def link texNewEnv Statement 1408 hi def link texOption Number 1409 hi def link texRefZone Special 1410 hi def link texSection PreCondit 1411 hi def link texSpaceCodeChar Special 1412 hi def link texSpecialChar SpecialChar 1413 hi def link texStatement Statement 1414 hi def link texString String 1415 hi def link texTodo Todo 1416 hi def link texType Type 1417 hi def link texZone PreCondit 1418 1419endif 1420 1421" Cleanup: {{{1 1422delc TexFold 1423unlet s:extfname 1424let b:current_syntax = "tex" 1425let &cpo = s:keepcpo 1426unlet s:keepcpo 1427" vim: ts=8 fdm=marker 1428