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