blob: e560573e6e1d7166fff68c2af5d6e36067b3bab8 [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 Moolenaar802a0d92016-06-26 16:17:58 +02004" Last Change: Jun 17, 2016
5" Version: 97
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")
135 exe "setlocal isk=".g:tex_isk
Bram Moolenaar91c49372016-05-08 09:50:29 +0200136elseif !has("patch-7.4.1142")
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100137 setl isk=48-57,a-z,A-Z,192-255
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138else
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100139 syn iskeyword 48-57,a-z,A-Z,192-255
Bram Moolenaaradc21822011-04-01 18:03:16 +0200140endif
141if b:tex_stylish
142 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100144if exists("g:tex_no_error") && g:tex_no_error
145 let s:tex_no_error= 1
146else
147 let s:tex_no_error= 0
148endif
149if exists("g:tex_comment_nospell") && g:tex_comment_nospell
150 let s:tex_comment_nospell= 1
151else
152 let s:tex_comment_nospell= 0
153endif
154if exists("g:tex_nospell") && g:tex_nospell
155 let s:tex_nospell = 1
156else
157 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200158endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159
160" Clusters: {{{1
161" --------
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100162syn 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 Moolenaara0f849e2015-10-30 14:37:44 +0100163if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100164 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100166syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
167syn 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
168syn 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
169syn 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
170if !s:tex_nospell
171 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
172 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 +0200173else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100174 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
175 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 +0200176endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100177syn 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 +0100178syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100179if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100180 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
181 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
182 syn cluster texMatchGroup add=@texMathZones
183 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
184 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
185 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100186 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100187 syn cluster texMathMatchGroup add=texMathError
188 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000189 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100190 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000191 " following used in the \part \chapter \section \subsection \subsubsection
192 " \paragraph \subparagraph \author \title highlighting
193 syn cluster texDocGroup contains=texPartZone,@texPartGroup
194 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
195 syn cluster texChapterGroup contains=texSectionZone,texParaZone
196 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
197 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
198 syn cluster texSubSubSectionGroup contains=texParaZone
199 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200200 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100201 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
202 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200203 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204endif
205
206" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100207if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100208 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200209 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
210 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100211 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200212 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
213 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100214 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100215 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200216 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100217 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200218 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100219 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000220endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100221if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222 syn match texError "[}\])]"
223endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100224if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100225 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100226 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100227 syn match texMathError "}" contained
228 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100229 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100230 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231endif
232
233" TeX/LaTeX keywords: {{{1
234" Instead of trying to be All Knowing, I just match \..alphameric..
235" Note that *.tex files may not have "@" in their \commands
236if exists("g:tex_tex") || b:tex_stylish
237 syn match texStatement "\\[a-zA-Z@]\+"
238else
239 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100240 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241 syn match texError "\\\a*@[a-zA-Z@]*"
242 endif
243endif
244
245" TeX/LaTeX delimiters: {{{1
246syn match texDelimiter "&"
247syn match texDelimiter "\\\\"
248
249" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200250syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251
252" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
253if b:tex_stylish
254 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
255 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
256else
257 syn match texAccent "\\[bcdvuH]\A"me=e-1
258 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
259endif
260syn match texAccent "\\[bcdvuH]$"
261syn match texAccent +\\[=^.\~"`']+
262syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
263syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
264
265" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200266syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100267if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100268 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200269 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100270endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271
272" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200273syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100274if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100275 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
276endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000278" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100279if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200280 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000281endif
282
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283" TeX input: {{{1
284syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100285syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
287syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100288if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100289 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
290endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291
292" Type Styles (LaTeX 2.09): {{{1
293syn match texTypeStyle "\\rm\>"
294syn match texTypeStyle "\\em\>"
295syn match texTypeStyle "\\bf\>"
296syn match texTypeStyle "\\it\>"
297syn match texTypeStyle "\\sl\>"
298syn match texTypeStyle "\\sf\>"
299syn match texTypeStyle "\\sc\>"
300syn match texTypeStyle "\\tt\>"
301
302" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200303if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200304 syn match texTypeStyle "\\textbf\>"
305 syn match texTypeStyle "\\textit\>"
306endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307syn match texTypeStyle "\\textmd\>"
308syn match texTypeStyle "\\textrm\>"
309syn match texTypeStyle "\\textsc\>"
310syn match texTypeStyle "\\textsf\>"
311syn match texTypeStyle "\\textsl\>"
312syn match texTypeStyle "\\texttt\>"
313syn match texTypeStyle "\\textup\>"
314syn match texTypeStyle "\\emph\>"
315
316syn match texTypeStyle "\\mathbb\>"
317syn match texTypeStyle "\\mathbf\>"
318syn match texTypeStyle "\\mathcal\>"
319syn match texTypeStyle "\\mathfrak\>"
320syn match texTypeStyle "\\mathit\>"
321syn match texTypeStyle "\\mathnormal\>"
322syn match texTypeStyle "\\mathrm\>"
323syn match texTypeStyle "\\mathsf\>"
324syn match texTypeStyle "\\mathtt\>"
325
326syn match texTypeStyle "\\rmfamily\>"
327syn match texTypeStyle "\\sffamily\>"
328syn match texTypeStyle "\\ttfamily\>"
329
330syn match texTypeStyle "\\itshape\>"
331syn match texTypeStyle "\\scshape\>"
332syn match texTypeStyle "\\slshape\>"
333syn match texTypeStyle "\\upshape\>"
334
335syn match texTypeStyle "\\bfseries\>"
336syn match texTypeStyle "\\mdseries\>"
337
338" Some type sizes: {{{1
339syn match texTypeSize "\\tiny\>"
340syn match texTypeSize "\\scriptsize\>"
341syn match texTypeSize "\\footnotesize\>"
342syn match texTypeSize "\\small\>"
343syn match texTypeSize "\\normalsize\>"
344syn match texTypeSize "\\large\>"
345syn match texTypeSize "\\Large\>"
346syn match texTypeSize "\\LARGE\>"
347syn match texTypeSize "\\huge\>"
348syn match texTypeSize "\\Huge\>"
349
350" Spacecodes (TeX'isms): {{{1
351" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
352syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
353syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
354
355" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100356if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100357 if !s:tex_nospell
358 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
359 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
360 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
361 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
362 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
363 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
364 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
365 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
366 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
367 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
368 else
369 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
370 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
371 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
372 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
373 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
374 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
375 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
376 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
377 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
378 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 +0100379 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000380endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000381
Bram Moolenaard38b0552012-04-25 19:07:41 +0200382" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100383if s:tex_fast =~# 'b'
384 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200385 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200386 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
387 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
388 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
389 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
390 else
391 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
392 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
393 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
394 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200395 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100396 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200397endif
398
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100400if !exists("g:tex_no_math") && !s:tex_no_error
401 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
403 syn match texBadMath "\\[\])]"
404endif
405
406" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100407if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000408 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 " Starred forms are created if starform is true. Starred
410 " forms have syntax group and synchronization groups with a
411 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
412 fun! TexNewMathZone(sfx,mathzone,starform)
413 let grpname = "texMathZone".a:sfx
414 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100415 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000416 let foldcmd= " fold"
417 else
418 let foldcmd= ""
419 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100421 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100422 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
423 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
424 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
425 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100426 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 if a:starform
428 let grpname = "texMathZone".a:sfx.'S'
429 let syncname = "texSyncMathZone".a:sfx.'S'
430 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100431 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100432 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
433 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
434 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
435 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100436 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437 endif
438 endfun
439
440 " Standard Math Zones: {{{2
441 call TexNewMathZone("A","align",1)
442 call TexNewMathZone("B","alignat",1)
443 call TexNewMathZone("C","displaymath",1)
444 call TexNewMathZone("D","eqnarray",1)
445 call TexNewMathZone("E","equation",1)
446 call TexNewMathZone("F","flalign",1)
447 call TexNewMathZone("G","gather",1)
448 call TexNewMathZone("H","math",1)
449 call TexNewMathZone("I","multline",1)
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100450 call TexNewMathZone("J","subequations",0)
451 call TexNewMathZone("K","xalignat",1)
452 call TexNewMathZone("L","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453
454 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100455 if s:tex_fast =~# 'M'
456 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200457 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
458 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
459 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
460 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100461 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200462 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
463 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100464 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200465 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100466 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200467 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200468 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469
470 syn match texMathOper "[_^=]" contained
471
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200472 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100473 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100474 if !exists("g:tex_nospell") || !g:tex_nospell
475 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
476 else
477 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
478 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200479 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200480
Bram Moolenaar071d4272004-06-13 20:20:40 +0000481 " \left..something.. and \right..something.. support: {{{2
482 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100483 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200484 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
485 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200486 let s:texMathDelimList=[
487 \ ['<' , '<'] ,
488 \ ['>' , '>'] ,
489 \ ['(' , '('] ,
490 \ [')' , ')'] ,
491 \ ['\[' , '['] ,
492 \ [']' , ']'] ,
493 \ ['\\{' , '{'] ,
494 \ ['\\}' , '}'] ,
495 \ ['|' , '|'] ,
496 \ ['\\|' , '‖'] ,
497 \ ['\\backslash' , '\'] ,
498 \ ['\\downarrow' , '↓'] ,
499 \ ['\\Downarrow' , '⇓'] ,
500 \ ['\\langle' , '<'] ,
501 \ ['\\lbrace' , '['] ,
502 \ ['\\lceil' , '⌈'] ,
503 \ ['\\lfloor' , '⌊'] ,
504 \ ['\\lgroup' , '⌊'] ,
505 \ ['\\lmoustache' , '⎛'] ,
506 \ ['\\rangle' , '>'] ,
507 \ ['\\rbrace' , ']'] ,
508 \ ['\\rceil' , '⌉'] ,
509 \ ['\\rfloor' , '⌋'] ,
510 \ ['\\rgroup' , '⌋'] ,
511 \ ['\\rmoustache' , '⎞'] ,
512 \ ['\\uparrow' , '↑'] ,
513 \ ['\\Uparrow' , '↑'] ,
514 \ ['\\updownarrow', '↕'] ,
515 \ ['\\Updownarrow', '⇕']]
516 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
517 for texmath in s:texMathDelimList
518 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
519 endfor
520
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200521 else
522 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200523 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
524 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
525 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
526 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
527 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
528 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
529 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
530 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200531 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
533 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534endif
535
536" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
537syn match texSpecialChar "\\[$&%#{}_]"
538if b:tex_stylish
539 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
540else
541 syn match texSpecialChar "\\[SP@]\A"me=e-1
542endif
543syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100544if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000545 syn match texOnlyMath "[_^]"
546endif
547syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200548if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200549 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
550 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
551 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
552 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
553 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
554endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555
556" Comments: {{{1
557" Normal TeX LaTeX : %....
558" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100559if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000560 syn cluster texCommentGroup contains=texTodo,@Spell
561else
562 syn cluster texCommentGroup contains=texTodo,@NoSpell
563endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000564syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000565syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100567if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100568 syn match texComment "\^\^A.*$" contains=@texCommentGroup
569 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000570else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100571 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100572 " allows syntax-folding of 2 or more contiguous comment lines
573 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100574 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100575 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100576 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
577 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 +0000578 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100579 else
580 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 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100583 endif
584 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000585endif
586
587" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200588" will appropriately terminate.
589" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100590if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100591 if exists("g:tex_verbspell") && g:tex_verbspell
592 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
593 " listings package:
594 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
595 if version < 600
596 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
597 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200598 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100599 if b:tex_stylish
600 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
601 else
602 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
603 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200604 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100605 else
606 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
607 if version < 600
608 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
609 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200610 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100611 if b:tex_stylish
612 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
613 else
614 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
615 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200616 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100617 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000618endif
619
620" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100621if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100622 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
623 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
624 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
625 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
626 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
627 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
628 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200629 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100630endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200631syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000632
633" Handle newcommand, newenvironment : {{{1
634syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100635if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100636 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
637 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
638 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
639endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000640syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100641if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100642 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
643 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
644 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
645endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000646
647" Definitions/Commands: {{{1
648syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
649if b:tex_stylish
650 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
651 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
652else
653 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
654 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
655endif
656syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
657syn match texDefParm contained "#\d\+"
658
659" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000660syn 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 +0000661
662" TeX String Delimiters: {{{1
663syn match texString "\(``\|''\|,,\)"
664
Bram Moolenaar5c736222010-01-06 20:54:52 +0100665" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100666if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100667 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100668 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
669 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100670 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100671 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100672 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
673 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
674 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100675endif
676
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200677" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200678if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200679
680 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200681 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100682 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200684 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200685 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100686 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 \ ['angle' , '∠'],
688 \ ['approx' , '≈'],
689 \ ['ast' , '∗'],
690 \ ['asymp' , '≍'],
691 \ ['backepsilon' , '∍'],
692 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200693 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200694 \ ['barwedge' , '⊼'],
695 \ ['because' , '∵'],
696 \ ['between' , '≬'],
697 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100698 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200699 \ ['bigcup' , '∪'],
700 \ ['bigodot' , '⊙'],
701 \ ['bigoplus' , '⊕'],
702 \ ['bigotimes' , '⊗'],
703 \ ['bigsqcup' , '⊔'],
704 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100705 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200706 \ ['bigvee' , '⋁'],
707 \ ['bigwedge' , '⋀'],
708 \ ['blacksquare' , '∎'],
709 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100710 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200711 \ ['boxdot' , '⊡'],
712 \ ['boxminus' , '⊟'],
713 \ ['boxplus' , '⊞'],
714 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100715 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200716 \ ['bumpeq' , '≏'],
717 \ ['Bumpeq' , '≎'],
718 \ ['cap' , '∩'],
719 \ ['Cap' , '⋒'],
720 \ ['cdot' , '·'],
721 \ ['cdots' , '⋯'],
722 \ ['circ' , '∘'],
723 \ ['circeq' , '≗'],
724 \ ['circlearrowleft', '↺'],
725 \ ['circlearrowright', '↻'],
726 \ ['circledast' , '⊛'],
727 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200728 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['complement' , '∁'],
730 \ ['cong' , '≅'],
731 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200732 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200733 \ ['cup' , '∪'],
734 \ ['Cup' , '⋓'],
735 \ ['curlyeqprec' , '⋞'],
736 \ ['curlyeqsucc' , '⋟'],
737 \ ['curlyvee' , '⋎'],
738 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100739 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200740 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100741 \ ['ddagger' , '‡'],
742 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200743 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200744 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['div' , '÷'],
746 \ ['doteq' , '≐'],
747 \ ['doteqdot' , '≑'],
748 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100749 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200750 \ ['dotsb' , '⋯'],
751 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 \ ['dotsi' , '⋯'],
753 \ ['dotso' , '…'],
754 \ ['doublebarwedge' , '⩞'],
755 \ ['downarrow' , '↓'],
756 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100757 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['emptyset' , '∅'],
759 \ ['eqcirc' , '≖'],
760 \ ['eqsim' , '≂'],
761 \ ['eqslantgtr' , '⪖'],
762 \ ['eqslantless' , '⪕'],
763 \ ['equiv' , '≡'],
764 \ ['exists' , '∃'],
765 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200766 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200767 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100768 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['ge' , '≥'],
770 \ ['geq' , '≥'],
771 \ ['geqq' , '≧'],
772 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100773 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['gneqq' , '≩'],
775 \ ['gtrdot' , '⋗'],
776 \ ['gtreqless' , '⋛'],
777 \ ['gtrless' , '≷'],
778 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200779 \ ['hbar' , 'ℏ'],
780 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['hookleftarrow' , '↩'],
782 \ ['hookrightarrow' , '↪'],
783 \ ['iiint' , '∭'],
784 \ ['iint' , '∬'],
785 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200786 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200787 \ ['in' , '∈'],
788 \ ['infty' , '∞'],
789 \ ['int' , '∫'],
790 \ ['lceil' , '⌈'],
791 \ ['ldots' , '…'],
792 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100793 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200794 \ ['left(' , '('],
795 \ ['left\[' , '['],
796 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100797 \ ['leftarrow' , '←'],
798 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100799 \ ['leftarrowtail' , '↢'],
800 \ ['leftharpoondown', '↽'],
801 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100802 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['leftrightsquigarrow', '↭'],
805 \ ['leftthreetimes' , '⋋'],
806 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['leqq' , '≦'],
809 \ ['lessdot' , '⋖'],
810 \ ['lesseqgtr' , '⋚'],
811 \ ['lesssim' , '≲'],
812 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200814 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['lneqq' , '≨'],
816 \ ['ltimes' , '⋉'],
817 \ ['mapsto' , '↦'],
818 \ ['measuredangle' , '∡'],
819 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100820 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['mp' , '∓'],
822 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200823 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200824 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200825 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100826 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200827 \ ['neg' , '¬'],
828 \ ['neq' , '≠'],
829 \ ['nexists' , '∄'],
830 \ ['ngeq' , '≱'],
831 \ ['ngeqq' , '≱'],
832 \ ['ngtr' , '≯'],
833 \ ['ni' , '∋'],
834 \ ['nleftarrow' , '↚'],
835 \ ['nLeftarrow' , '⇍'],
836 \ ['nLeftrightarrow', '⇎'],
837 \ ['nleq' , '≰'],
838 \ ['nleqq' , '≰'],
839 \ ['nless' , '≮'],
840 \ ['nmid' , '∤'],
841 \ ['notin' , '∉'],
842 \ ['nprec' , '⊀'],
843 \ ['nrightarrow' , '↛'],
844 \ ['nRightarrow' , '⇏'],
845 \ ['nsim' , '≁'],
846 \ ['nsucc' , '⊁'],
847 \ ['ntriangleleft' , '⋪'],
848 \ ['ntrianglelefteq', '⋬'],
849 \ ['ntriangleright' , '⋫'],
850 \ ['ntrianglerighteq', '⋭'],
851 \ ['nvdash' , '⊬'],
852 \ ['nvDash' , '⊭'],
853 \ ['nVdash' , '⊮'],
854 \ ['nwarrow' , '↖'],
855 \ ['odot' , '⊙'],
856 \ ['oint' , '∮'],
857 \ ['ominus' , '⊖'],
858 \ ['oplus' , '⊕'],
859 \ ['oslash' , '⊘'],
860 \ ['otimes' , '⊗'],
861 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200862 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100863 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['partial' , '∂'],
865 \ ['perp' , '⊥'],
866 \ ['pitchfork' , '⋔'],
867 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200868 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100869 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 \ ['preccurlyeq' , '≼'],
871 \ ['preceq' , '⪯'],
872 \ ['precnapprox' , '⪹'],
873 \ ['precneqq' , '⪵'],
874 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200875 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200876 \ ['prod' , '∏'],
877 \ ['propto' , '∝'],
878 \ ['rceil' , '⌉'],
879 \ ['Re' , 'ℜ'],
880 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200881 \ ['right)' , ')'],
882 \ ['right]' , ']'],
883 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100884 \ ['rightarrow' , '→'],
885 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100886 \ ['rightarrowtail' , '↣'],
887 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['rightsquigarrow', '↝'],
889 \ ['rightthreetimes', '⋌'],
890 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200891 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200892 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200893 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200894 \ ['searrow' , '↘'],
895 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200896 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200897 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100898 \ ['simeq' , '⋍'],
899 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200900 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200901 \ ['sphericalangle' , '∢'],
902 \ ['sqcap' , '⊓'],
903 \ ['sqcup' , '⊔'],
904 \ ['sqsubset' , '⊏'],
905 \ ['sqsubseteq' , '⊑'],
906 \ ['sqsupset' , '⊐'],
907 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100908 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200909 \ ['subset' , '⊂'],
910 \ ['Subset' , '⋐'],
911 \ ['subseteq' , '⊆'],
912 \ ['subseteqq' , '⫅'],
913 \ ['subsetneq' , '⊊'],
914 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200915 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100916 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200917 \ ['succcurlyeq' , '≽'],
918 \ ['succeq' , '⪰'],
919 \ ['succnapprox' , '⪺'],
920 \ ['succneqq' , '⪶'],
921 \ ['succsim' , '≿'],
922 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100923 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200924 \ ['Supset' , '⋑'],
925 \ ['supseteq' , '⊇'],
926 \ ['supseteqq' , '⫆'],
927 \ ['supsetneq' , '⊋'],
928 \ ['supsetneqq' , '⫌'],
929 \ ['surd' , '√'],
930 \ ['swarrow' , '↙'],
931 \ ['therefore' , '∴'],
932 \ ['times' , '×'],
933 \ ['to' , '→'],
934 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200935 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200936 \ ['triangleleft' , '⊲'],
937 \ ['trianglelefteq' , '⊴'],
938 \ ['triangleq' , '≜'],
939 \ ['triangleright' , '⊳'],
940 \ ['trianglerighteq', '⊵'],
941 \ ['twoheadleftarrow', '↞'],
942 \ ['twoheadrightarrow', '↠'],
943 \ ['uparrow' , '↑'],
944 \ ['Uparrow' , '⇑'],
945 \ ['updownarrow' , '↕'],
946 \ ['Updownarrow' , '⇕'],
947 \ ['varnothing' , '∅'],
948 \ ['vartriangle' , '∆'],
949 \ ['vdash' , '⊢'],
950 \ ['vDash' , '⊨'],
951 \ ['Vdash' , '⊩'],
952 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200953 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100954 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200955 \ ['Vvdash' , '⊪'],
956 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200957 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200958 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100959" \ ['jmath' , 'X']
960" \ ['uminus' , 'X']
961" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200962 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100963 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100964 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
965 else
966 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
967 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200968 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200969
970 if &ambw == "double"
971 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
972 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
973 else
974 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
975 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
976 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200977
978 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
979 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
980 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
981 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
982 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
983 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
984 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
985 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
986 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
987 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
988 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
989 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
990 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
991 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
992 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
993 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
994 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
995 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
996 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
997 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100998" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200999 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001000
1001 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001002 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001003 fun! s:Greek(group,pat,cchar)
1004 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1005 endfun
1006 call s:Greek('texGreek','\\alpha\>' ,'α')
1007 call s:Greek('texGreek','\\beta\>' ,'β')
1008 call s:Greek('texGreek','\\gamma\>' ,'γ')
1009 call s:Greek('texGreek','\\delta\>' ,'δ')
1010 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1011 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1012 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1013 call s:Greek('texGreek','\\eta\>' ,'η')
1014 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001015 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001016 call s:Greek('texGreek','\\kappa\>' ,'κ')
1017 call s:Greek('texGreek','\\lambda\>' ,'λ')
1018 call s:Greek('texGreek','\\mu\>' ,'μ')
1019 call s:Greek('texGreek','\\nu\>' ,'ν')
1020 call s:Greek('texGreek','\\xi\>' ,'ξ')
1021 call s:Greek('texGreek','\\pi\>' ,'π')
1022 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1023 call s:Greek('texGreek','\\rho\>' ,'ρ')
1024 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1025 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001026 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001027 call s:Greek('texGreek','\\tau\>' ,'τ')
1028 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001029 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1030 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001031 call s:Greek('texGreek','\\chi\>' ,'χ')
1032 call s:Greek('texGreek','\\psi\>' ,'ψ')
1033 call s:Greek('texGreek','\\omega\>' ,'ω')
1034 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1035 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1036 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1037 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1038 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1039 call s:Greek('texGreek','\\Pi\>' ,'Π')
1040 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1041 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1042 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1043 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1044 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1045 delfun s:Greek
1046 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001047
1048 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001049 if s:tex_conceal =~# 's'
1050 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001051 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1052 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1053 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001054 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001055 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001056 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001057" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1058 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001059 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001060 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001061 endfun
1062 call s:SuperSub('texSuperscript','\^','0','⁰')
1063 call s:SuperSub('texSuperscript','\^','1','¹')
1064 call s:SuperSub('texSuperscript','\^','2','²')
1065 call s:SuperSub('texSuperscript','\^','3','³')
1066 call s:SuperSub('texSuperscript','\^','4','⁴')
1067 call s:SuperSub('texSuperscript','\^','5','⁵')
1068 call s:SuperSub('texSuperscript','\^','6','⁶')
1069 call s:SuperSub('texSuperscript','\^','7','⁷')
1070 call s:SuperSub('texSuperscript','\^','8','⁸')
1071 call s:SuperSub('texSuperscript','\^','9','⁹')
1072 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1073 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1074 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1075 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1076 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1077 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1078 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1079 call s:SuperSub('texSuperscript','\^','h','ʰ')
1080 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1081 call s:SuperSub('texSuperscript','\^','j','ʲ')
1082 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1083 call s:SuperSub('texSuperscript','\^','l','ˡ')
1084 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1085 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1086 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1087 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1088 call s:SuperSub('texSuperscript','\^','r','ʳ')
1089 call s:SuperSub('texSuperscript','\^','s','ˢ')
1090 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1091 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1092 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1093 call s:SuperSub('texSuperscript','\^','w','ʷ')
1094 call s:SuperSub('texSuperscript','\^','x','ˣ')
1095 call s:SuperSub('texSuperscript','\^','y','ʸ')
1096 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1097 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1098 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1099 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1100 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1101 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1102 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1103 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1104 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1105 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1106 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1107 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1108 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1109 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1110 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1111 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1112 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1113 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1114 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001115 call s:SuperSub('texSuperscript','\^',',','︐')
1116 call s:SuperSub('texSuperscript','\^',':','︓')
1117 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001118 call s:SuperSub('texSuperscript','\^','+','⁺')
1119 call s:SuperSub('texSuperscript','\^','-','⁻')
1120 call s:SuperSub('texSuperscript','\^','<','˂')
1121 call s:SuperSub('texSuperscript','\^','>','˃')
1122 call s:SuperSub('texSuperscript','\^','/','ˊ')
1123 call s:SuperSub('texSuperscript','\^','(','⁽')
1124 call s:SuperSub('texSuperscript','\^',')','⁾')
1125 call s:SuperSub('texSuperscript','\^','\.','˙')
1126 call s:SuperSub('texSuperscript','\^','=','˭')
1127 call s:SuperSub('texSubscript','_','0','₀')
1128 call s:SuperSub('texSubscript','_','1','₁')
1129 call s:SuperSub('texSubscript','_','2','₂')
1130 call s:SuperSub('texSubscript','_','3','₃')
1131 call s:SuperSub('texSubscript','_','4','₄')
1132 call s:SuperSub('texSubscript','_','5','₅')
1133 call s:SuperSub('texSubscript','_','6','₆')
1134 call s:SuperSub('texSubscript','_','7','₇')
1135 call s:SuperSub('texSubscript','_','8','₈')
1136 call s:SuperSub('texSubscript','_','9','₉')
1137 call s:SuperSub('texSubscript','_','a','ₐ')
1138 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001139 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001140 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001141 call s:SuperSub('texSubscript','_','j','ⱼ')
1142 call s:SuperSub('texSubscript','_','k','ₖ')
1143 call s:SuperSub('texSubscript','_','l','ₗ')
1144 call s:SuperSub('texSubscript','_','m','ₘ')
1145 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001146 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001147 call s:SuperSub('texSubscript','_','p','ₚ')
1148 call s:SuperSub('texSubscript','_','r','ᵣ')
1149 call s:SuperSub('texSubscript','_','s','ₛ')
1150 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001151 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001152 call s:SuperSub('texSubscript','_','v','ᵥ')
1153 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001154 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001155 call s:SuperSub('texSubscript','_','+','₊')
1156 call s:SuperSub('texSubscript','_','-','₋')
1157 call s:SuperSub('texSubscript','_','/','ˏ')
1158 call s:SuperSub('texSubscript','_','(','₍')
1159 call s:SuperSub('texSubscript','_',')','₎')
1160 call s:SuperSub('texSubscript','_','\.','‸')
1161 call s:SuperSub('texSubscript','_','r','ᵣ')
1162 call s:SuperSub('texSubscript','_','v','ᵥ')
1163 call s:SuperSub('texSubscript','_','x','ₓ')
1164 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1165 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1166 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1167 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1168 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001169
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001170 delfun s:SuperSub
1171 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001172
1173 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001174 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001175 if b:tex_stylish
1176 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1177 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1178 else
1179 fun! s:Accents(chr,...)
1180 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001181 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001182 if i > a:0
1183 break
1184 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001185 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001186 let i= i + 1
1187 continue
1188 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001189 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001190 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1191 else
1192 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1193 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001194 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001195 endfor
1196 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001197 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1198 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1199 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1200 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1201 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1202 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1203 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1204 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1205 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1206 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1207 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1208 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1209 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1210 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1211 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1212 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1213 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1214 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1215 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1216 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1217 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1218 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1219 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1220 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1221 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1222 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1223 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1224 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1225 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1226 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1227 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1228 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1229 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1230 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1231 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1232 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1233 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1234 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001235 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1236 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001237 delfun s:Accents
1238 syn match texAccent '\\aa\>' conceal cchar=å
1239 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001240 syn match texAccent '\\o\>' conceal cchar=ø
1241 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001242 syn match texLigature '\\AE\>' conceal cchar=Æ
1243 syn match texLigature '\\ae\>' conceal cchar=æ
1244 syn match texLigature '\\oe\>' conceal cchar=œ
1245 syn match texLigature '\\OE\>' conceal cchar=Œ
1246 syn match texLigature '\\ss\>' conceal cchar=ß
1247 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001248 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001249endif
1250
1251" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001252" LaTeX synchronization: {{{1
1253syn sync maxlines=200
1254syn sync minlines=50
1255
1256syn sync match texSyncStop groupthere NONE "%stopzone\>"
1257
1258" Synchronization: {{{1
1259" The $..$ and $$..$$ make for impossible sync patterns
1260" (one can't tell if a "$$" starts or stops a math zone by itself)
1261" The following grouptheres coupled with minlines above
1262" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001263if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001264 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1265 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1266 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1267 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1268 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1269 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1270 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1271 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1272endif
1273
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001274" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001275" Highlighting: {{{1
1276if did_tex_syntax_inits == 1
1277 let did_tex_syntax_inits= 2
1278 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001279 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001280 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001281 HiLink texBadMath texError
1282 HiLink texMathDelimBad texError
1283 HiLink texMathError texError
1284 if !b:tex_stylish
1285 HiLink texOnlyMath texError
1286 endif
1287 endif
1288 HiLink texError Error
1289 endif
1290
Bram Moolenaard38b0552012-04-25 19:07:41 +02001291 hi texBoldStyle gui=bold cterm=bold
1292 hi texItalStyle gui=italic cterm=italic
1293 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1294 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001295 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001296 HiLink texDefCmd texDef
1297 HiLink texDefName texDef
1298 HiLink texDocType texCmdName
1299 HiLink texDocTypeArgs texCmdArgs
1300 HiLink texInputFileOpt texCmdArgs
1301 HiLink texInputCurlies texDelimiter
1302 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001303 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001304 HiLink texMathDelimSet1 texMathDelim
1305 HiLink texMathDelimSet2 texMathDelim
1306 HiLink texMathDelimKey texMathDelim
1307 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001308 HiLink texAccent texStatement
1309 HiLink texGreek texStatement
1310 HiLink texSuperscript texStatement
1311 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001312 HiLink texSuperscripts texSuperscript
1313 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001314 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001315 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001316 HiLink texMathZoneW texMath
1317 HiLink texMathZoneX texMath
1318 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001319 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001320 HiLink texMathZoneZ texMath
1321 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001322 HiLink texBeginEnd texCmdName
1323 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001324 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001325 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326 HiLink texTypeSize texType
1327 HiLink texTypeStyle texType
1328
1329 " Basic TeX highlighting groups
1330 HiLink texCmdArgs Number
1331 HiLink texCmdName Statement
1332 HiLink texComment Comment
1333 HiLink texDef Statement
1334 HiLink texDefParm Special
1335 HiLink texDelimiter Delimiter
1336 HiLink texInput Special
1337 HiLink texInputFile Special
1338 HiLink texLength Number
1339 HiLink texMath Special
1340 HiLink texMathDelim Statement
1341 HiLink texMathOper Operator
1342 HiLink texNewCmd Statement
1343 HiLink texNewEnv Statement
1344 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001345 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001346 HiLink texSection PreCondit
1347 HiLink texSpaceCodeChar Special
1348 HiLink texSpecialChar SpecialChar
1349 HiLink texStatement Statement
1350 HiLink texString String
1351 HiLink texTodo Todo
1352 HiLink texType Type
1353 HiLink texZone PreCondit
1354
1355 delcommand HiLink
1356endif
1357
Bram Moolenaar15146672011-10-20 22:22:38 +02001358" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001359delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001360unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001361let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001362let &cpo = s:keepcpo
1363unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001364" vim: ts=8 fdm=marker