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