blob: c0982d84daaf123f0157de9b9b83ef92014b01b1 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar97d62492012-11-15 21:28:22 +01003" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02004" Last Change: Jul 05, 2016
5" Version: 98
Bram Moolenaarac7bd632013-03-19 11:35:58 +01006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
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
Bram Moolenaara6878372014-03-22 21:02:50 +010031"
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
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
Bram Moolenaar15146672011-10-20 22:22:38 +020050let s:keepcpo= &cpo
51set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020052scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
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
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020065
66" by default, enable all region-based highlighting
67let s:tex_fast= "bcmMprsSvV"
68if exists("g:tex_fast")
69 if type(g:tex_fast) != 1
70 " g:tex_fast exists and is not a string, so
71 " turn off all optional region-based highighting
72 let s:tex_fast= ""
73 else
74 let s:tex_fast= g:tex_fast
75 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000076endif
77
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020078" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020079" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020080if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020081 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020082else
83 let s:tex_conceal= g:tex_conceal
84endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020085if !exists("g:tex_superscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020086 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020087else
88 let s:tex_superscripts= g:tex_superscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020089endif
90if !exists("g:tex_subscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020091 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020092else
93 let s:tex_subscripts= g:tex_subscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020094endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020095
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000096" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000097" The user may override the normal determination by setting
98" g:tex_stylish to 1 (for "*.sty" mode)
99" or to 0 else (normal "*.tex" mode)
100" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +0100101let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102if exists("g:tex_stylish")
103 let b:tex_stylish= g:tex_stylish
104elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100105 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106 let b:tex_stylish= 1
107 else
108 let b:tex_stylish= 0
109 endif
110endif
111
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000112" handle folding {{{1
113if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100114 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000115elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100116 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000117 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100118else
119 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000120endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100121if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200122 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000123endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100124if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100125 com! -nargs=* TexFold <args> fold
126else
127 com! -nargs=* TexFold <args>
128endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000129
Bram Moolenaaradc21822011-04-01 18:03:16 +0200130" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200132" One may override this iskeyword setting by providing
133" g:tex_isk
134if exists("g:tex_isk")
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200135 if b:tex_stylish && g:tex_isk !~ '@'
136 let b:tex_isk= '@,'.g:tex_isk
137 else
138 let b:tex_isk= g:tex_isk
139 endif
140elseif b:tex_stylish
141 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142else
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200143 let b:tex_isk="48-57,a-z,A-Z,192-255"
Bram Moolenaaradc21822011-04-01 18:03:16 +0200144endif
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200145if v:version > 704 || (v:version == 704 && has("patch-7.4.1142"))
146 exe "syn iskeyword ".b:tex_isk
147else
148 exe "setl isk=".b:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100150if exists("g:tex_no_error") && g:tex_no_error
151 let s:tex_no_error= 1
152else
153 let s:tex_no_error= 0
154endif
155if exists("g:tex_comment_nospell") && g:tex_comment_nospell
156 let s:tex_comment_nospell= 1
157else
158 let s:tex_comment_nospell= 0
159endif
160if exists("g:tex_nospell") && g:tex_nospell
161 let s:tex_nospell = 1
162else
163 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200164endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165
166" Clusters: {{{1
167" --------
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200168syn 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
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100169if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100170 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100172syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
173syn 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
174syn 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
175syn 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
176if !s:tex_nospell
177 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
178 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
Bram Moolenaard960d762011-09-21 19:22:10 +0200179else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100180 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
181 syn cluster 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
Bram Moolenaard960d762011-09-21 19:22:10 +0200182endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100183syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100184syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100185if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100186 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
187 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
188 syn cluster texMatchGroup add=@texMathZones
189 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
190 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
191 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100192 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100193 syn cluster texMathMatchGroup add=texMathError
194 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100196 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000197 " following used in the \part \chapter \section \subsection \subsubsection
198 " \paragraph \subparagraph \author \title highlighting
199 syn cluster texDocGroup contains=texPartZone,@texPartGroup
200 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
201 syn cluster texChapterGroup contains=texSectionZone,texParaZone
202 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
203 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
204 syn cluster texSubSubSectionGroup contains=texParaZone
205 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200206 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100207 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
208 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200209 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000210endif
211
212" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100213if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100214 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200215 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
216 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100217 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200218 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
219 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100220 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100221 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200222 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100223 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200224 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100225 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100227if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 syn match texError "[}\])]"
229endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100230if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100231 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100232 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100233 syn match texMathError "}" contained
234 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100235 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100236 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237endif
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\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100246 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247 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
Bram Moolenaard38b0552012-04-25 19:07:41 +0200256syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000257
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" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200272syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100273if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100274 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200275 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100276endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277
278" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200279syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100280if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100281 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
282endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000284" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100285if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200286 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000287endif
288
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289" TeX input: {{{1
290syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100291syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
293syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100294if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100295 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
296endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297
298" Type Styles (LaTeX 2.09): {{{1
299syn match texTypeStyle "\\rm\>"
300syn match texTypeStyle "\\em\>"
301syn match texTypeStyle "\\bf\>"
302syn match texTypeStyle "\\it\>"
303syn match texTypeStyle "\\sl\>"
304syn match texTypeStyle "\\sf\>"
305syn match texTypeStyle "\\sc\>"
306syn match texTypeStyle "\\tt\>"
307
308" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200309if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200310 syn match texTypeStyle "\\textbf\>"
311 syn match texTypeStyle "\\textit\>"
312endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313syn match texTypeStyle "\\textmd\>"
314syn match texTypeStyle "\\textrm\>"
315syn match texTypeStyle "\\textsc\>"
316syn match texTypeStyle "\\textsf\>"
317syn match texTypeStyle "\\textsl\>"
318syn match texTypeStyle "\\texttt\>"
319syn match texTypeStyle "\\textup\>"
320syn match texTypeStyle "\\emph\>"
321
322syn match texTypeStyle "\\mathbb\>"
323syn match texTypeStyle "\\mathbf\>"
324syn match texTypeStyle "\\mathcal\>"
325syn match texTypeStyle "\\mathfrak\>"
326syn match texTypeStyle "\\mathit\>"
327syn match texTypeStyle "\\mathnormal\>"
328syn match texTypeStyle "\\mathrm\>"
329syn match texTypeStyle "\\mathsf\>"
330syn match texTypeStyle "\\mathtt\>"
331
332syn match texTypeStyle "\\rmfamily\>"
333syn match texTypeStyle "\\sffamily\>"
334syn match texTypeStyle "\\ttfamily\>"
335
336syn match texTypeStyle "\\itshape\>"
337syn match texTypeStyle "\\scshape\>"
338syn match texTypeStyle "\\slshape\>"
339syn match texTypeStyle "\\upshape\>"
340
341syn match texTypeStyle "\\bfseries\>"
342syn match texTypeStyle "\\mdseries\>"
343
344" Some type sizes: {{{1
345syn match texTypeSize "\\tiny\>"
346syn match texTypeSize "\\scriptsize\>"
347syn match texTypeSize "\\footnotesize\>"
348syn match texTypeSize "\\small\>"
349syn match texTypeSize "\\normalsize\>"
350syn match texTypeSize "\\large\>"
351syn match texTypeSize "\\Large\>"
352syn match texTypeSize "\\LARGE\>"
353syn match texTypeSize "\\huge\>"
354syn match texTypeSize "\\Huge\>"
355
356" Spacecodes (TeX'isms): {{{1
357" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
358syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
359syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
360
361" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100362if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100363 if !s:tex_nospell
364 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
365 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
366 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
367 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
368 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
369 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
370 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
371 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
372 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
373 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
374 else
375 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
376 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
377 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
378 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
379 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
380 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
381 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
382 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
383 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
384 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100385 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000386endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387
Bram Moolenaard38b0552012-04-25 19:07:41 +0200388" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100389if s:tex_fast =~# 'b'
390 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200391 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200392 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
393 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
394 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
395 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\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
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200401 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100402 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200403endif
404
Bram Moolenaar071d4272004-06-13 20:20:40 +0000405" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100406if !exists("g:tex_no_math") && !s:tex_no_error
407 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
409 syn match texBadMath "\\[\])]"
410endif
411
412" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100413if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000414 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415 " Starred forms are created if starform is true. Starred
416 " forms have syntax group and synchronization groups with a
417 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
418 fun! TexNewMathZone(sfx,mathzone,starform)
419 let grpname = "texMathZone".a:sfx
420 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100421 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000422 let foldcmd= " fold"
423 else
424 let foldcmd= ""
425 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000426 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100427 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100428 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
429 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
430 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
431 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100432 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433 if a:starform
434 let grpname = "texMathZone".a:sfx.'S'
435 let syncname = "texSyncMathZone".a:sfx.'S'
436 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100437 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100438 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
439 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
440 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
441 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100442 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443 endif
444 endfun
445
446 " Standard Math Zones: {{{2
447 call TexNewMathZone("A","align",1)
448 call TexNewMathZone("B","alignat",1)
449 call TexNewMathZone("C","displaymath",1)
450 call TexNewMathZone("D","eqnarray",1)
451 call TexNewMathZone("E","equation",1)
452 call TexNewMathZone("F","flalign",1)
453 call TexNewMathZone("G","gather",1)
454 call TexNewMathZone("H","math",1)
455 call TexNewMathZone("I","multline",1)
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200456 call TexNewMathZone("J","xalignat",1)
457 call TexNewMathZone("K","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458
459 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100460 if s:tex_fast =~# 'M'
461 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200462 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
463 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
464 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
465 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100466 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200467 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
468 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100469 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200470 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100471 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200472 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200473 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474
475 syn match texMathOper "[_^=]" contained
476
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200477 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100478 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100479 if !exists("g:tex_nospell") || !g:tex_nospell
480 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
481 else
482 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
483 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200484 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200485
Bram Moolenaar071d4272004-06-13 20:20:40 +0000486 " \left..something.. and \right..something.. support: {{{2
487 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100488 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200489 syn match texMathDelim contained "\\left\["
490 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
491 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200492 let s:texMathDelimList=[
493 \ ['<' , '<'] ,
494 \ ['>' , '>'] ,
495 \ ['(' , '('] ,
496 \ [')' , ')'] ,
497 \ ['\[' , '['] ,
498 \ [']' , ']'] ,
499 \ ['\\{' , '{'] ,
500 \ ['\\}' , '}'] ,
501 \ ['|' , '|'] ,
502 \ ['\\|' , '‖'] ,
503 \ ['\\backslash' , '\'] ,
504 \ ['\\downarrow' , '↓'] ,
505 \ ['\\Downarrow' , '⇓'] ,
506 \ ['\\langle' , '<'] ,
507 \ ['\\lbrace' , '['] ,
508 \ ['\\lceil' , '⌈'] ,
509 \ ['\\lfloor' , '⌊'] ,
510 \ ['\\lgroup' , '⌊'] ,
511 \ ['\\lmoustache' , '⎛'] ,
512 \ ['\\rangle' , '>'] ,
513 \ ['\\rbrace' , ']'] ,
514 \ ['\\rceil' , '⌉'] ,
515 \ ['\\rfloor' , '⌋'] ,
516 \ ['\\rgroup' , '⌋'] ,
517 \ ['\\rmoustache' , '⎞'] ,
518 \ ['\\uparrow' , '↑'] ,
519 \ ['\\Uparrow' , '↑'] ,
520 \ ['\\updownarrow', '↕'] ,
521 \ ['\\Updownarrow', '⇕']]
522 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
523 for texmath in s:texMathDelimList
524 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
525 endfor
526
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200527 else
528 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200529 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
530 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
531 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
532 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
533 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
534 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
535 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
536 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200537 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000538 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
539 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000540endif
541
542" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
543syn match texSpecialChar "\\[$&%#{}_]"
544if b:tex_stylish
545 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
546else
547 syn match texSpecialChar "\\[SP@]\A"me=e-1
548endif
549syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100550if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000551 syn match texOnlyMath "[_^]"
552endif
553syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200554if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200555 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
556 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
557 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
558 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
559 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
560endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561
562" Comments: {{{1
563" Normal TeX LaTeX : %....
564" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100565if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000566 syn cluster texCommentGroup contains=texTodo,@Spell
567else
568 syn cluster texCommentGroup contains=texTodo,@NoSpell
569endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000571syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000572syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100573if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100574 syn match texComment "\^\^A.*$" contains=@texCommentGroup
575 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000576else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100577 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100578 " allows syntax-folding of 2 or more contiguous comment lines
579 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100580 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100581 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100582 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
583 TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000584 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100585 else
586 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100587 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100588 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100589 endif
590 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000591endif
592
593" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200594" will appropriately terminate.
595" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100596if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100597 if exists("g:tex_verbspell") && g:tex_verbspell
598 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
599 " listings package:
600 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
601 if version < 600
602 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
603 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200604 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100605 if b:tex_stylish
606 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
607 else
608 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
609 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200610 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100611 else
612 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
613 if version < 600
614 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
615 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200616 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100617 if b:tex_stylish
618 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
619 else
620 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
621 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200622 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100623 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624endif
625
626" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100627if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100628 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
Bram Moolenaar6e932462014-09-09 18:48:09 +0200635 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100636endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200637syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638
639" Handle newcommand, newenvironment : {{{1
640syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100641if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100642 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000646syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100647if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100648 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000652
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
Bram Moolenaar9964e462007-05-05 17:54:07 +0000666syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000667
668" TeX String Delimiters: {{{1
669syn match texString "\(``\|''\|,,\)"
670
Bram Moolenaar5c736222010-01-06 20:54:52 +0100671" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100672if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100673 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100674 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
675 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100676 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100677 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100678 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
Bram Moolenaar5c736222010-01-06 20:54:52 +0100681endif
682
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200684if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200685
686 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100688 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200689 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200690 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200691 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100692 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200693 \ ['angle' , '∠'],
694 \ ['approx' , '≈'],
695 \ ['ast' , '∗'],
696 \ ['asymp' , '≍'],
697 \ ['backepsilon' , '∍'],
698 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200699 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200700 \ ['barwedge' , '⊼'],
701 \ ['because' , '∵'],
702 \ ['between' , '≬'],
703 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100704 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200705 \ ['bigcup' , '∪'],
706 \ ['bigodot' , '⊙'],
707 \ ['bigoplus' , '⊕'],
708 \ ['bigotimes' , '⊗'],
709 \ ['bigsqcup' , '⊔'],
710 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['bigvee' , '⋁'],
713 \ ['bigwedge' , '⋀'],
714 \ ['blacksquare' , '∎'],
715 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100716 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['boxdot' , '⊡'],
718 \ ['boxminus' , '⊟'],
719 \ ['boxplus' , '⊞'],
720 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100721 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200722 \ ['bumpeq' , '≏'],
723 \ ['Bumpeq' , '≎'],
724 \ ['cap' , '∩'],
725 \ ['Cap' , '⋒'],
726 \ ['cdot' , '·'],
727 \ ['cdots' , '⋯'],
728 \ ['circ' , '∘'],
729 \ ['circeq' , '≗'],
730 \ ['circlearrowleft', '↺'],
731 \ ['circlearrowright', '↻'],
732 \ ['circledast' , '⊛'],
733 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200734 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200735 \ ['complement' , '∁'],
736 \ ['cong' , '≅'],
737 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200738 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['cup' , '∪'],
740 \ ['Cup' , '⋓'],
741 \ ['curlyeqprec' , '⋞'],
742 \ ['curlyeqsucc' , '⋟'],
743 \ ['curlyvee' , '⋎'],
744 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100745 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100747 \ ['ddagger' , '‡'],
748 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200749 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200750 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200751 \ ['div' , '÷'],
752 \ ['doteq' , '≐'],
753 \ ['doteqdot' , '≑'],
754 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100755 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200756 \ ['dotsb' , '⋯'],
757 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['dotsi' , '⋯'],
759 \ ['dotso' , '…'],
760 \ ['doublebarwedge' , '⩞'],
761 \ ['downarrow' , '↓'],
762 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100763 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200764 \ ['emptyset' , '∅'],
765 \ ['eqcirc' , '≖'],
766 \ ['eqsim' , '≂'],
767 \ ['eqslantgtr' , '⪖'],
768 \ ['eqslantless' , '⪕'],
769 \ ['equiv' , '≡'],
770 \ ['exists' , '∃'],
771 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200772 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200773 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100774 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200775 \ ['ge' , '≥'],
776 \ ['geq' , '≥'],
777 \ ['geqq' , '≧'],
778 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100779 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200780 \ ['gneqq' , '≩'],
781 \ ['gtrdot' , '⋗'],
782 \ ['gtreqless' , '⋛'],
783 \ ['gtrless' , '≷'],
784 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200785 \ ['hbar' , 'ℏ'],
786 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200787 \ ['hookleftarrow' , '↩'],
788 \ ['hookrightarrow' , '↪'],
789 \ ['iiint' , '∭'],
790 \ ['iint' , '∬'],
791 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200792 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200793 \ ['in' , '∈'],
794 \ ['infty' , '∞'],
795 \ ['int' , '∫'],
796 \ ['lceil' , '⌈'],
797 \ ['ldots' , '…'],
798 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100799 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200800 \ ['left(' , '('],
801 \ ['left\[' , '['],
802 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100803 \ ['leftarrow' , '←'],
804 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100805 \ ['leftarrowtail' , '↢'],
806 \ ['leftharpoondown', '↽'],
807 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100808 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100809 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200810 \ ['leftrightsquigarrow', '↭'],
811 \ ['leftthreetimes' , '⋋'],
812 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200814 \ ['leqq' , '≦'],
815 \ ['lessdot' , '⋖'],
816 \ ['lesseqgtr' , '⋚'],
817 \ ['lesssim' , '≲'],
818 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100819 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200820 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['lneqq' , '≨'],
822 \ ['ltimes' , '⋉'],
823 \ ['mapsto' , '↦'],
824 \ ['measuredangle' , '∡'],
825 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100826 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200827 \ ['mp' , '∓'],
828 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200829 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200830 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200831 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100832 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200833 \ ['neg' , '¬'],
834 \ ['neq' , '≠'],
835 \ ['nexists' , '∄'],
836 \ ['ngeq' , '≱'],
837 \ ['ngeqq' , '≱'],
838 \ ['ngtr' , '≯'],
839 \ ['ni' , '∋'],
840 \ ['nleftarrow' , '↚'],
841 \ ['nLeftarrow' , '⇍'],
842 \ ['nLeftrightarrow', '⇎'],
843 \ ['nleq' , '≰'],
844 \ ['nleqq' , '≰'],
845 \ ['nless' , '≮'],
846 \ ['nmid' , '∤'],
847 \ ['notin' , '∉'],
848 \ ['nprec' , '⊀'],
849 \ ['nrightarrow' , '↛'],
850 \ ['nRightarrow' , '⇏'],
851 \ ['nsim' , '≁'],
852 \ ['nsucc' , '⊁'],
853 \ ['ntriangleleft' , '⋪'],
854 \ ['ntrianglelefteq', '⋬'],
855 \ ['ntriangleright' , '⋫'],
856 \ ['ntrianglerighteq', '⋭'],
857 \ ['nvdash' , '⊬'],
858 \ ['nvDash' , '⊭'],
859 \ ['nVdash' , '⊮'],
860 \ ['nwarrow' , '↖'],
861 \ ['odot' , '⊙'],
862 \ ['oint' , '∮'],
863 \ ['ominus' , '⊖'],
864 \ ['oplus' , '⊕'],
865 \ ['oslash' , '⊘'],
866 \ ['otimes' , '⊗'],
867 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200868 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100869 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 \ ['partial' , '∂'],
871 \ ['perp' , '⊥'],
872 \ ['pitchfork' , '⋔'],
873 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200874 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100875 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200876 \ ['preccurlyeq' , '≼'],
877 \ ['preceq' , '⪯'],
878 \ ['precnapprox' , '⪹'],
879 \ ['precneqq' , '⪵'],
880 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200881 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200882 \ ['prod' , '∏'],
883 \ ['propto' , '∝'],
884 \ ['rceil' , '⌉'],
885 \ ['Re' , 'ℜ'],
886 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200887 \ ['right)' , ')'],
888 \ ['right]' , ']'],
889 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100890 \ ['rightarrow' , '→'],
891 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100892 \ ['rightarrowtail' , '↣'],
893 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200894 \ ['rightsquigarrow', '↝'],
895 \ ['rightthreetimes', '⋌'],
896 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200897 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200898 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200899 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200900 \ ['searrow' , '↘'],
901 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200902 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100904 \ ['simeq' , '⋍'],
905 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200906 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200907 \ ['sphericalangle' , '∢'],
908 \ ['sqcap' , '⊓'],
909 \ ['sqcup' , '⊔'],
910 \ ['sqsubset' , '⊏'],
911 \ ['sqsubseteq' , '⊑'],
912 \ ['sqsupset' , '⊐'],
913 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100914 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200915 \ ['subset' , '⊂'],
916 \ ['Subset' , '⋐'],
917 \ ['subseteq' , '⊆'],
918 \ ['subseteqq' , '⫅'],
919 \ ['subsetneq' , '⊊'],
920 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200921 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100922 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200923 \ ['succcurlyeq' , '≽'],
924 \ ['succeq' , '⪰'],
925 \ ['succnapprox' , '⪺'],
926 \ ['succneqq' , '⪶'],
927 \ ['succsim' , '≿'],
928 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100929 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200930 \ ['Supset' , '⋑'],
931 \ ['supseteq' , '⊇'],
932 \ ['supseteqq' , '⫆'],
933 \ ['supsetneq' , '⊋'],
934 \ ['supsetneqq' , '⫌'],
935 \ ['surd' , '√'],
936 \ ['swarrow' , '↙'],
937 \ ['therefore' , '∴'],
938 \ ['times' , '×'],
939 \ ['to' , '→'],
940 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200941 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200942 \ ['triangleleft' , '⊲'],
943 \ ['trianglelefteq' , '⊴'],
944 \ ['triangleq' , '≜'],
945 \ ['triangleright' , '⊳'],
946 \ ['trianglerighteq', '⊵'],
947 \ ['twoheadleftarrow', '↞'],
948 \ ['twoheadrightarrow', '↠'],
949 \ ['uparrow' , '↑'],
950 \ ['Uparrow' , '⇑'],
951 \ ['updownarrow' , '↕'],
952 \ ['Updownarrow' , '⇕'],
953 \ ['varnothing' , '∅'],
954 \ ['vartriangle' , '∆'],
955 \ ['vdash' , '⊢'],
956 \ ['vDash' , '⊨'],
957 \ ['Vdash' , '⊩'],
958 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200959 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100960 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200961 \ ['Vvdash' , '⊪'],
962 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200963 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200964 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100965" \ ['jmath' , 'X']
966" \ ['uminus' , 'X']
967" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200968 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100969 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100970 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
971 else
972 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
973 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200974 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200975
976 if &ambw == "double"
977 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
978 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
979 else
980 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
981 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
982 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200983
984 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
985 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
986 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
987 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
988 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
989 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
990 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
991 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
992 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
993 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
994 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
995 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
996 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
997 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
998 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
999 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
1000 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
1001 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
1002 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
1003 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +01001004" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001005 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001006
1007 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001008 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001009 fun! s:Greek(group,pat,cchar)
1010 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1011 endfun
1012 call s:Greek('texGreek','\\alpha\>' ,'α')
1013 call s:Greek('texGreek','\\beta\>' ,'β')
1014 call s:Greek('texGreek','\\gamma\>' ,'γ')
1015 call s:Greek('texGreek','\\delta\>' ,'δ')
1016 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1017 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1018 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1019 call s:Greek('texGreek','\\eta\>' ,'η')
1020 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001021 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001022 call s:Greek('texGreek','\\kappa\>' ,'κ')
1023 call s:Greek('texGreek','\\lambda\>' ,'λ')
1024 call s:Greek('texGreek','\\mu\>' ,'μ')
1025 call s:Greek('texGreek','\\nu\>' ,'ν')
1026 call s:Greek('texGreek','\\xi\>' ,'ξ')
1027 call s:Greek('texGreek','\\pi\>' ,'π')
1028 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1029 call s:Greek('texGreek','\\rho\>' ,'ρ')
1030 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1031 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001032 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001033 call s:Greek('texGreek','\\tau\>' ,'τ')
1034 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001035 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1036 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001037 call s:Greek('texGreek','\\chi\>' ,'χ')
1038 call s:Greek('texGreek','\\psi\>' ,'ψ')
1039 call s:Greek('texGreek','\\omega\>' ,'ω')
1040 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1041 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1042 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1043 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1044 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1045 call s:Greek('texGreek','\\Pi\>' ,'Π')
1046 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1047 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1048 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1049 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1050 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1051 delfun s:Greek
1052 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001053
1054 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001055 if s:tex_conceal =~# 's'
1056 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001057 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1058 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1059 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001060 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001061 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001062 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001063" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1064 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001065 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001066 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001067 endfun
1068 call s:SuperSub('texSuperscript','\^','0','⁰')
1069 call s:SuperSub('texSuperscript','\^','1','¹')
1070 call s:SuperSub('texSuperscript','\^','2','²')
1071 call s:SuperSub('texSuperscript','\^','3','³')
1072 call s:SuperSub('texSuperscript','\^','4','⁴')
1073 call s:SuperSub('texSuperscript','\^','5','⁵')
1074 call s:SuperSub('texSuperscript','\^','6','⁶')
1075 call s:SuperSub('texSuperscript','\^','7','⁷')
1076 call s:SuperSub('texSuperscript','\^','8','⁸')
1077 call s:SuperSub('texSuperscript','\^','9','⁹')
1078 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1079 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1080 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1081 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1082 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1083 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1084 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1085 call s:SuperSub('texSuperscript','\^','h','ʰ')
1086 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1087 call s:SuperSub('texSuperscript','\^','j','ʲ')
1088 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1089 call s:SuperSub('texSuperscript','\^','l','ˡ')
1090 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1091 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1092 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1093 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1094 call s:SuperSub('texSuperscript','\^','r','ʳ')
1095 call s:SuperSub('texSuperscript','\^','s','ˢ')
1096 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1097 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1098 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1099 call s:SuperSub('texSuperscript','\^','w','ʷ')
1100 call s:SuperSub('texSuperscript','\^','x','ˣ')
1101 call s:SuperSub('texSuperscript','\^','y','ʸ')
1102 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1103 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1104 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1105 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1106 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1107 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1108 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1109 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1110 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1111 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1112 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1113 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1114 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1115 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1116 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1117 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1118 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1119 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1120 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001121 call s:SuperSub('texSuperscript','\^',',','︐')
1122 call s:SuperSub('texSuperscript','\^',':','︓')
1123 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001124 call s:SuperSub('texSuperscript','\^','+','⁺')
1125 call s:SuperSub('texSuperscript','\^','-','⁻')
1126 call s:SuperSub('texSuperscript','\^','<','˂')
1127 call s:SuperSub('texSuperscript','\^','>','˃')
1128 call s:SuperSub('texSuperscript','\^','/','ˊ')
1129 call s:SuperSub('texSuperscript','\^','(','⁽')
1130 call s:SuperSub('texSuperscript','\^',')','⁾')
1131 call s:SuperSub('texSuperscript','\^','\.','˙')
1132 call s:SuperSub('texSuperscript','\^','=','˭')
1133 call s:SuperSub('texSubscript','_','0','₀')
1134 call s:SuperSub('texSubscript','_','1','₁')
1135 call s:SuperSub('texSubscript','_','2','₂')
1136 call s:SuperSub('texSubscript','_','3','₃')
1137 call s:SuperSub('texSubscript','_','4','₄')
1138 call s:SuperSub('texSubscript','_','5','₅')
1139 call s:SuperSub('texSubscript','_','6','₆')
1140 call s:SuperSub('texSubscript','_','7','₇')
1141 call s:SuperSub('texSubscript','_','8','₈')
1142 call s:SuperSub('texSubscript','_','9','₉')
1143 call s:SuperSub('texSubscript','_','a','ₐ')
1144 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001145 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001146 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001147 call s:SuperSub('texSubscript','_','j','ⱼ')
1148 call s:SuperSub('texSubscript','_','k','ₖ')
1149 call s:SuperSub('texSubscript','_','l','ₗ')
1150 call s:SuperSub('texSubscript','_','m','ₘ')
1151 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001152 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001153 call s:SuperSub('texSubscript','_','p','ₚ')
1154 call s:SuperSub('texSubscript','_','r','ᵣ')
1155 call s:SuperSub('texSubscript','_','s','ₛ')
1156 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001157 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001158 call s:SuperSub('texSubscript','_','v','ᵥ')
1159 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001160 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001161 call s:SuperSub('texSubscript','_','+','₊')
1162 call s:SuperSub('texSubscript','_','-','₋')
1163 call s:SuperSub('texSubscript','_','/','ˏ')
1164 call s:SuperSub('texSubscript','_','(','₍')
1165 call s:SuperSub('texSubscript','_',')','₎')
1166 call s:SuperSub('texSubscript','_','\.','‸')
1167 call s:SuperSub('texSubscript','_','r','ᵣ')
1168 call s:SuperSub('texSubscript','_','v','ᵥ')
1169 call s:SuperSub('texSubscript','_','x','ₓ')
1170 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1171 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1172 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1173 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1174 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001175
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001176 delfun s:SuperSub
1177 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001178
1179 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001180 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001181 if b:tex_stylish
1182 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1183 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1184 else
1185 fun! s:Accents(chr,...)
1186 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001187 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001188 if i > a:0
1189 break
1190 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001191 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001192 let i= i + 1
1193 continue
1194 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001195 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001196 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1197 else
1198 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1199 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001200 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001201 endfor
1202 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001203 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1204 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1205 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1206 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1207 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1208 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1209 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1210 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1211 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1212 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1213 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1214 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1215 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1216 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1217 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1218 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1219 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1220 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1221 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1222 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1223 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1224 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1225 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1226 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1227 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1228 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1229 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1230 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1231 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1232 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1233 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1234 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1235 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1236 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1237 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1238 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1239 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1240 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001241 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1242 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001243 delfun s:Accents
1244 syn match texAccent '\\aa\>' conceal cchar=å
1245 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001246 syn match texAccent '\\o\>' conceal cchar=ø
1247 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001248 syn match texLigature '\\AE\>' conceal cchar=Æ
1249 syn match texLigature '\\ae\>' conceal cchar=æ
1250 syn match texLigature '\\oe\>' conceal cchar=œ
1251 syn match texLigature '\\OE\>' conceal cchar=Œ
1252 syn match texLigature '\\ss\>' conceal cchar=ß
1253 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001254 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001255endif
1256
1257" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001258" LaTeX synchronization: {{{1
1259syn sync maxlines=200
1260syn sync minlines=50
1261
1262syn sync match texSyncStop groupthere NONE "%stopzone\>"
1263
1264" Synchronization: {{{1
1265" The $..$ and $$..$$ make for impossible sync patterns
1266" (one can't tell if a "$$" starts or stops a math zone by itself)
1267" The following grouptheres coupled with minlines above
1268" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001269if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001270 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1271 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1272 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1273 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1274 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1275 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1276 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1277 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1278endif
1279
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001280" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001281" Highlighting: {{{1
1282if did_tex_syntax_inits == 1
1283 let did_tex_syntax_inits= 2
1284 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001285 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001286 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001287 HiLink texBadMath texError
1288 HiLink texMathDelimBad texError
1289 HiLink texMathError texError
1290 if !b:tex_stylish
1291 HiLink texOnlyMath texError
1292 endif
1293 endif
1294 HiLink texError Error
1295 endif
1296
Bram Moolenaard38b0552012-04-25 19:07:41 +02001297 hi texBoldStyle gui=bold cterm=bold
1298 hi texItalStyle gui=italic cterm=italic
1299 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1300 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001301 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001302 HiLink texDefCmd texDef
1303 HiLink texDefName texDef
1304 HiLink texDocType texCmdName
1305 HiLink texDocTypeArgs texCmdArgs
1306 HiLink texInputFileOpt texCmdArgs
1307 HiLink texInputCurlies texDelimiter
1308 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001309 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001310 HiLink texMathDelimSet1 texMathDelim
1311 HiLink texMathDelimSet2 texMathDelim
1312 HiLink texMathDelimKey texMathDelim
1313 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001314 HiLink texAccent texStatement
1315 HiLink texGreek texStatement
1316 HiLink texSuperscript texStatement
1317 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001318 HiLink texSuperscripts texSuperscript
1319 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001320 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001321 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001322 HiLink texMathZoneW texMath
1323 HiLink texMathZoneX texMath
1324 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001325 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326 HiLink texMathZoneZ texMath
1327 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001328 HiLink texBeginEnd texCmdName
1329 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001330 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001331 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332 HiLink texTypeSize texType
1333 HiLink texTypeStyle texType
1334
1335 " Basic TeX highlighting groups
1336 HiLink texCmdArgs Number
1337 HiLink texCmdName Statement
1338 HiLink texComment Comment
1339 HiLink texDef Statement
1340 HiLink texDefParm Special
1341 HiLink texDelimiter Delimiter
1342 HiLink texInput Special
1343 HiLink texInputFile Special
1344 HiLink texLength Number
1345 HiLink texMath Special
1346 HiLink texMathDelim Statement
1347 HiLink texMathOper Operator
1348 HiLink texNewCmd Statement
1349 HiLink texNewEnv Statement
1350 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001351 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001352 HiLink texSection PreCondit
1353 HiLink texSpaceCodeChar Special
1354 HiLink texSpecialChar SpecialChar
1355 HiLink texStatement Statement
1356 HiLink texString String
1357 HiLink texTodo Todo
1358 HiLink texType Type
1359 HiLink texZone PreCondit
1360
1361 delcommand HiLink
1362endif
1363
Bram Moolenaar15146672011-10-20 22:22:38 +02001364" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001365delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001366unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001367let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001368let &cpo = s:keepcpo
1369unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001370" vim: ts=8 fdm=marker