blob: f70476687734f16626d1501f675568c7e47d47f0 [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 Moolenaar83d1b192015-04-13 14:22:40 +02004" Last Change: Apr 02, 2015
5" Version: 84
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 Moolenaarac7bd632013-03-19 11:35:58 +010065if exists("g:tex_no_error") && g:tex_no_error
66 let s:tex_no_error= 1
Bram Moolenaare2719092015-01-10 15:09:25 +010067else
68 let s:tex_no_error= 0
Bram Moolenaarac7bd632013-03-19 11:35:58 +010069endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020070
71" by default, enable all region-based highlighting
72let s:tex_fast= "bcmMprsSvV"
73if exists("g:tex_fast")
74 if type(g:tex_fast) != 1
75 " g:tex_fast exists and is not a string, so
76 " turn off all optional region-based highighting
77 let s:tex_fast= ""
78 else
79 let s:tex_fast= g:tex_fast
80 endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020081else
82 let s:tex_fast= "bcmMprsSvV"
Bram Moolenaar071d4272004-06-13 20:20:40 +000083endif
84
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020085" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020086" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020087if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020088 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020089else
90 let s:tex_conceal= g:tex_conceal
91endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020092if !exists("g:tex_superscripts")
93 let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
94endif
95if !exists("g:tex_subscripts")
96 let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
97endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020098
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000099" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100" The user may override the normal determination by setting
101" g:tex_stylish to 1 (for "*.sty" mode)
102" or to 0 else (normal "*.tex" mode)
103" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +0100104let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105if exists("g:tex_stylish")
106 let b:tex_stylish= g:tex_stylish
107elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100108 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109 let b:tex_stylish= 1
110 else
111 let b:tex_stylish= 0
112 endif
113endif
114
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000115" handle folding {{{1
116if !exists("g:tex_fold_enabled")
117 let g:tex_fold_enabled= 0
118elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarab194812005-09-14 21:40:12 +0000119 let g:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000120 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
121endif
122if g:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200123 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000124endif
125
Bram Moolenaaradc21822011-04-01 18:03:16 +0200126" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200128" One may override this iskeyword setting by providing
129" g:tex_isk
130if exists("g:tex_isk")
131 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200133 setlocal isk=48-57,a-z,A-Z,192-255
134endif
135if b:tex_stylish
136 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200138if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
139 let g:tex_comment_nospell= 1
140endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141
142" Clusters: {{{1
143" --------
Bram Moolenaard38b0552012-04-25 19:07:41 +0200144syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
Bram Moolenaare2719092015-01-10 15:09:25 +0100145if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146 syn cluster texCmdGroup add=texMathError
147endif
148syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaard38b0552012-04-25 19:07:41 +0200149syn 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
150syn 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
151syn 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
Bram Moolenaard960d762011-09-21 19:22:10 +0200152if !exists("g:tex_nospell") || !g:tex_nospell
153 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
154 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
155else
156 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
157 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
158endif
Bram Moolenaara6878372014-03-22 21:02:50 +0100159syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000160syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100161if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
163 syn cluster texMatchGroup add=@texMathZones
164 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
165 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
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200166 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaare2719092015-01-10 15:09:25 +0100167 if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168 syn cluster texMathMatchGroup add=texMathError
169 syn cluster texMathZoneGroup add=texMathError
170 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000171 syn cluster texMathZoneGroup add=@NoSpell
172 " following used in the \part \chapter \section \subsection \subsubsection
173 " \paragraph \subparagraph \author \title highlighting
174 syn cluster texDocGroup contains=texPartZone,@texPartGroup
175 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
176 syn cluster texChapterGroup contains=texSectionZone,texParaZone
177 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
178 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
179 syn cluster texSubSubSectionGroup contains=texParaZone
180 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200181 if has("conceal") && &enc == 'utf-8'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200182 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
183 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200184 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185endif
186
187" Try to flag {} and () mismatches: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200188if s:tex_fast =~ 'm'
Bram Moolenaare2719092015-01-10 15:09:25 +0100189 if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100190 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
191 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell
192 else
193 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
194 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
195 endif
196 if !exists("g:tex_nospell") || !g:tex_nospell
197 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
198 else
199 syn region texParen start="(" end=")" contains=@texMatchGroup
200 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201endif
Bram Moolenaare2719092015-01-10 15:09:25 +0100202if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203 syn match texError "[}\])]"
204endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200205if s:tex_fast =~ 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100206 if !exists("g:tex_no_math")
207 if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100208 syn match texMathError "}" contained
209 endif
210 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
211 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212endif
213
214" TeX/LaTeX keywords: {{{1
215" Instead of trying to be All Knowing, I just match \..alphameric..
216" Note that *.tex files may not have "@" in their \commands
217if exists("g:tex_tex") || b:tex_stylish
218 syn match texStatement "\\[a-zA-Z@]\+"
219else
220 syn match texStatement "\\\a\+"
Bram Moolenaare2719092015-01-10 15:09:25 +0100221 if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222 syn match texError "\\\a*@[a-zA-Z@]*"
223 endif
224endif
225
226" TeX/LaTeX delimiters: {{{1
227syn match texDelimiter "&"
228syn match texDelimiter "\\\\"
Bram Moolenaard960d762011-09-21 19:22:10 +0200229syn match texDelimiter "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000230
231" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200232syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000233
234" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
235if b:tex_stylish
236 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
237 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
238else
239 syn match texAccent "\\[bcdvuH]\A"me=e-1
240 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
241endif
242syn match texAccent "\\[bcdvuH]$"
243syn match texAccent +\\[=^.\~"`']+
244syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
245syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
246
247" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200248syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200249if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100250 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
251 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
252endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253
254" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200255syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200256if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100257 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
258endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000260" Preamble syntax-based folding support: {{{1
261if g:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200262 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000263endif
264
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265" TeX input: {{{1
266syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100267syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
269syn match texInputCurlies "[{}]" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200270if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100271 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
272endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273
274" Type Styles (LaTeX 2.09): {{{1
275syn match texTypeStyle "\\rm\>"
276syn match texTypeStyle "\\em\>"
277syn match texTypeStyle "\\bf\>"
278syn match texTypeStyle "\\it\>"
279syn match texTypeStyle "\\sl\>"
280syn match texTypeStyle "\\sf\>"
281syn match texTypeStyle "\\sc\>"
282syn match texTypeStyle "\\tt\>"
283
284" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200285if s:tex_conceal !~ 'b'
286 syn match texTypeStyle "\\textbf\>"
287 syn match texTypeStyle "\\textit\>"
288endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000289syn match texTypeStyle "\\textmd\>"
290syn match texTypeStyle "\\textrm\>"
291syn match texTypeStyle "\\textsc\>"
292syn match texTypeStyle "\\textsf\>"
293syn match texTypeStyle "\\textsl\>"
294syn match texTypeStyle "\\texttt\>"
295syn match texTypeStyle "\\textup\>"
296syn match texTypeStyle "\\emph\>"
297
298syn match texTypeStyle "\\mathbb\>"
299syn match texTypeStyle "\\mathbf\>"
300syn match texTypeStyle "\\mathcal\>"
301syn match texTypeStyle "\\mathfrak\>"
302syn match texTypeStyle "\\mathit\>"
303syn match texTypeStyle "\\mathnormal\>"
304syn match texTypeStyle "\\mathrm\>"
305syn match texTypeStyle "\\mathsf\>"
306syn match texTypeStyle "\\mathtt\>"
307
308syn match texTypeStyle "\\rmfamily\>"
309syn match texTypeStyle "\\sffamily\>"
310syn match texTypeStyle "\\ttfamily\>"
311
312syn match texTypeStyle "\\itshape\>"
313syn match texTypeStyle "\\scshape\>"
314syn match texTypeStyle "\\slshape\>"
315syn match texTypeStyle "\\upshape\>"
316
317syn match texTypeStyle "\\bfseries\>"
318syn match texTypeStyle "\\mdseries\>"
319
320" Some type sizes: {{{1
321syn match texTypeSize "\\tiny\>"
322syn match texTypeSize "\\scriptsize\>"
323syn match texTypeSize "\\footnotesize\>"
324syn match texTypeSize "\\small\>"
325syn match texTypeSize "\\normalsize\>"
326syn match texTypeSize "\\large\>"
327syn match texTypeSize "\\Large\>"
328syn match texTypeSize "\\LARGE\>"
329syn match texTypeSize "\\huge\>"
330syn match texTypeSize "\\Huge\>"
331
332" Spacecodes (TeX'isms): {{{1
333" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
334syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
335syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
336
337" Sections, subsections, etc: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200338if s:tex_fast =~ 'p'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100339 if !exists("g:tex_nospell") || !g:tex_nospell
340 if g:tex_fold_enabled && has("folding")
Bram Moolenaar6e932462014-09-09 18:48:09 +0200341 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100342 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell
343 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell
344 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell
Bram Moolenaar6e932462014-09-09 18:48:09 +0200345 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100346 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
347 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup,@Spell
348 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@Spell
349 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
350 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
351 else
Bram Moolenaar6e932462014-09-09 18:48:09 +0200352 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100353 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
354 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
355 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
Bram Moolenaar6e932462014-09-09 18:48:09 +0200356 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100357 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
358 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
359 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
360 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
361 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
Bram Moolenaare2719092015-01-10 15:09:25 +0100362 syn region texSpellZone matchgroup=texSpellZone start="%spellzone_start" end="%spellzone_end" contains=@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100363 endif
364 else
365 if g:tex_fold_enabled && has("folding")
Bram Moolenaar6e932462014-09-09 18:48:09 +0200366 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100367 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup
368 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup
369 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup
Bram Moolenaar6e932462014-09-09 18:48:09 +0200370 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100371 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup
372 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup
373 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup
374 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup
375 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup
376 else
Bram Moolenaar6e932462014-09-09 18:48:09 +0200377 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100378 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
379 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
380 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
Bram Moolenaar6e932462014-09-09 18:48:09 +0200381 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100382 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
383 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
384 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
385 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
386 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
387 endif
388 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000389endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390
Bram Moolenaard38b0552012-04-25 19:07:41 +0200391" particular support for bold and italic {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200392if s:tex_fast =~ 'b'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100393 if s:tex_conceal =~ 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200394 if !exists("g:tex_nospell") || !g:tex_nospell
395 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texBoldGroup,@Spell
396 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texItalGroup,@Spell
397 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texItalGroup,@Spell
398 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texBoldGroup,@Spell
399 else
400 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texBoldGroup
401 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texItalGroup
402 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texItalGroup
403 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*\ze{" matchgroup=Delimiter end="}" concealends contains=@texBoldGroup
404 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100405 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200406endif
407
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408" Bad Math (mismatched): {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100409if !exists("g:tex_no_math") && (!exists("s:tex_no_error") || !s:tex_no_error)
Bram Moolenaard960d762011-09-21 19:22:10 +0200410 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
412 syn match texBadMath "\\[\])]"
413endif
414
415" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100416if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000417 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000418 " Starred forms are created if starform is true. Starred
419 " forms have syntax group and synchronization groups with a
420 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
421 fun! TexNewMathZone(sfx,mathzone,starform)
422 let grpname = "texMathZone".a:sfx
423 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000424 if g:tex_fold_enabled
425 let foldcmd= " fold"
426 else
427 let foldcmd= ""
428 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000429 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200430 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100431 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
432 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
433 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
434 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100435 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000436 if a:starform
437 let grpname = "texMathZone".a:sfx.'S'
438 let syncname = "texSyncMathZone".a:sfx.'S'
439 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200440 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100441 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
442 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
443 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
444 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100445 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000446 endif
447 endfun
448
449 " Standard Math Zones: {{{2
450 call TexNewMathZone("A","align",1)
451 call TexNewMathZone("B","alignat",1)
452 call TexNewMathZone("C","displaymath",1)
453 call TexNewMathZone("D","eqnarray",1)
454 call TexNewMathZone("E","equation",1)
455 call TexNewMathZone("F","flalign",1)
456 call TexNewMathZone("G","gather",1)
457 call TexNewMathZone("H","math",1)
458 call TexNewMathZone("I","multline",1)
Bram Moolenaard960d762011-09-21 19:22:10 +0200459 call TexNewMathZone("J","subequations",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000460 call TexNewMathZone("K","xalignat",1)
461 call TexNewMathZone("L","xxalignat",0)
462
463 " Inline Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200464 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100465 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
466 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
467 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
468 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
469 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" concealends keepend contains=@texMathZoneGroup
470 else
471 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
472 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
473 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
474 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
475 endif
476 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200477 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000478
479 syn match texMathOper "[_^=]" contained
480
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200481 " Text Inside Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200482 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100483 if !exists("g:tex_nospell") || !g:tex_nospell
484 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
485 else
486 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
487 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200488 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200489
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490 " \left..something.. and \right..something.. support: {{{2
491 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200492 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
493 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
494 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200495 let s:texMathDelimList=[
496 \ ['<' , '<'] ,
497 \ ['>' , '>'] ,
498 \ ['(' , '('] ,
499 \ [')' , ')'] ,
500 \ ['\[' , '['] ,
501 \ [']' , ']'] ,
502 \ ['\\{' , '{'] ,
503 \ ['\\}' , '}'] ,
504 \ ['|' , '|'] ,
505 \ ['\\|' , '‖'] ,
506 \ ['\\backslash' , '\'] ,
507 \ ['\\downarrow' , '↓'] ,
508 \ ['\\Downarrow' , '⇓'] ,
509 \ ['\\langle' , '<'] ,
510 \ ['\\lbrace' , '['] ,
511 \ ['\\lceil' , '⌈'] ,
512 \ ['\\lfloor' , '⌊'] ,
513 \ ['\\lgroup' , '⌊'] ,
514 \ ['\\lmoustache' , '⎛'] ,
515 \ ['\\rangle' , '>'] ,
516 \ ['\\rbrace' , ']'] ,
517 \ ['\\rceil' , '⌉'] ,
518 \ ['\\rfloor' , '⌋'] ,
519 \ ['\\rgroup' , '⌋'] ,
520 \ ['\\rmoustache' , '⎞'] ,
521 \ ['\\uparrow' , '↑'] ,
522 \ ['\\Uparrow' , '↑'] ,
523 \ ['\\updownarrow', '↕'] ,
524 \ ['\\Updownarrow', '⇕']]
525 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
526 for texmath in s:texMathDelimList
527 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
528 endfor
529
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200530 else
531 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200532 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
533 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
534 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
535 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
536 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
537 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
538 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
539 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200540 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
542 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000543endif
544
545" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
546syn match texSpecialChar "\\[$&%#{}_]"
547if b:tex_stylish
548 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
549else
550 syn match texSpecialChar "\\[SP@]\A"me=e-1
551endif
552syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100553if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000554 syn match texOnlyMath "[_^]"
555endif
556syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200557if s:tex_conceal !~ 'S'
558 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
559 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
560 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
561 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
562 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
563endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000564
565" Comments: {{{1
566" Normal TeX LaTeX : %....
567" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000568if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
569 syn cluster texCommentGroup contains=texTodo,@Spell
570else
571 syn cluster texCommentGroup contains=texTodo,@NoSpell
572endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000573syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000574syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000575syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100576if s:extfname == "dtx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000577 syn match texComment "\^\^A.*$" contains=@texCommentGroup
578 syn match texComment "^%\+" contains=@texCommentGroup
579else
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000580 if g:tex_fold_enabled
581 " allows syntax-folding of 2 or more contiguous comment lines
582 " single-line comments are not folded
Bram Moolenaard38b0552012-04-25 19:07:41 +0200583 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200584 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100585 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200586 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" fold contains=@texFoldGroup,@NoSpell
587 syn region texSpellZone matchgroup=texComment start="%\s*spellzone_start" end="%\s*spellzone_end" fold contains=@Spell,@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100588 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000589 else
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200590 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200591 if s:tex_fast =~ 'c'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200592 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
593 syn region texSpellZone matchgroup=texComment start="%\s*spellzone_start" end="%\s*spellzone_end" contains=@Spell,@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100594 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000595 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000596endif
597
598" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200599" will appropriately terminate.
600" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200601if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100602 if exists("g:tex_verbspell") && g:tex_verbspell
603 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
604 " listings package:
605 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
606 if version < 600
607 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
608 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200609 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100610 if b:tex_stylish
611 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
612 else
613 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
614 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200615 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100616 else
617 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
618 if version < 600
619 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
620 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200621 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100622 if b:tex_stylish
623 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
624 else
625 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
626 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200627 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100628 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000629endif
630
631" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200632if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100633 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
634 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
635 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
636 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
637 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
638 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
639 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200640 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100641endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200642syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000643
644" Handle newcommand, newenvironment : {{{1
645syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200646if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100647 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
648 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
649 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
650endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000651syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200652if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100653 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
654 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
655 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
656endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000657
658" Definitions/Commands: {{{1
659syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
660if b:tex_stylish
661 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
662 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
663else
664 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
665 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
666endif
667syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
668syn match texDefParm contained "#\d\+"
669
670" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000671syn 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 +0000672
673" TeX String Delimiters: {{{1
674syn match texString "\(``\|''\|,,\)"
675
Bram Moolenaar5c736222010-01-06 20:54:52 +0100676" makeatletter -- makeatother sections
Bram Moolenaare2719092015-01-10 15:09:25 +0100677if !exists("s:tex_no_error") || !s:tex_no_error
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200678 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100679 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
680 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100681 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200682 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100683 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
684 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
685 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100686endif
687
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200688" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200689if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200690
691 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200692 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200693 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200694 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200695 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200696 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100697 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200698 \ ['angle' , '∠'],
699 \ ['approx' , '≈'],
700 \ ['ast' , '∗'],
701 \ ['asymp' , '≍'],
702 \ ['backepsilon' , '∍'],
703 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200704 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200705 \ ['barwedge' , '⊼'],
706 \ ['because' , '∵'],
707 \ ['between' , '≬'],
708 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100709 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200710 \ ['bigcup' , '∪'],
711 \ ['bigodot' , '⊙'],
712 \ ['bigoplus' , '⊕'],
713 \ ['bigotimes' , '⊗'],
714 \ ['bigsqcup' , '⊔'],
715 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100716 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['bigvee' , '⋁'],
718 \ ['bigwedge' , '⋀'],
719 \ ['blacksquare' , '∎'],
720 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100721 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200722 \ ['boxdot' , '⊡'],
723 \ ['boxminus' , '⊟'],
724 \ ['boxplus' , '⊞'],
725 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100726 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['bumpeq' , '≏'],
728 \ ['Bumpeq' , '≎'],
729 \ ['cap' , '∩'],
730 \ ['Cap' , '⋒'],
731 \ ['cdot' , '·'],
732 \ ['cdots' , '⋯'],
733 \ ['circ' , '∘'],
734 \ ['circeq' , '≗'],
735 \ ['circlearrowleft', '↺'],
736 \ ['circlearrowright', '↻'],
737 \ ['circledast' , '⊛'],
738 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200739 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200740 \ ['complement' , '∁'],
741 \ ['cong' , '≅'],
742 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200743 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['cup' , '∪'],
745 \ ['Cup' , '⋓'],
746 \ ['curlyeqprec' , '⋞'],
747 \ ['curlyeqsucc' , '⋟'],
748 \ ['curlyvee' , '⋎'],
749 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100750 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200751 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100752 \ ['ddagger' , '‡'],
753 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200754 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200755 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200756 \ ['div' , '÷'],
757 \ ['doteq' , '≐'],
758 \ ['doteqdot' , '≑'],
759 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100760 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200761 \ ['dotsb' , '⋯'],
762 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200763 \ ['dotsi' , '⋯'],
764 \ ['dotso' , '…'],
765 \ ['doublebarwedge' , '⩞'],
766 \ ['downarrow' , '↓'],
767 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100768 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['emptyset' , '∅'],
770 \ ['eqcirc' , '≖'],
771 \ ['eqsim' , '≂'],
772 \ ['eqslantgtr' , '⪖'],
773 \ ['eqslantless' , '⪕'],
774 \ ['equiv' , '≡'],
775 \ ['exists' , '∃'],
776 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200777 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200778 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100779 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200780 \ ['ge' , '≥'],
781 \ ['geq' , '≥'],
782 \ ['geqq' , '≧'],
783 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100784 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['gneqq' , '≩'],
786 \ ['gtrdot' , '⋗'],
787 \ ['gtreqless' , '⋛'],
788 \ ['gtrless' , '≷'],
789 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200790 \ ['hbar' , 'ℏ'],
791 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200792 \ ['hookleftarrow' , '↩'],
793 \ ['hookrightarrow' , '↪'],
794 \ ['iiint' , '∭'],
795 \ ['iint' , '∬'],
796 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200797 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['in' , '∈'],
799 \ ['infty' , '∞'],
800 \ ['int' , '∫'],
801 \ ['lceil' , '⌈'],
802 \ ['ldots' , '…'],
803 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100804 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200805 \ ['left(' , '('],
806 \ ['left\[' , '['],
807 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100808 \ ['leftarrow' , '←'],
809 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100810 \ ['leftarrowtail' , '↢'],
811 \ ['leftharpoondown', '↽'],
812 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100813 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100814 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['leftrightsquigarrow', '↭'],
816 \ ['leftthreetimes' , '⋋'],
817 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100818 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200819 \ ['leqq' , '≦'],
820 \ ['lessdot' , '⋖'],
821 \ ['lesseqgtr' , '⋚'],
822 \ ['lesssim' , '≲'],
823 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100824 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200825 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200826 \ ['lneqq' , '≨'],
827 \ ['ltimes' , '⋉'],
828 \ ['mapsto' , '↦'],
829 \ ['measuredangle' , '∡'],
830 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100831 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200832 \ ['mp' , '∓'],
833 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200834 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200835 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200836 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100837 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200838 \ ['neg' , '¬'],
839 \ ['neq' , '≠'],
840 \ ['nexists' , '∄'],
841 \ ['ngeq' , '≱'],
842 \ ['ngeqq' , '≱'],
843 \ ['ngtr' , '≯'],
844 \ ['ni' , '∋'],
845 \ ['nleftarrow' , '↚'],
846 \ ['nLeftarrow' , '⇍'],
847 \ ['nLeftrightarrow', '⇎'],
848 \ ['nleq' , '≰'],
849 \ ['nleqq' , '≰'],
850 \ ['nless' , '≮'],
851 \ ['nmid' , '∤'],
852 \ ['notin' , '∉'],
853 \ ['nprec' , '⊀'],
854 \ ['nrightarrow' , '↛'],
855 \ ['nRightarrow' , '⇏'],
856 \ ['nsim' , '≁'],
857 \ ['nsucc' , '⊁'],
858 \ ['ntriangleleft' , '⋪'],
859 \ ['ntrianglelefteq', '⋬'],
860 \ ['ntriangleright' , '⋫'],
861 \ ['ntrianglerighteq', '⋭'],
862 \ ['nvdash' , '⊬'],
863 \ ['nvDash' , '⊭'],
864 \ ['nVdash' , '⊮'],
865 \ ['nwarrow' , '↖'],
866 \ ['odot' , '⊙'],
867 \ ['oint' , '∮'],
868 \ ['ominus' , '⊖'],
869 \ ['oplus' , '⊕'],
870 \ ['oslash' , '⊘'],
871 \ ['otimes' , '⊗'],
872 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200873 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100874 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200875 \ ['partial' , '∂'],
876 \ ['perp' , '⊥'],
877 \ ['pitchfork' , '⋔'],
878 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200879 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100880 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200881 \ ['preccurlyeq' , '≼'],
882 \ ['preceq' , '⪯'],
883 \ ['precnapprox' , '⪹'],
884 \ ['precneqq' , '⪵'],
885 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200886 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200887 \ ['prod' , '∏'],
888 \ ['propto' , '∝'],
889 \ ['rceil' , '⌉'],
890 \ ['Re' , 'ℜ'],
891 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200892 \ ['right)' , ')'],
893 \ ['right]' , ']'],
894 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100895 \ ['rightarrow' , '→'],
896 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100897 \ ['rightarrowtail' , '↣'],
898 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200899 \ ['rightsquigarrow', '↝'],
900 \ ['rightthreetimes', '⋌'],
901 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200902 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200904 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200905 \ ['searrow' , '↘'],
906 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200907 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200908 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100909 \ ['simeq' , '⋍'],
910 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200911 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200912 \ ['sphericalangle' , '∢'],
913 \ ['sqcap' , '⊓'],
914 \ ['sqcup' , '⊔'],
915 \ ['sqsubset' , '⊏'],
916 \ ['sqsubseteq' , '⊑'],
917 \ ['sqsupset' , '⊐'],
918 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100919 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200920 \ ['subset' , '⊂'],
921 \ ['Subset' , '⋐'],
922 \ ['subseteq' , '⊆'],
923 \ ['subseteqq' , '⫅'],
924 \ ['subsetneq' , '⊊'],
925 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200926 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100927 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200928 \ ['succcurlyeq' , '≽'],
929 \ ['succeq' , '⪰'],
930 \ ['succnapprox' , '⪺'],
931 \ ['succneqq' , '⪶'],
932 \ ['succsim' , '≿'],
933 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100934 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200935 \ ['Supset' , '⋑'],
936 \ ['supseteq' , '⊇'],
937 \ ['supseteqq' , '⫆'],
938 \ ['supsetneq' , '⊋'],
939 \ ['supsetneqq' , '⫌'],
940 \ ['surd' , '√'],
941 \ ['swarrow' , '↙'],
942 \ ['therefore' , '∴'],
943 \ ['times' , '×'],
944 \ ['to' , '→'],
945 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200946 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200947 \ ['triangleleft' , '⊲'],
948 \ ['trianglelefteq' , '⊴'],
949 \ ['triangleq' , '≜'],
950 \ ['triangleright' , '⊳'],
951 \ ['trianglerighteq', '⊵'],
952 \ ['twoheadleftarrow', '↞'],
953 \ ['twoheadrightarrow', '↠'],
954 \ ['uparrow' , '↑'],
955 \ ['Uparrow' , '⇑'],
956 \ ['updownarrow' , '↕'],
957 \ ['Updownarrow' , '⇕'],
958 \ ['varnothing' , '∅'],
959 \ ['vartriangle' , '∆'],
960 \ ['vdash' , '⊢'],
961 \ ['vDash' , '⊨'],
962 \ ['Vdash' , '⊩'],
963 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200964 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100965 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200966 \ ['Vvdash' , '⊪'],
967 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200968 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200969 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100970" \ ['jmath' , 'X']
971" \ ['uminus' , 'X']
972" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200973 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100974 if texmath[0] =~ '\w$'
975 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
976 else
977 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
978 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200979 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200980
981 if &ambw == "double"
982 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
983 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
984 else
985 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
986 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
987 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200988
989 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
990 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
991 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
992 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
993 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
994 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
995 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
996 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
997 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
998 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
999 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
1000 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
1001 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
1002 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
1003 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
1004 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
1005 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
1006 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
1007 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
1008 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +01001009" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001010 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001011
1012 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001013 if s:tex_conceal =~ 'g'
1014 fun! s:Greek(group,pat,cchar)
1015 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1016 endfun
1017 call s:Greek('texGreek','\\alpha\>' ,'α')
1018 call s:Greek('texGreek','\\beta\>' ,'β')
1019 call s:Greek('texGreek','\\gamma\>' ,'γ')
1020 call s:Greek('texGreek','\\delta\>' ,'δ')
1021 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1022 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1023 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1024 call s:Greek('texGreek','\\eta\>' ,'η')
1025 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001026 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001027 call s:Greek('texGreek','\\kappa\>' ,'κ')
1028 call s:Greek('texGreek','\\lambda\>' ,'λ')
1029 call s:Greek('texGreek','\\mu\>' ,'μ')
1030 call s:Greek('texGreek','\\nu\>' ,'ν')
1031 call s:Greek('texGreek','\\xi\>' ,'ξ')
1032 call s:Greek('texGreek','\\pi\>' ,'π')
1033 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1034 call s:Greek('texGreek','\\rho\>' ,'ρ')
1035 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1036 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001037 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001038 call s:Greek('texGreek','\\tau\>' ,'τ')
1039 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001040 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1041 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001042 call s:Greek('texGreek','\\chi\>' ,'χ')
1043 call s:Greek('texGreek','\\psi\>' ,'ψ')
1044 call s:Greek('texGreek','\\omega\>' ,'ω')
1045 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1046 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1047 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1048 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1049 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1050 call s:Greek('texGreek','\\Pi\>' ,'Π')
1051 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1052 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1053 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1054 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1055 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1056 delfun s:Greek
1057 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001058
1059 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001060 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001061 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001062 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1063 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1064 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001065 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001066 if a:pat =~ '^\\' || (a:leader == '\^' && a:pat =~ g:tex_superscripts) || (a:leader == '_' && a:pat =~ g:tex_subscripts)
1067" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1068 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1069 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1070 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001071 endfun
1072 call s:SuperSub('texSuperscript','\^','0','⁰')
1073 call s:SuperSub('texSuperscript','\^','1','¹')
1074 call s:SuperSub('texSuperscript','\^','2','²')
1075 call s:SuperSub('texSuperscript','\^','3','³')
1076 call s:SuperSub('texSuperscript','\^','4','⁴')
1077 call s:SuperSub('texSuperscript','\^','5','⁵')
1078 call s:SuperSub('texSuperscript','\^','6','⁶')
1079 call s:SuperSub('texSuperscript','\^','7','⁷')
1080 call s:SuperSub('texSuperscript','\^','8','⁸')
1081 call s:SuperSub('texSuperscript','\^','9','⁹')
1082 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1083 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1084 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1085 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1086 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1087 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1088 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1089 call s:SuperSub('texSuperscript','\^','h','ʰ')
1090 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1091 call s:SuperSub('texSuperscript','\^','j','ʲ')
1092 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1093 call s:SuperSub('texSuperscript','\^','l','ˡ')
1094 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1095 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1096 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1097 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1098 call s:SuperSub('texSuperscript','\^','r','ʳ')
1099 call s:SuperSub('texSuperscript','\^','s','ˢ')
1100 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1101 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1102 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1103 call s:SuperSub('texSuperscript','\^','w','ʷ')
1104 call s:SuperSub('texSuperscript','\^','x','ˣ')
1105 call s:SuperSub('texSuperscript','\^','y','ʸ')
1106 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1107 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1108 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1109 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1110 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1111 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1112 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1113 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1114 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1115 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1116 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1117 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1118 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1119 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1120 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1121 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1122 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1123 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1124 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001125 call s:SuperSub('texSuperscript','\^',',','︐')
1126 call s:SuperSub('texSuperscript','\^',':','︓')
1127 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001128 call s:SuperSub('texSuperscript','\^','+','⁺')
1129 call s:SuperSub('texSuperscript','\^','-','⁻')
1130 call s:SuperSub('texSuperscript','\^','<','˂')
1131 call s:SuperSub('texSuperscript','\^','>','˃')
1132 call s:SuperSub('texSuperscript','\^','/','ˊ')
1133 call s:SuperSub('texSuperscript','\^','(','⁽')
1134 call s:SuperSub('texSuperscript','\^',')','⁾')
1135 call s:SuperSub('texSuperscript','\^','\.','˙')
1136 call s:SuperSub('texSuperscript','\^','=','˭')
1137 call s:SuperSub('texSubscript','_','0','₀')
1138 call s:SuperSub('texSubscript','_','1','₁')
1139 call s:SuperSub('texSubscript','_','2','₂')
1140 call s:SuperSub('texSubscript','_','3','₃')
1141 call s:SuperSub('texSubscript','_','4','₄')
1142 call s:SuperSub('texSubscript','_','5','₅')
1143 call s:SuperSub('texSubscript','_','6','₆')
1144 call s:SuperSub('texSubscript','_','7','₇')
1145 call s:SuperSub('texSubscript','_','8','₈')
1146 call s:SuperSub('texSubscript','_','9','₉')
1147 call s:SuperSub('texSubscript','_','a','ₐ')
1148 call s:SuperSub('texSubscript','_','e','ₑ')
1149 call s:SuperSub('texSubscript','_','i','ᵢ')
1150 call s:SuperSub('texSubscript','_','o','ₒ')
1151 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001152 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001153 call s:SuperSub('texSubscript','_','+','₊')
1154 call s:SuperSub('texSubscript','_','-','₋')
1155 call s:SuperSub('texSubscript','_','/','ˏ')
1156 call s:SuperSub('texSubscript','_','(','₍')
1157 call s:SuperSub('texSubscript','_',')','₎')
1158 call s:SuperSub('texSubscript','_','\.','‸')
1159 call s:SuperSub('texSubscript','_','r','ᵣ')
1160 call s:SuperSub('texSubscript','_','v','ᵥ')
1161 call s:SuperSub('texSubscript','_','x','ₓ')
1162 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1163 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1164 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1165 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1166 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1167 delfun s:SuperSub
1168 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001169
1170 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001171 if s:tex_conceal =~ 'a'
1172 if b:tex_stylish
1173 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1174 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1175 else
1176 fun! s:Accents(chr,...)
1177 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001178 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001179 if i > a:0
1180 break
1181 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001182 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001183 let i= i + 1
1184 continue
1185 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001186 if accent =~ '\a'
1187 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1188 else
1189 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1190 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001191 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001192 endfor
1193 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001194 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1195 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1196 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1197 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1198 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1199 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1200 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1201 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1202 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1203 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1204 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1205 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1206 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1207 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1208 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1209 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1210 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1211 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1212 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1213 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1214 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1215 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1216 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1217 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1218 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1219 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1220 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1221 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1222 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1223 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1224 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1225 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1226 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1227 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1228 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1229 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1230 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1231 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001232 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1233 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001234 delfun s:Accents
1235 syn match texAccent '\\aa\>' conceal cchar=å
1236 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001237 syn match texAccent '\\o\>' conceal cchar=ø
1238 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001239 syn match texLigature '\\AE\>' conceal cchar=Æ
1240 syn match texLigature '\\ae\>' conceal cchar=æ
1241 syn match texLigature '\\oe\>' conceal cchar=œ
1242 syn match texLigature '\\OE\>' conceal cchar=Œ
1243 syn match texLigature '\\ss\>' conceal cchar=ß
1244 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001245 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001246endif
1247
1248" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001249" LaTeX synchronization: {{{1
1250syn sync maxlines=200
1251syn sync minlines=50
1252
1253syn sync match texSyncStop groupthere NONE "%stopzone\>"
1254
1255" Synchronization: {{{1
1256" The $..$ and $$..$$ make for impossible sync patterns
1257" (one can't tell if a "$$" starts or stops a math zone by itself)
1258" The following grouptheres coupled with minlines above
1259" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001260if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1262 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1263 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1264 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1265 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1266 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1267 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1268 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1269endif
1270
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001271" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001272" Highlighting: {{{1
1273if did_tex_syntax_inits == 1
1274 let did_tex_syntax_inits= 2
1275 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001276 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001277 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001278 HiLink texBadMath texError
1279 HiLink texMathDelimBad texError
1280 HiLink texMathError texError
1281 if !b:tex_stylish
1282 HiLink texOnlyMath texError
1283 endif
1284 endif
1285 HiLink texError Error
1286 endif
1287
Bram Moolenaard38b0552012-04-25 19:07:41 +02001288 hi texBoldStyle gui=bold cterm=bold
1289 hi texItalStyle gui=italic cterm=italic
1290 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1291 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001292 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001293 HiLink texDefCmd texDef
1294 HiLink texDefName texDef
1295 HiLink texDocType texCmdName
1296 HiLink texDocTypeArgs texCmdArgs
1297 HiLink texInputFileOpt texCmdArgs
1298 HiLink texInputCurlies texDelimiter
1299 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001300 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301 HiLink texMathDelimSet1 texMathDelim
1302 HiLink texMathDelimSet2 texMathDelim
1303 HiLink texMathDelimKey texMathDelim
1304 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001305 HiLink texAccent texStatement
1306 HiLink texGreek texStatement
1307 HiLink texSuperscript texStatement
1308 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001309 HiLink texSuperscripts texSuperscript
1310 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001311 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001312 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001313 HiLink texMathZoneW texMath
1314 HiLink texMathZoneX texMath
1315 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001316 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001317 HiLink texMathZoneZ texMath
1318 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001319 HiLink texBeginEnd texCmdName
1320 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001321 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001322 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001323 HiLink texTypeSize texType
1324 HiLink texTypeStyle texType
1325
1326 " Basic TeX highlighting groups
1327 HiLink texCmdArgs Number
1328 HiLink texCmdName Statement
1329 HiLink texComment Comment
1330 HiLink texDef Statement
1331 HiLink texDefParm Special
1332 HiLink texDelimiter Delimiter
1333 HiLink texInput Special
1334 HiLink texInputFile Special
1335 HiLink texLength Number
1336 HiLink texMath Special
1337 HiLink texMathDelim Statement
1338 HiLink texMathOper Operator
1339 HiLink texNewCmd Statement
1340 HiLink texNewEnv Statement
1341 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001342 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001343 HiLink texSection PreCondit
1344 HiLink texSpaceCodeChar Special
1345 HiLink texSpecialChar SpecialChar
1346 HiLink texStatement Statement
1347 HiLink texString String
1348 HiLink texTodo Todo
1349 HiLink texType Type
1350 HiLink texZone PreCondit
1351
1352 delcommand HiLink
1353endif
1354
Bram Moolenaar15146672011-10-20 22:22:38 +02001355" Cleanup: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +01001356unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001357let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001358let &cpo = s:keepcpo
1359unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001360" vim: ts=8 fdm=marker