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