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