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