blob: 90848094d7bb4972d0d530d9a37e268da50e5f38 [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 Moolenaara0f849e2015-10-30 14:37:44 +01004" Last Change: Oct 19, 2015
5" Version: 89
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
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100125if g:tex_fold_enabled && has("folding")
126 com! -nargs=* TexFold <args> fold
127else
128 com! -nargs=* TexFold <args>
129endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000130
Bram Moolenaaradc21822011-04-01 18:03:16 +0200131" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200133" One may override this iskeyword setting by providing
134" g:tex_isk
135if exists("g:tex_isk")
136 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200138 setlocal isk=48-57,a-z,A-Z,192-255
139endif
140if b:tex_stylish
141 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000142endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200143if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
144 let g:tex_comment_nospell= 1
145endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146
147" Clusters: {{{1
148" --------
Bram Moolenaard38b0552012-04-25 19:07:41 +0200149syn 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 +0100150if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151 syn cluster texCmdGroup add=texMathError
152endif
153syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaard38b0552012-04-25 19:07:41 +0200154syn 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
155syn 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
156syn 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 +0200157if !exists("g:tex_nospell") || !g:tex_nospell
158 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
159 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
160else
161 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
162 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
163endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100164syn 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 Moolenaarcfbc5ee2004-07-02 15:38:35 +0000165syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100166if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100167syn 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 Moolenaar071d4272004-06-13 20:20:40 +0000168 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
169 syn cluster texMatchGroup add=@texMathZones
170 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
171 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 +0200172 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100173 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174 syn cluster texMathMatchGroup add=texMathError
175 syn cluster texMathZoneGroup add=texMathError
176 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000177 syn cluster texMathZoneGroup add=@NoSpell
178 " following used in the \part \chapter \section \subsection \subsubsection
179 " \paragraph \subparagraph \author \title highlighting
180 syn cluster texDocGroup contains=texPartZone,@texPartGroup
181 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
182 syn cluster texChapterGroup contains=texSectionZone,texParaZone
183 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
184 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
185 syn cluster texSubSubSectionGroup contains=texParaZone
186 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200187 if has("conceal") && &enc == 'utf-8'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200188 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
189 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200190 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000191endif
192
193" Try to flag {} and () mismatches: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200194if s:tex_fast =~ 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100195 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100196 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
197 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell
198 else
199 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
200 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
201 endif
202 if !exists("g:tex_nospell") || !g:tex_nospell
203 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
204 else
205 syn region texParen start="(" end=")" contains=@texMatchGroup
206 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100208if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209 syn match texError "[}\])]"
210endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200211if s:tex_fast =~ 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100212 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100213 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100214 syn match texMathError "}" contained
215 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100216 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100217 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218endif
219
220" TeX/LaTeX keywords: {{{1
221" Instead of trying to be All Knowing, I just match \..alphameric..
222" Note that *.tex files may not have "@" in their \commands
223if exists("g:tex_tex") || b:tex_stylish
224 syn match texStatement "\\[a-zA-Z@]\+"
225else
226 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100227 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228 syn match texError "\\\a*@[a-zA-Z@]*"
229 endif
230endif
231
232" TeX/LaTeX delimiters: {{{1
233syn match texDelimiter "&"
234syn match texDelimiter "\\\\"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100235" syn match texDelimiter "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236
237" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200238syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239
240" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
241if b:tex_stylish
242 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
243 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
244else
245 syn match texAccent "\\[bcdvuH]\A"me=e-1
246 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
247endif
248syn match texAccent "\\[bcdvuH]$"
249syn match texAccent +\\[=^.\~"`']+
250syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
251syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
252
253" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200254syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200255if s:tex_fast =~ 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100256 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100257 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
258endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259
260" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200261syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200262if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100263 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
264endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000266" Preamble syntax-based folding support: {{{1
267if g:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200268 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000269endif
270
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271" TeX input: {{{1
272syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100273syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
275syn match texInputCurlies "[{}]" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200276if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100277 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
278endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279
280" Type Styles (LaTeX 2.09): {{{1
281syn match texTypeStyle "\\rm\>"
282syn match texTypeStyle "\\em\>"
283syn match texTypeStyle "\\bf\>"
284syn match texTypeStyle "\\it\>"
285syn match texTypeStyle "\\sl\>"
286syn match texTypeStyle "\\sf\>"
287syn match texTypeStyle "\\sc\>"
288syn match texTypeStyle "\\tt\>"
289
290" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200291if s:tex_conceal !~ 'b'
292 syn match texTypeStyle "\\textbf\>"
293 syn match texTypeStyle "\\textit\>"
294endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000295syn match texTypeStyle "\\textmd\>"
296syn match texTypeStyle "\\textrm\>"
297syn match texTypeStyle "\\textsc\>"
298syn match texTypeStyle "\\textsf\>"
299syn match texTypeStyle "\\textsl\>"
300syn match texTypeStyle "\\texttt\>"
301syn match texTypeStyle "\\textup\>"
302syn match texTypeStyle "\\emph\>"
303
304syn match texTypeStyle "\\mathbb\>"
305syn match texTypeStyle "\\mathbf\>"
306syn match texTypeStyle "\\mathcal\>"
307syn match texTypeStyle "\\mathfrak\>"
308syn match texTypeStyle "\\mathit\>"
309syn match texTypeStyle "\\mathnormal\>"
310syn match texTypeStyle "\\mathrm\>"
311syn match texTypeStyle "\\mathsf\>"
312syn match texTypeStyle "\\mathtt\>"
313
314syn match texTypeStyle "\\rmfamily\>"
315syn match texTypeStyle "\\sffamily\>"
316syn match texTypeStyle "\\ttfamily\>"
317
318syn match texTypeStyle "\\itshape\>"
319syn match texTypeStyle "\\scshape\>"
320syn match texTypeStyle "\\slshape\>"
321syn match texTypeStyle "\\upshape\>"
322
323syn match texTypeStyle "\\bfseries\>"
324syn match texTypeStyle "\\mdseries\>"
325
326" Some type sizes: {{{1
327syn match texTypeSize "\\tiny\>"
328syn match texTypeSize "\\scriptsize\>"
329syn match texTypeSize "\\footnotesize\>"
330syn match texTypeSize "\\small\>"
331syn match texTypeSize "\\normalsize\>"
332syn match texTypeSize "\\large\>"
333syn match texTypeSize "\\Large\>"
334syn match texTypeSize "\\LARGE\>"
335syn match texTypeSize "\\huge\>"
336syn match texTypeSize "\\Huge\>"
337
338" Spacecodes (TeX'isms): {{{1
339" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
340syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
341syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
342
343" Sections, subsections, etc: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200344if s:tex_fast =~ 'p'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100345 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100346 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
347 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
348 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
349 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
350 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
351 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
352 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
353 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
354 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
355 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100356 else
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100357 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
358 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
359 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
360 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
361 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
362 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
363 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
364 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
365 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
366 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 +0100367 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000368endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000369
Bram Moolenaard38b0552012-04-25 19:07:41 +0200370" particular support for bold and italic {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200371if s:tex_fast =~ 'b'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100372 if s:tex_conceal =~ 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200373 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200374 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
375 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
376 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
377 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
378 else
379 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
380 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
381 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
382 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200383 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100384 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200385endif
386
Bram Moolenaar071d4272004-06-13 20:20:40 +0000387" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100388if !exists("g:tex_no_math") && !s:tex_no_error
389 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
391 syn match texBadMath "\\[\])]"
392endif
393
394" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100395if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000396 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397 " Starred forms are created if starform is true. Starred
398 " forms have syntax group and synchronization groups with a
399 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
400 fun! TexNewMathZone(sfx,mathzone,starform)
401 let grpname = "texMathZone".a:sfx
402 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000403 if g:tex_fold_enabled
404 let foldcmd= " fold"
405 else
406 let foldcmd= ""
407 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000408 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200409 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100410 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
411 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
412 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
413 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100414 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000415 if a:starform
416 let grpname = "texMathZone".a:sfx.'S'
417 let syncname = "texSyncMathZone".a:sfx.'S'
418 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200419 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100420 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
421 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
422 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
423 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100424 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000425 endif
426 endfun
427
428 " Standard Math Zones: {{{2
429 call TexNewMathZone("A","align",1)
430 call TexNewMathZone("B","alignat",1)
431 call TexNewMathZone("C","displaymath",1)
432 call TexNewMathZone("D","eqnarray",1)
433 call TexNewMathZone("E","equation",1)
434 call TexNewMathZone("F","flalign",1)
435 call TexNewMathZone("G","gather",1)
436 call TexNewMathZone("H","math",1)
437 call TexNewMathZone("I","multline",1)
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100438 call TexNewMathZone("J","subequations",0)
439 call TexNewMathZone("K","xalignat",1)
440 call TexNewMathZone("L","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000441
442 " Inline Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200443 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100444 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200445 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
446 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
447 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
448 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100449 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200450 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
451 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
452 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
453 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100454 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200455 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200456 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457
458 syn match texMathOper "[_^=]" contained
459
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200460 " Text Inside Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200461 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100462 if !exists("g:tex_nospell") || !g:tex_nospell
463 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
464 else
465 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
466 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200467 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200468
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469 " \left..something.. and \right..something.. support: {{{2
470 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200471 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
472 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
473 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200474 let s:texMathDelimList=[
475 \ ['<' , '<'] ,
476 \ ['>' , '>'] ,
477 \ ['(' , '('] ,
478 \ [')' , ')'] ,
479 \ ['\[' , '['] ,
480 \ [']' , ']'] ,
481 \ ['\\{' , '{'] ,
482 \ ['\\}' , '}'] ,
483 \ ['|' , '|'] ,
484 \ ['\\|' , '‖'] ,
485 \ ['\\backslash' , '\'] ,
486 \ ['\\downarrow' , '↓'] ,
487 \ ['\\Downarrow' , '⇓'] ,
488 \ ['\\langle' , '<'] ,
489 \ ['\\lbrace' , '['] ,
490 \ ['\\lceil' , '⌈'] ,
491 \ ['\\lfloor' , '⌊'] ,
492 \ ['\\lgroup' , '⌊'] ,
493 \ ['\\lmoustache' , '⎛'] ,
494 \ ['\\rangle' , '>'] ,
495 \ ['\\rbrace' , ']'] ,
496 \ ['\\rceil' , '⌉'] ,
497 \ ['\\rfloor' , '⌋'] ,
498 \ ['\\rgroup' , '⌋'] ,
499 \ ['\\rmoustache' , '⎞'] ,
500 \ ['\\uparrow' , '↑'] ,
501 \ ['\\Uparrow' , '↑'] ,
502 \ ['\\updownarrow', '↕'] ,
503 \ ['\\Updownarrow', '⇕']]
504 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
505 for texmath in s:texMathDelimList
506 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
507 endfor
508
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200509 else
510 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200511 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
512 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
513 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
514 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
515 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
516 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
517 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
518 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200519 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000520 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
521 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000522endif
523
524" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
525syn match texSpecialChar "\\[$&%#{}_]"
526if b:tex_stylish
527 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
528else
529 syn match texSpecialChar "\\[SP@]\A"me=e-1
530endif
531syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100532if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000533 syn match texOnlyMath "[_^]"
534endif
535syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200536if s:tex_conceal !~ 'S'
537 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
538 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
539 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
540 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
541 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
542endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000543
544" Comments: {{{1
545" Normal TeX LaTeX : %....
546" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000547if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
548 syn cluster texCommentGroup contains=texTodo,@Spell
549else
550 syn cluster texCommentGroup contains=texTodo,@NoSpell
551endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000553syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000554syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100555if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100556 syn match texComment "\^\^A.*$" contains=@texCommentGroup
557 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000558else
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100559 if g:tex_fold_enabled
560 " allows syntax-folding of 2 or more contiguous comment lines
561 " single-line comments are not folded
562 syn match texComment "%.*$" contains=@texCommentGroup
563 if s:tex_fast =~ 'c'
564 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]'
565 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 +0000566 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100567 else
568 syn match texComment "%.*$" contains=@texCommentGroup
569 if s:tex_fast =~ 'c'
570 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
571 endif
572 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000573endif
574
575" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200576" will appropriately terminate.
577" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200578if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100579 if exists("g:tex_verbspell") && g:tex_verbspell
580 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
581 " listings package:
582 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
583 if version < 600
584 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
585 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200586 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100587 if b:tex_stylish
588 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
589 else
590 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
591 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200592 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100593 else
594 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
595 if version < 600
596 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
597 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
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\>"
601 else
602 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
603 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200604 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100605 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000606endif
607
608" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200609if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100610 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
611 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
612 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
613 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
614 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
615 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
616 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200617 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100618endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200619syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000620
621" Handle newcommand, newenvironment : {{{1
622syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200623if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100624 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
625 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
626 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
627endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000628syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200629if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100630 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
631 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
632 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
633endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000634
635" Definitions/Commands: {{{1
636syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
637if b:tex_stylish
638 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
639 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
640else
641 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
642 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
643endif
644syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
645syn match texDefParm contained "#\d\+"
646
647" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000648syn 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 +0000649
650" TeX String Delimiters: {{{1
651syn match texString "\(``\|''\|,,\)"
652
Bram Moolenaar5c736222010-01-06 20:54:52 +0100653" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100654if !s:tex_no_error
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200655 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100656 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
657 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100658 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200659 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100660 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
661 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
662 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100663endif
664
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200665" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200666if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200667
668 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200669 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200670 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200671 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200672 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200673 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100674 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200675 \ ['angle' , '∠'],
676 \ ['approx' , '≈'],
677 \ ['ast' , '∗'],
678 \ ['asymp' , '≍'],
679 \ ['backepsilon' , '∍'],
680 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200681 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200682 \ ['barwedge' , '⊼'],
683 \ ['because' , '∵'],
684 \ ['between' , '≬'],
685 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100686 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 \ ['bigcup' , '∪'],
688 \ ['bigodot' , '⊙'],
689 \ ['bigoplus' , '⊕'],
690 \ ['bigotimes' , '⊗'],
691 \ ['bigsqcup' , '⊔'],
692 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100693 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200694 \ ['bigvee' , '⋁'],
695 \ ['bigwedge' , '⋀'],
696 \ ['blacksquare' , '∎'],
697 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100698 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200699 \ ['boxdot' , '⊡'],
700 \ ['boxminus' , '⊟'],
701 \ ['boxplus' , '⊞'],
702 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100703 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200704 \ ['bumpeq' , '≏'],
705 \ ['Bumpeq' , '≎'],
706 \ ['cap' , '∩'],
707 \ ['Cap' , '⋒'],
708 \ ['cdot' , '·'],
709 \ ['cdots' , '⋯'],
710 \ ['circ' , '∘'],
711 \ ['circeq' , '≗'],
712 \ ['circlearrowleft', '↺'],
713 \ ['circlearrowright', '↻'],
714 \ ['circledast' , '⊛'],
715 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200716 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['complement' , '∁'],
718 \ ['cong' , '≅'],
719 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200720 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200721 \ ['cup' , '∪'],
722 \ ['Cup' , '⋓'],
723 \ ['curlyeqprec' , '⋞'],
724 \ ['curlyeqsucc' , '⋟'],
725 \ ['curlyvee' , '⋎'],
726 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100727 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200728 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100729 \ ['ddagger' , '‡'],
730 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200731 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200732 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200733 \ ['div' , '÷'],
734 \ ['doteq' , '≐'],
735 \ ['doteqdot' , '≑'],
736 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100737 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200738 \ ['dotsb' , '⋯'],
739 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200740 \ ['dotsi' , '⋯'],
741 \ ['dotso' , '…'],
742 \ ['doublebarwedge' , '⩞'],
743 \ ['downarrow' , '↓'],
744 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100745 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['emptyset' , '∅'],
747 \ ['eqcirc' , '≖'],
748 \ ['eqsim' , '≂'],
749 \ ['eqslantgtr' , '⪖'],
750 \ ['eqslantless' , '⪕'],
751 \ ['equiv' , '≡'],
752 \ ['exists' , '∃'],
753 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200754 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200755 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100756 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200757 \ ['ge' , '≥'],
758 \ ['geq' , '≥'],
759 \ ['geqq' , '≧'],
760 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100761 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200762 \ ['gneqq' , '≩'],
763 \ ['gtrdot' , '⋗'],
764 \ ['gtreqless' , '⋛'],
765 \ ['gtrless' , '≷'],
766 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200767 \ ['hbar' , 'ℏ'],
768 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['hookleftarrow' , '↩'],
770 \ ['hookrightarrow' , '↪'],
771 \ ['iiint' , '∭'],
772 \ ['iint' , '∬'],
773 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200774 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200775 \ ['in' , '∈'],
776 \ ['infty' , '∞'],
777 \ ['int' , '∫'],
778 \ ['lceil' , '⌈'],
779 \ ['ldots' , '…'],
780 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100781 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200782 \ ['left(' , '('],
783 \ ['left\[' , '['],
784 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100785 \ ['leftarrow' , '←'],
786 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100787 \ ['leftarrowtail' , '↢'],
788 \ ['leftharpoondown', '↽'],
789 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100790 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100791 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200792 \ ['leftrightsquigarrow', '↭'],
793 \ ['leftthreetimes' , '⋋'],
794 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100795 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200796 \ ['leqq' , '≦'],
797 \ ['lessdot' , '⋖'],
798 \ ['lesseqgtr' , '⋚'],
799 \ ['lesssim' , '≲'],
800 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100801 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200802 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200803 \ ['lneqq' , '≨'],
804 \ ['ltimes' , '⋉'],
805 \ ['mapsto' , '↦'],
806 \ ['measuredangle' , '∡'],
807 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100808 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200809 \ ['mp' , '∓'],
810 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200811 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200812 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200813 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100814 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['neg' , '¬'],
816 \ ['neq' , '≠'],
817 \ ['nexists' , '∄'],
818 \ ['ngeq' , '≱'],
819 \ ['ngeqq' , '≱'],
820 \ ['ngtr' , '≯'],
821 \ ['ni' , '∋'],
822 \ ['nleftarrow' , '↚'],
823 \ ['nLeftarrow' , '⇍'],
824 \ ['nLeftrightarrow', '⇎'],
825 \ ['nleq' , '≰'],
826 \ ['nleqq' , '≰'],
827 \ ['nless' , '≮'],
828 \ ['nmid' , '∤'],
829 \ ['notin' , '∉'],
830 \ ['nprec' , '⊀'],
831 \ ['nrightarrow' , '↛'],
832 \ ['nRightarrow' , '⇏'],
833 \ ['nsim' , '≁'],
834 \ ['nsucc' , '⊁'],
835 \ ['ntriangleleft' , '⋪'],
836 \ ['ntrianglelefteq', '⋬'],
837 \ ['ntriangleright' , '⋫'],
838 \ ['ntrianglerighteq', '⋭'],
839 \ ['nvdash' , '⊬'],
840 \ ['nvDash' , '⊭'],
841 \ ['nVdash' , '⊮'],
842 \ ['nwarrow' , '↖'],
843 \ ['odot' , '⊙'],
844 \ ['oint' , '∮'],
845 \ ['ominus' , '⊖'],
846 \ ['oplus' , '⊕'],
847 \ ['oslash' , '⊘'],
848 \ ['otimes' , '⊗'],
849 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200850 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100851 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200852 \ ['partial' , '∂'],
853 \ ['perp' , '⊥'],
854 \ ['pitchfork' , '⋔'],
855 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200856 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100857 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200858 \ ['preccurlyeq' , '≼'],
859 \ ['preceq' , '⪯'],
860 \ ['precnapprox' , '⪹'],
861 \ ['precneqq' , '⪵'],
862 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200863 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['prod' , '∏'],
865 \ ['propto' , '∝'],
866 \ ['rceil' , '⌉'],
867 \ ['Re' , 'ℜ'],
868 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200869 \ ['right)' , ')'],
870 \ ['right]' , ']'],
871 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100872 \ ['rightarrow' , '→'],
873 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100874 \ ['rightarrowtail' , '↣'],
875 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200876 \ ['rightsquigarrow', '↝'],
877 \ ['rightthreetimes', '⋌'],
878 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200879 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200880 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200881 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200882 \ ['searrow' , '↘'],
883 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200884 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200885 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100886 \ ['simeq' , '⋍'],
887 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200888 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200889 \ ['sphericalangle' , '∢'],
890 \ ['sqcap' , '⊓'],
891 \ ['sqcup' , '⊔'],
892 \ ['sqsubset' , '⊏'],
893 \ ['sqsubseteq' , '⊑'],
894 \ ['sqsupset' , '⊐'],
895 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100896 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200897 \ ['subset' , '⊂'],
898 \ ['Subset' , '⋐'],
899 \ ['subseteq' , '⊆'],
900 \ ['subseteqq' , '⫅'],
901 \ ['subsetneq' , '⊊'],
902 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100904 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200905 \ ['succcurlyeq' , '≽'],
906 \ ['succeq' , '⪰'],
907 \ ['succnapprox' , '⪺'],
908 \ ['succneqq' , '⪶'],
909 \ ['succsim' , '≿'],
910 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100911 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200912 \ ['Supset' , '⋑'],
913 \ ['supseteq' , '⊇'],
914 \ ['supseteqq' , '⫆'],
915 \ ['supsetneq' , '⊋'],
916 \ ['supsetneqq' , '⫌'],
917 \ ['surd' , '√'],
918 \ ['swarrow' , '↙'],
919 \ ['therefore' , '∴'],
920 \ ['times' , '×'],
921 \ ['to' , '→'],
922 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200923 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200924 \ ['triangleleft' , '⊲'],
925 \ ['trianglelefteq' , '⊴'],
926 \ ['triangleq' , '≜'],
927 \ ['triangleright' , '⊳'],
928 \ ['trianglerighteq', '⊵'],
929 \ ['twoheadleftarrow', '↞'],
930 \ ['twoheadrightarrow', '↠'],
931 \ ['uparrow' , '↑'],
932 \ ['Uparrow' , '⇑'],
933 \ ['updownarrow' , '↕'],
934 \ ['Updownarrow' , '⇕'],
935 \ ['varnothing' , '∅'],
936 \ ['vartriangle' , '∆'],
937 \ ['vdash' , '⊢'],
938 \ ['vDash' , '⊨'],
939 \ ['Vdash' , '⊩'],
940 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200941 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100942 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200943 \ ['Vvdash' , '⊪'],
944 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200945 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200946 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100947" \ ['jmath' , 'X']
948" \ ['uminus' , 'X']
949" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200950 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100951 if texmath[0] =~ '\w$'
952 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
953 else
954 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
955 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200956 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200957
958 if &ambw == "double"
959 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
960 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
961 else
962 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
963 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
964 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200965
966 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
967 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
968 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
969 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
970 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
971 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
972 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
973 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
974 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
975 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
976 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
977 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
978 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
979 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
980 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
981 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
982 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
983 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
984 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
985 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100986" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200987 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200988
989 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200990 if s:tex_conceal =~ 'g'
991 fun! s:Greek(group,pat,cchar)
992 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
993 endfun
994 call s:Greek('texGreek','\\alpha\>' ,'α')
995 call s:Greek('texGreek','\\beta\>' ,'β')
996 call s:Greek('texGreek','\\gamma\>' ,'γ')
997 call s:Greek('texGreek','\\delta\>' ,'δ')
998 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
999 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1000 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1001 call s:Greek('texGreek','\\eta\>' ,'η')
1002 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001003 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001004 call s:Greek('texGreek','\\kappa\>' ,'κ')
1005 call s:Greek('texGreek','\\lambda\>' ,'λ')
1006 call s:Greek('texGreek','\\mu\>' ,'μ')
1007 call s:Greek('texGreek','\\nu\>' ,'ν')
1008 call s:Greek('texGreek','\\xi\>' ,'ξ')
1009 call s:Greek('texGreek','\\pi\>' ,'π')
1010 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1011 call s:Greek('texGreek','\\rho\>' ,'ρ')
1012 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1013 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001014 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001015 call s:Greek('texGreek','\\tau\>' ,'τ')
1016 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001017 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1018 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001019 call s:Greek('texGreek','\\chi\>' ,'χ')
1020 call s:Greek('texGreek','\\psi\>' ,'ψ')
1021 call s:Greek('texGreek','\\omega\>' ,'ω')
1022 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1023 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1024 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1025 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1026 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1027 call s:Greek('texGreek','\\Pi\>' ,'Π')
1028 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1029 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1030 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1031 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1032 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1033 delfun s:Greek
1034 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001035
1036 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001037 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001038 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001039 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1040 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1041 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001042 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001043 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001044 if a:pat =~ '^\\' || (a:leader == '\^' && a:pat =~ g:tex_superscripts) || (a:leader == '_' && a:pat =~ g:tex_subscripts)
1045" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1046 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001047 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001048 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001049 endfun
1050 call s:SuperSub('texSuperscript','\^','0','⁰')
1051 call s:SuperSub('texSuperscript','\^','1','¹')
1052 call s:SuperSub('texSuperscript','\^','2','²')
1053 call s:SuperSub('texSuperscript','\^','3','³')
1054 call s:SuperSub('texSuperscript','\^','4','⁴')
1055 call s:SuperSub('texSuperscript','\^','5','⁵')
1056 call s:SuperSub('texSuperscript','\^','6','⁶')
1057 call s:SuperSub('texSuperscript','\^','7','⁷')
1058 call s:SuperSub('texSuperscript','\^','8','⁸')
1059 call s:SuperSub('texSuperscript','\^','9','⁹')
1060 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1061 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1062 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1063 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1064 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1065 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1066 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1067 call s:SuperSub('texSuperscript','\^','h','ʰ')
1068 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1069 call s:SuperSub('texSuperscript','\^','j','ʲ')
1070 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1071 call s:SuperSub('texSuperscript','\^','l','ˡ')
1072 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1073 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1074 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1075 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1076 call s:SuperSub('texSuperscript','\^','r','ʳ')
1077 call s:SuperSub('texSuperscript','\^','s','ˢ')
1078 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1079 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1080 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1081 call s:SuperSub('texSuperscript','\^','w','ʷ')
1082 call s:SuperSub('texSuperscript','\^','x','ˣ')
1083 call s:SuperSub('texSuperscript','\^','y','ʸ')
1084 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1085 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1086 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1087 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1088 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1089 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1090 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1091 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1092 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1093 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1094 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1095 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1096 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1097 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1098 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1099 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1100 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1101 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1102 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001103 call s:SuperSub('texSuperscript','\^',',','︐')
1104 call s:SuperSub('texSuperscript','\^',':','︓')
1105 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001106 call s:SuperSub('texSuperscript','\^','+','⁺')
1107 call s:SuperSub('texSuperscript','\^','-','⁻')
1108 call s:SuperSub('texSuperscript','\^','<','˂')
1109 call s:SuperSub('texSuperscript','\^','>','˃')
1110 call s:SuperSub('texSuperscript','\^','/','ˊ')
1111 call s:SuperSub('texSuperscript','\^','(','⁽')
1112 call s:SuperSub('texSuperscript','\^',')','⁾')
1113 call s:SuperSub('texSuperscript','\^','\.','˙')
1114 call s:SuperSub('texSuperscript','\^','=','˭')
1115 call s:SuperSub('texSubscript','_','0','₀')
1116 call s:SuperSub('texSubscript','_','1','₁')
1117 call s:SuperSub('texSubscript','_','2','₂')
1118 call s:SuperSub('texSubscript','_','3','₃')
1119 call s:SuperSub('texSubscript','_','4','₄')
1120 call s:SuperSub('texSubscript','_','5','₅')
1121 call s:SuperSub('texSubscript','_','6','₆')
1122 call s:SuperSub('texSubscript','_','7','₇')
1123 call s:SuperSub('texSubscript','_','8','₈')
1124 call s:SuperSub('texSubscript','_','9','₉')
1125 call s:SuperSub('texSubscript','_','a','ₐ')
1126 call s:SuperSub('texSubscript','_','e','ₑ')
1127 call s:SuperSub('texSubscript','_','i','ᵢ')
1128 call s:SuperSub('texSubscript','_','o','ₒ')
1129 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001130 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001131 call s:SuperSub('texSubscript','_','+','₊')
1132 call s:SuperSub('texSubscript','_','-','₋')
1133 call s:SuperSub('texSubscript','_','/','ˏ')
1134 call s:SuperSub('texSubscript','_','(','₍')
1135 call s:SuperSub('texSubscript','_',')','₎')
1136 call s:SuperSub('texSubscript','_','\.','‸')
1137 call s:SuperSub('texSubscript','_','r','ᵣ')
1138 call s:SuperSub('texSubscript','_','v','ᵥ')
1139 call s:SuperSub('texSubscript','_','x','ₓ')
1140 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1141 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1142 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1143 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1144 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1145 delfun s:SuperSub
1146 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001147
1148 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001149 if s:tex_conceal =~ 'a'
1150 if b:tex_stylish
1151 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1152 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1153 else
1154 fun! s:Accents(chr,...)
1155 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001156 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001157 if i > a:0
1158 break
1159 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001160 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001161 let i= i + 1
1162 continue
1163 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001164 if accent =~ '\a'
1165 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1166 else
1167 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1168 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001169 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001170 endfor
1171 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001172 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1173 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1174 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1175 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1176 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1177 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1178 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1179 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1180 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1181 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1182 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1183 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1184 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1185 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1186 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1187 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1188 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1189 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1190 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1191 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1192 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1193 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1194 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1195 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1196 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1197 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1198 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1199 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1200 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1201 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1202 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1203 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1204 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1205 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1206 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1207 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1208 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1209 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001210 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1211 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001212 delfun s:Accents
1213 syn match texAccent '\\aa\>' conceal cchar=å
1214 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001215 syn match texAccent '\\o\>' conceal cchar=ø
1216 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001217 syn match texLigature '\\AE\>' conceal cchar=Æ
1218 syn match texLigature '\\ae\>' conceal cchar=æ
1219 syn match texLigature '\\oe\>' conceal cchar=œ
1220 syn match texLigature '\\OE\>' conceal cchar=Œ
1221 syn match texLigature '\\ss\>' conceal cchar=ß
1222 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001223 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001224endif
1225
1226" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001227" LaTeX synchronization: {{{1
1228syn sync maxlines=200
1229syn sync minlines=50
1230
1231syn sync match texSyncStop groupthere NONE "%stopzone\>"
1232
1233" Synchronization: {{{1
1234" The $..$ and $$..$$ make for impossible sync patterns
1235" (one can't tell if a "$$" starts or stops a math zone by itself)
1236" The following grouptheres coupled with minlines above
1237" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001238if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001239 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1240 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1241 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1242 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1243 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1244 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1245 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1246 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1247endif
1248
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001249" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001250" Highlighting: {{{1
1251if did_tex_syntax_inits == 1
1252 let did_tex_syntax_inits= 2
1253 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001254 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001255 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256 HiLink texBadMath texError
1257 HiLink texMathDelimBad texError
1258 HiLink texMathError texError
1259 if !b:tex_stylish
1260 HiLink texOnlyMath texError
1261 endif
1262 endif
1263 HiLink texError Error
1264 endif
1265
Bram Moolenaard38b0552012-04-25 19:07:41 +02001266 hi texBoldStyle gui=bold cterm=bold
1267 hi texItalStyle gui=italic cterm=italic
1268 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1269 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001270 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001271 HiLink texDefCmd texDef
1272 HiLink texDefName texDef
1273 HiLink texDocType texCmdName
1274 HiLink texDocTypeArgs texCmdArgs
1275 HiLink texInputFileOpt texCmdArgs
1276 HiLink texInputCurlies texDelimiter
1277 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001278 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279 HiLink texMathDelimSet1 texMathDelim
1280 HiLink texMathDelimSet2 texMathDelim
1281 HiLink texMathDelimKey texMathDelim
1282 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001283 HiLink texAccent texStatement
1284 HiLink texGreek texStatement
1285 HiLink texSuperscript texStatement
1286 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001287 HiLink texSuperscripts texSuperscript
1288 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001289 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001290 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001291 HiLink texMathZoneW texMath
1292 HiLink texMathZoneX texMath
1293 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001294 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001295 HiLink texMathZoneZ texMath
1296 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001297 HiLink texBeginEnd texCmdName
1298 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001299 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001300 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301 HiLink texTypeSize texType
1302 HiLink texTypeStyle texType
1303
1304 " Basic TeX highlighting groups
1305 HiLink texCmdArgs Number
1306 HiLink texCmdName Statement
1307 HiLink texComment Comment
1308 HiLink texDef Statement
1309 HiLink texDefParm Special
1310 HiLink texDelimiter Delimiter
1311 HiLink texInput Special
1312 HiLink texInputFile Special
1313 HiLink texLength Number
1314 HiLink texMath Special
1315 HiLink texMathDelim Statement
1316 HiLink texMathOper Operator
1317 HiLink texNewCmd Statement
1318 HiLink texNewEnv Statement
1319 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001320 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001321 HiLink texSection PreCondit
1322 HiLink texSpaceCodeChar Special
1323 HiLink texSpecialChar SpecialChar
1324 HiLink texStatement Statement
1325 HiLink texString String
1326 HiLink texTodo Todo
1327 HiLink texType Type
1328 HiLink texZone PreCondit
1329
1330 delcommand HiLink
1331endif
1332
Bram Moolenaar15146672011-10-20 22:22:38 +02001333" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001334delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001335unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001336let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001337let &cpo = s:keepcpo
1338unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001339" vim: ts=8 fdm=marker