blob: 65574211c4313d84854adf290d50e7acd62e50fc [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 Moolenaar802a0d92016-06-26 16:17:58 +020095echomsg "s:tex_subscripts=".s:tex_subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020096
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000097" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000098" The user may override the normal determination by setting
99" g:tex_stylish to 1 (for "*.sty" mode)
100" or to 0 else (normal "*.tex" mode)
101" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +0100102let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103if exists("g:tex_stylish")
104 let b:tex_stylish= g:tex_stylish
105elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100106 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000107 let b:tex_stylish= 1
108 else
109 let b:tex_stylish= 0
110 endif
111endif
112
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000113" handle folding {{{1
114if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100115 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000116elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100117 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000118 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 +0100119else
120 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000121endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100122if s: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 Moolenaarb4ff5182015-11-10 21:15:48 +0100125if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100126 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 Moolenaar91c49372016-05-08 09:50:29 +0200137elseif !has("patch-7.4.1142")
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100138 setl isk=48-57,a-z,A-Z,192-255
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139else
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100140 syn iskeyword 48-57,a-z,A-Z,192-255
Bram Moolenaaradc21822011-04-01 18:03:16 +0200141endif
142if b:tex_stylish
143 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100145if exists("g:tex_no_error") && g:tex_no_error
146 let s:tex_no_error= 1
147else
148 let s:tex_no_error= 0
149endif
150if exists("g:tex_comment_nospell") && g:tex_comment_nospell
151 let s:tex_comment_nospell= 1
152else
153 let s:tex_comment_nospell= 0
154endif
155if exists("g:tex_nospell") && g:tex_nospell
156 let s:tex_nospell = 1
157else
158 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200159endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160
161" Clusters: {{{1
162" --------
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100163syn 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 +0100164if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100165 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000166endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100167syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
168syn 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
169syn 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
170syn 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
171if !s:tex_nospell
172 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
173 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
Bram Moolenaard960d762011-09-21 19:22:10 +0200174else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100175 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
176 syn cluster 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 +0200177endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100178syn 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 +0100179syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100180if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100181 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
182 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
183 syn cluster texMatchGroup add=@texMathZones
184 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
185 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
186 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100187 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100188 syn cluster texMathMatchGroup add=texMathError
189 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100191 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000192 " following used in the \part \chapter \section \subsection \subsubsection
193 " \paragraph \subparagraph \author \title highlighting
194 syn cluster texDocGroup contains=texPartZone,@texPartGroup
195 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
196 syn cluster texChapterGroup contains=texSectionZone,texParaZone
197 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
198 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
199 syn cluster texSubSubSectionGroup contains=texParaZone
200 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200201 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100202 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
203 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200204 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205endif
206
207" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100208if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100209 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200210 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
211 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100212 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200213 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
214 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100215 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100216 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200217 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100218 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200219 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100220 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100222if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223 syn match texError "[}\])]"
224endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100225if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100226 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100227 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100228 syn match texMathError "}" contained
229 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100230 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100231 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232endif
233
234" TeX/LaTeX keywords: {{{1
235" Instead of trying to be All Knowing, I just match \..alphameric..
236" Note that *.tex files may not have "@" in their \commands
237if exists("g:tex_tex") || b:tex_stylish
238 syn match texStatement "\\[a-zA-Z@]\+"
239else
240 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100241 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242 syn match texError "\\\a*@[a-zA-Z@]*"
243 endif
244endif
245
246" TeX/LaTeX delimiters: {{{1
247syn match texDelimiter "&"
248syn match texDelimiter "\\\\"
249
250" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200251syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252
253" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
254if b:tex_stylish
255 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
256 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
257else
258 syn match texAccent "\\[bcdvuH]\A"me=e-1
259 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
260endif
261syn match texAccent "\\[bcdvuH]$"
262syn match texAccent +\\[=^.\~"`']+
263syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
264syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
265
266" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200267syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100268if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100269 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200270 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100271endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272
273" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200274syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100275if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100276 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
277endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000278
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000279" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100280if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200281 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000282endif
283
Bram Moolenaar071d4272004-06-13 20:20:40 +0000284" TeX input: {{{1
285syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100286syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
288syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100289if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100290 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
291endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292
293" Type Styles (LaTeX 2.09): {{{1
294syn match texTypeStyle "\\rm\>"
295syn match texTypeStyle "\\em\>"
296syn match texTypeStyle "\\bf\>"
297syn match texTypeStyle "\\it\>"
298syn match texTypeStyle "\\sl\>"
299syn match texTypeStyle "\\sf\>"
300syn match texTypeStyle "\\sc\>"
301syn match texTypeStyle "\\tt\>"
302
303" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200304if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200305 syn match texTypeStyle "\\textbf\>"
306 syn match texTypeStyle "\\textit\>"
307endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308syn match texTypeStyle "\\textmd\>"
309syn match texTypeStyle "\\textrm\>"
310syn match texTypeStyle "\\textsc\>"
311syn match texTypeStyle "\\textsf\>"
312syn match texTypeStyle "\\textsl\>"
313syn match texTypeStyle "\\texttt\>"
314syn match texTypeStyle "\\textup\>"
315syn match texTypeStyle "\\emph\>"
316
317syn match texTypeStyle "\\mathbb\>"
318syn match texTypeStyle "\\mathbf\>"
319syn match texTypeStyle "\\mathcal\>"
320syn match texTypeStyle "\\mathfrak\>"
321syn match texTypeStyle "\\mathit\>"
322syn match texTypeStyle "\\mathnormal\>"
323syn match texTypeStyle "\\mathrm\>"
324syn match texTypeStyle "\\mathsf\>"
325syn match texTypeStyle "\\mathtt\>"
326
327syn match texTypeStyle "\\rmfamily\>"
328syn match texTypeStyle "\\sffamily\>"
329syn match texTypeStyle "\\ttfamily\>"
330
331syn match texTypeStyle "\\itshape\>"
332syn match texTypeStyle "\\scshape\>"
333syn match texTypeStyle "\\slshape\>"
334syn match texTypeStyle "\\upshape\>"
335
336syn match texTypeStyle "\\bfseries\>"
337syn match texTypeStyle "\\mdseries\>"
338
339" Some type sizes: {{{1
340syn match texTypeSize "\\tiny\>"
341syn match texTypeSize "\\scriptsize\>"
342syn match texTypeSize "\\footnotesize\>"
343syn match texTypeSize "\\small\>"
344syn match texTypeSize "\\normalsize\>"
345syn match texTypeSize "\\large\>"
346syn match texTypeSize "\\Large\>"
347syn match texTypeSize "\\LARGE\>"
348syn match texTypeSize "\\huge\>"
349syn match texTypeSize "\\Huge\>"
350
351" Spacecodes (TeX'isms): {{{1
352" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
353syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
354syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
355
356" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100357if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100358 if !s:tex_nospell
359 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
360 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
361 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
362 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
363 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
364 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
365 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
366 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
367 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
368 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
369 else
370 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
371 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
372 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
373 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
374 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
375 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
376 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
377 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
378 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
379 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 +0100380 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000381endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000382
Bram Moolenaard38b0552012-04-25 19:07:41 +0200383" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100384if s:tex_fast =~# 'b'
385 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200386 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200387 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
388 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
389 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
390 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
391 else
392 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
393 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
394 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
395 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200396 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100397 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200398endif
399
Bram Moolenaar071d4272004-06-13 20:20:40 +0000400" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100401if !exists("g:tex_no_math") && !s:tex_no_error
402 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
404 syn match texBadMath "\\[\])]"
405endif
406
407" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100408if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000409 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000410 " Starred forms are created if starform is true. Starred
411 " forms have syntax group and synchronization groups with a
412 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
413 fun! TexNewMathZone(sfx,mathzone,starform)
414 let grpname = "texMathZone".a:sfx
415 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100416 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000417 let foldcmd= " fold"
418 else
419 let foldcmd= ""
420 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100422 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100423 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
424 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
425 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
426 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100427 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428 if a:starform
429 let grpname = "texMathZone".a:sfx.'S'
430 let syncname = "texSyncMathZone".a:sfx.'S'
431 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100432 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100433 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
434 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
435 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
436 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100437 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000438 endif
439 endfun
440
441 " Standard Math Zones: {{{2
442 call TexNewMathZone("A","align",1)
443 call TexNewMathZone("B","alignat",1)
444 call TexNewMathZone("C","displaymath",1)
445 call TexNewMathZone("D","eqnarray",1)
446 call TexNewMathZone("E","equation",1)
447 call TexNewMathZone("F","flalign",1)
448 call TexNewMathZone("G","gather",1)
449 call TexNewMathZone("H","math",1)
450 call TexNewMathZone("I","multline",1)
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100451 call TexNewMathZone("J","subequations",0)
452 call TexNewMathZone("K","xalignat",1)
453 call TexNewMathZone("L","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454
455 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100456 if s:tex_fast =~# 'M'
457 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200458 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
459 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
460 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
461 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100462 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200463 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
464 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100465 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200466 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100467 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200468 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200469 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000470
471 syn match texMathOper "[_^=]" contained
472
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200473 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100474 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100475 if !exists("g:tex_nospell") || !g:tex_nospell
476 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
477 else
478 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
479 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200480 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200481
Bram Moolenaar071d4272004-06-13 20:20:40 +0000482 " \left..something.. and \right..something.. support: {{{2
483 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100484 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200485 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
486 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200487 let s:texMathDelimList=[
488 \ ['<' , '<'] ,
489 \ ['>' , '>'] ,
490 \ ['(' , '('] ,
491 \ [')' , ')'] ,
492 \ ['\[' , '['] ,
493 \ [']' , ']'] ,
494 \ ['\\{' , '{'] ,
495 \ ['\\}' , '}'] ,
496 \ ['|' , '|'] ,
497 \ ['\\|' , '‖'] ,
498 \ ['\\backslash' , '\'] ,
499 \ ['\\downarrow' , '↓'] ,
500 \ ['\\Downarrow' , '⇓'] ,
501 \ ['\\langle' , '<'] ,
502 \ ['\\lbrace' , '['] ,
503 \ ['\\lceil' , '⌈'] ,
504 \ ['\\lfloor' , '⌊'] ,
505 \ ['\\lgroup' , '⌊'] ,
506 \ ['\\lmoustache' , '⎛'] ,
507 \ ['\\rangle' , '>'] ,
508 \ ['\\rbrace' , ']'] ,
509 \ ['\\rceil' , '⌉'] ,
510 \ ['\\rfloor' , '⌋'] ,
511 \ ['\\rgroup' , '⌋'] ,
512 \ ['\\rmoustache' , '⎞'] ,
513 \ ['\\uparrow' , '↑'] ,
514 \ ['\\Uparrow' , '↑'] ,
515 \ ['\\updownarrow', '↕'] ,
516 \ ['\\Updownarrow', '⇕']]
517 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
518 for texmath in s:texMathDelimList
519 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
520 endfor
521
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200522 else
523 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200524 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
525 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
526 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
527 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
528 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
529 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
530 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
531 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200532 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000533 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
534 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000535endif
536
537" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
538syn match texSpecialChar "\\[$&%#{}_]"
539if b:tex_stylish
540 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
541else
542 syn match texSpecialChar "\\[SP@]\A"me=e-1
543endif
544syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100545if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000546 syn match texOnlyMath "[_^]"
547endif
548syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200549if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200550 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
551 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
552 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
553 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
554 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
555endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000556
557" Comments: {{{1
558" Normal TeX LaTeX : %....
559" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100560if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000561 syn cluster texCommentGroup contains=texTodo,@Spell
562else
563 syn cluster texCommentGroup contains=texTodo,@NoSpell
564endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000565syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000566syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000567syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100568if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100569 syn match texComment "\^\^A.*$" contains=@texCommentGroup
570 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000571else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100572 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100573 " allows syntax-folding of 2 or more contiguous comment lines
574 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100575 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100576 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100577 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
578 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 +0000579 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100580 else
581 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100582 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100583 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100584 endif
585 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000586endif
587
588" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200589" will appropriately terminate.
590" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100591if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100592 if exists("g:tex_verbspell") && g:tex_verbspell
593 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
594 " listings package:
595 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
596 if version < 600
597 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
598 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200599 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100600 if b:tex_stylish
601 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
602 else
603 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
604 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200605 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100606 else
607 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
608 if version < 600
609 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
610 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200611 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100612 if b:tex_stylish
613 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
614 else
615 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
616 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200617 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100618 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619endif
620
621" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100622if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100623 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
624 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
625 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
626 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
627 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
628 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
629 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200630 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100631endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200632syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000633
634" Handle newcommand, newenvironment : {{{1
635syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100636if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100637 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
638 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
639 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
640endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000641syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100642if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100643 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
644 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
645 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
646endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000647
648" Definitions/Commands: {{{1
649syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
650if b:tex_stylish
651 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
652 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
653else
654 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
655 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
656endif
657syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
658syn match texDefParm contained "#\d\+"
659
660" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000661syn 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 +0000662
663" TeX String Delimiters: {{{1
664syn match texString "\(``\|''\|,,\)"
665
Bram Moolenaar5c736222010-01-06 20:54:52 +0100666" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100667if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100668 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100669 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
670 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100671 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100672 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100673 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
674 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
675 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100676endif
677
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200678" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200679if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200680
681 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200682 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100683 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200684 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200685 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200686 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100687 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200688 \ ['angle' , '∠'],
689 \ ['approx' , '≈'],
690 \ ['ast' , '∗'],
691 \ ['asymp' , '≍'],
692 \ ['backepsilon' , '∍'],
693 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200694 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200695 \ ['barwedge' , '⊼'],
696 \ ['because' , '∵'],
697 \ ['between' , '≬'],
698 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100699 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200700 \ ['bigcup' , '∪'],
701 \ ['bigodot' , '⊙'],
702 \ ['bigoplus' , '⊕'],
703 \ ['bigotimes' , '⊗'],
704 \ ['bigsqcup' , '⊔'],
705 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100706 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200707 \ ['bigvee' , '⋁'],
708 \ ['bigwedge' , '⋀'],
709 \ ['blacksquare' , '∎'],
710 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['boxdot' , '⊡'],
713 \ ['boxminus' , '⊟'],
714 \ ['boxplus' , '⊞'],
715 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100716 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['bumpeq' , '≏'],
718 \ ['Bumpeq' , '≎'],
719 \ ['cap' , '∩'],
720 \ ['Cap' , '⋒'],
721 \ ['cdot' , '·'],
722 \ ['cdots' , '⋯'],
723 \ ['circ' , '∘'],
724 \ ['circeq' , '≗'],
725 \ ['circlearrowleft', '↺'],
726 \ ['circlearrowright', '↻'],
727 \ ['circledast' , '⊛'],
728 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200729 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200730 \ ['complement' , '∁'],
731 \ ['cong' , '≅'],
732 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200733 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200734 \ ['cup' , '∪'],
735 \ ['Cup' , '⋓'],
736 \ ['curlyeqprec' , '⋞'],
737 \ ['curlyeqsucc' , '⋟'],
738 \ ['curlyvee' , '⋎'],
739 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100740 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200741 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100742 \ ['ddagger' , '‡'],
743 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200745 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['div' , '÷'],
747 \ ['doteq' , '≐'],
748 \ ['doteqdot' , '≑'],
749 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100750 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200751 \ ['dotsb' , '⋯'],
752 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200753 \ ['dotsi' , '⋯'],
754 \ ['dotso' , '…'],
755 \ ['doublebarwedge' , '⩞'],
756 \ ['downarrow' , '↓'],
757 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100758 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200759 \ ['emptyset' , '∅'],
760 \ ['eqcirc' , '≖'],
761 \ ['eqsim' , '≂'],
762 \ ['eqslantgtr' , '⪖'],
763 \ ['eqslantless' , '⪕'],
764 \ ['equiv' , '≡'],
765 \ ['exists' , '∃'],
766 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200767 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200768 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100769 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200770 \ ['ge' , '≥'],
771 \ ['geq' , '≥'],
772 \ ['geqq' , '≧'],
773 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100774 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200775 \ ['gneqq' , '≩'],
776 \ ['gtrdot' , '⋗'],
777 \ ['gtreqless' , '⋛'],
778 \ ['gtrless' , '≷'],
779 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200780 \ ['hbar' , 'ℏ'],
781 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200782 \ ['hookleftarrow' , '↩'],
783 \ ['hookrightarrow' , '↪'],
784 \ ['iiint' , '∭'],
785 \ ['iint' , '∬'],
786 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200787 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['in' , '∈'],
789 \ ['infty' , '∞'],
790 \ ['int' , '∫'],
791 \ ['lceil' , '⌈'],
792 \ ['ldots' , '…'],
793 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100794 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200795 \ ['left(' , '('],
796 \ ['left\[' , '['],
797 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100798 \ ['leftarrow' , '←'],
799 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100800 \ ['leftarrowtail' , '↢'],
801 \ ['leftharpoondown', '↽'],
802 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100803 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100804 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200805 \ ['leftrightsquigarrow', '↭'],
806 \ ['leftthreetimes' , '⋋'],
807 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100808 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200809 \ ['leqq' , '≦'],
810 \ ['lessdot' , '⋖'],
811 \ ['lesseqgtr' , '⋚'],
812 \ ['lesssim' , '≲'],
813 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100814 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200815 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200816 \ ['lneqq' , '≨'],
817 \ ['ltimes' , '⋉'],
818 \ ['mapsto' , '↦'],
819 \ ['measuredangle' , '∡'],
820 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100821 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200822 \ ['mp' , '∓'],
823 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200824 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200825 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200826 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100827 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200828 \ ['neg' , '¬'],
829 \ ['neq' , '≠'],
830 \ ['nexists' , '∄'],
831 \ ['ngeq' , '≱'],
832 \ ['ngeqq' , '≱'],
833 \ ['ngtr' , '≯'],
834 \ ['ni' , '∋'],
835 \ ['nleftarrow' , '↚'],
836 \ ['nLeftarrow' , '⇍'],
837 \ ['nLeftrightarrow', '⇎'],
838 \ ['nleq' , '≰'],
839 \ ['nleqq' , '≰'],
840 \ ['nless' , '≮'],
841 \ ['nmid' , '∤'],
842 \ ['notin' , '∉'],
843 \ ['nprec' , '⊀'],
844 \ ['nrightarrow' , '↛'],
845 \ ['nRightarrow' , '⇏'],
846 \ ['nsim' , '≁'],
847 \ ['nsucc' , '⊁'],
848 \ ['ntriangleleft' , '⋪'],
849 \ ['ntrianglelefteq', '⋬'],
850 \ ['ntriangleright' , '⋫'],
851 \ ['ntrianglerighteq', '⋭'],
852 \ ['nvdash' , '⊬'],
853 \ ['nvDash' , '⊭'],
854 \ ['nVdash' , '⊮'],
855 \ ['nwarrow' , '↖'],
856 \ ['odot' , '⊙'],
857 \ ['oint' , '∮'],
858 \ ['ominus' , '⊖'],
859 \ ['oplus' , '⊕'],
860 \ ['oslash' , '⊘'],
861 \ ['otimes' , '⊗'],
862 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200863 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100864 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200865 \ ['partial' , '∂'],
866 \ ['perp' , '⊥'],
867 \ ['pitchfork' , '⋔'],
868 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200869 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100870 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200871 \ ['preccurlyeq' , '≼'],
872 \ ['preceq' , '⪯'],
873 \ ['precnapprox' , '⪹'],
874 \ ['precneqq' , '⪵'],
875 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200876 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200877 \ ['prod' , '∏'],
878 \ ['propto' , '∝'],
879 \ ['rceil' , '⌉'],
880 \ ['Re' , 'ℜ'],
881 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200882 \ ['right)' , ')'],
883 \ ['right]' , ']'],
884 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100885 \ ['rightarrow' , '→'],
886 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100887 \ ['rightarrowtail' , '↣'],
888 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200889 \ ['rightsquigarrow', '↝'],
890 \ ['rightthreetimes', '⋌'],
891 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200892 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200893 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200894 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200895 \ ['searrow' , '↘'],
896 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200897 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200898 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100899 \ ['simeq' , '⋍'],
900 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200901 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200902 \ ['sphericalangle' , '∢'],
903 \ ['sqcap' , '⊓'],
904 \ ['sqcup' , '⊔'],
905 \ ['sqsubset' , '⊏'],
906 \ ['sqsubseteq' , '⊑'],
907 \ ['sqsupset' , '⊐'],
908 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100909 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200910 \ ['subset' , '⊂'],
911 \ ['Subset' , '⋐'],
912 \ ['subseteq' , '⊆'],
913 \ ['subseteqq' , '⫅'],
914 \ ['subsetneq' , '⊊'],
915 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200916 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100917 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200918 \ ['succcurlyeq' , '≽'],
919 \ ['succeq' , '⪰'],
920 \ ['succnapprox' , '⪺'],
921 \ ['succneqq' , '⪶'],
922 \ ['succsim' , '≿'],
923 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100924 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200925 \ ['Supset' , '⋑'],
926 \ ['supseteq' , '⊇'],
927 \ ['supseteqq' , '⫆'],
928 \ ['supsetneq' , '⊋'],
929 \ ['supsetneqq' , '⫌'],
930 \ ['surd' , '√'],
931 \ ['swarrow' , '↙'],
932 \ ['therefore' , '∴'],
933 \ ['times' , '×'],
934 \ ['to' , '→'],
935 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200936 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200937 \ ['triangleleft' , '⊲'],
938 \ ['trianglelefteq' , '⊴'],
939 \ ['triangleq' , '≜'],
940 \ ['triangleright' , '⊳'],
941 \ ['trianglerighteq', '⊵'],
942 \ ['twoheadleftarrow', '↞'],
943 \ ['twoheadrightarrow', '↠'],
944 \ ['uparrow' , '↑'],
945 \ ['Uparrow' , '⇑'],
946 \ ['updownarrow' , '↕'],
947 \ ['Updownarrow' , '⇕'],
948 \ ['varnothing' , '∅'],
949 \ ['vartriangle' , '∆'],
950 \ ['vdash' , '⊢'],
951 \ ['vDash' , '⊨'],
952 \ ['Vdash' , '⊩'],
953 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200954 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100955 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200956 \ ['Vvdash' , '⊪'],
957 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200958 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200959 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100960" \ ['jmath' , 'X']
961" \ ['uminus' , 'X']
962" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200963 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100964 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100965 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
966 else
967 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
968 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200969 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200970
971 if &ambw == "double"
972 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
973 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
974 else
975 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
976 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
977 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200978
979 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
980 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
981 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
982 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
983 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
984 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
985 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
986 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
987 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
988 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
989 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
990 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
991 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
992 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
993 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
994 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
995 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
996 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
997 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
998 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100999" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001000 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001001
1002 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001003 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001004 fun! s:Greek(group,pat,cchar)
1005 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1006 endfun
1007 call s:Greek('texGreek','\\alpha\>' ,'α')
1008 call s:Greek('texGreek','\\beta\>' ,'β')
1009 call s:Greek('texGreek','\\gamma\>' ,'γ')
1010 call s:Greek('texGreek','\\delta\>' ,'δ')
1011 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1012 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1013 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1014 call s:Greek('texGreek','\\eta\>' ,'η')
1015 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001016 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001017 call s:Greek('texGreek','\\kappa\>' ,'κ')
1018 call s:Greek('texGreek','\\lambda\>' ,'λ')
1019 call s:Greek('texGreek','\\mu\>' ,'μ')
1020 call s:Greek('texGreek','\\nu\>' ,'ν')
1021 call s:Greek('texGreek','\\xi\>' ,'ξ')
1022 call s:Greek('texGreek','\\pi\>' ,'π')
1023 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1024 call s:Greek('texGreek','\\rho\>' ,'ρ')
1025 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1026 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001027 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001028 call s:Greek('texGreek','\\tau\>' ,'τ')
1029 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001030 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1031 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001032 call s:Greek('texGreek','\\chi\>' ,'χ')
1033 call s:Greek('texGreek','\\psi\>' ,'ψ')
1034 call s:Greek('texGreek','\\omega\>' ,'ω')
1035 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1036 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1037 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1038 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1039 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1040 call s:Greek('texGreek','\\Pi\>' ,'Π')
1041 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1042 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1043 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1044 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1045 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1046 delfun s:Greek
1047 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001048
1049 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001050 if s:tex_conceal =~# 's'
1051 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001052 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1053 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1054 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001055 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001056 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001057 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001058" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1059 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001060 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001061 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001062 endfun
1063 call s:SuperSub('texSuperscript','\^','0','⁰')
1064 call s:SuperSub('texSuperscript','\^','1','¹')
1065 call s:SuperSub('texSuperscript','\^','2','²')
1066 call s:SuperSub('texSuperscript','\^','3','³')
1067 call s:SuperSub('texSuperscript','\^','4','⁴')
1068 call s:SuperSub('texSuperscript','\^','5','⁵')
1069 call s:SuperSub('texSuperscript','\^','6','⁶')
1070 call s:SuperSub('texSuperscript','\^','7','⁷')
1071 call s:SuperSub('texSuperscript','\^','8','⁸')
1072 call s:SuperSub('texSuperscript','\^','9','⁹')
1073 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1074 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1075 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1076 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1077 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1078 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1079 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1080 call s:SuperSub('texSuperscript','\^','h','ʰ')
1081 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1082 call s:SuperSub('texSuperscript','\^','j','ʲ')
1083 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1084 call s:SuperSub('texSuperscript','\^','l','ˡ')
1085 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1086 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1087 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1088 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1089 call s:SuperSub('texSuperscript','\^','r','ʳ')
1090 call s:SuperSub('texSuperscript','\^','s','ˢ')
1091 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1092 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1093 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1094 call s:SuperSub('texSuperscript','\^','w','ʷ')
1095 call s:SuperSub('texSuperscript','\^','x','ˣ')
1096 call s:SuperSub('texSuperscript','\^','y','ʸ')
1097 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1098 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1099 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1100 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1101 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1102 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1103 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1104 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1105 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1106 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1107 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1108 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1109 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1110 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1111 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1112 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1113 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1114 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1115 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001116 call s:SuperSub('texSuperscript','\^',',','︐')
1117 call s:SuperSub('texSuperscript','\^',':','︓')
1118 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001119 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('texSuperscript','\^','=','˭')
1128 call s:SuperSub('texSubscript','_','0','₀')
1129 call s:SuperSub('texSubscript','_','1','₁')
1130 call s:SuperSub('texSubscript','_','2','₂')
1131 call s:SuperSub('texSubscript','_','3','₃')
1132 call s:SuperSub('texSubscript','_','4','₄')
1133 call s:SuperSub('texSubscript','_','5','₅')
1134 call s:SuperSub('texSubscript','_','6','₆')
1135 call s:SuperSub('texSubscript','_','7','₇')
1136 call s:SuperSub('texSubscript','_','8','₈')
1137 call s:SuperSub('texSubscript','_','9','₉')
1138 call s:SuperSub('texSubscript','_','a','ₐ')
1139 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001140 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001141 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001142 call s:SuperSub('texSubscript','_','j','ⱼ')
1143 call s:SuperSub('texSubscript','_','k','ₖ')
1144 call s:SuperSub('texSubscript','_','l','ₗ')
1145 call s:SuperSub('texSubscript','_','m','ₘ')
1146 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001147 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001148 call s:SuperSub('texSubscript','_','p','ₚ')
1149 call s:SuperSub('texSubscript','_','r','ᵣ')
1150 call s:SuperSub('texSubscript','_','s','ₛ')
1151 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001152 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001153 call s:SuperSub('texSubscript','_','v','ᵥ')
1154 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001155 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001156 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','_','\.','‸')
1162 call s:SuperSub('texSubscript','_','r','ᵣ')
1163 call s:SuperSub('texSubscript','_','v','ᵥ')
1164 call s:SuperSub('texSubscript','_','x','ₓ')
1165 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1166 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1167 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1168 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1169 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001170
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001171 delfun s:SuperSub
1172 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001173
1174 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001175 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001176 if b:tex_stylish
1177 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1178 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1179 else
1180 fun! s:Accents(chr,...)
1181 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001182 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001183 if i > a:0
1184 break
1185 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001186 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001187 let i= i + 1
1188 continue
1189 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001190 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001191 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1192 else
1193 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1194 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001195 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001196 endfor
1197 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001198 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1199 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1200 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1201 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1202 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1203 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1204 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1205 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1206 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1207 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1208 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1209 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1210 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1211 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1212 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1213 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1214 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1215 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1216 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1217 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1218 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1219 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1220 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1221 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1222 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1223 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1224 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1225 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1226 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1227 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1228 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1229 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1230 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1231 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1232 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1233 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1234 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1235 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001236 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1237 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001238 delfun s:Accents
1239 syn match texAccent '\\aa\>' conceal cchar=å
1240 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001241 syn match texAccent '\\o\>' conceal cchar=ø
1242 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001243 syn match texLigature '\\AE\>' conceal cchar=Æ
1244 syn match texLigature '\\ae\>' conceal cchar=æ
1245 syn match texLigature '\\oe\>' conceal cchar=œ
1246 syn match texLigature '\\OE\>' conceal cchar=Œ
1247 syn match texLigature '\\ss\>' conceal cchar=ß
1248 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001249 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001250endif
1251
1252" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001253" LaTeX synchronization: {{{1
1254syn sync maxlines=200
1255syn sync minlines=50
1256
1257syn sync match texSyncStop groupthere NONE "%stopzone\>"
1258
1259" Synchronization: {{{1
1260" The $..$ and $$..$$ make for impossible sync patterns
1261" (one can't tell if a "$$" starts or stops a math zone by itself)
1262" The following grouptheres coupled with minlines above
1263" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001264if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001265 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1266 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1267 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1268 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1269 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1270 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1271 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1272 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1273endif
1274
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001275" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001276" Highlighting: {{{1
1277if did_tex_syntax_inits == 1
1278 let did_tex_syntax_inits= 2
1279 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001280 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001281 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282 HiLink texBadMath texError
1283 HiLink texMathDelimBad texError
1284 HiLink texMathError texError
1285 if !b:tex_stylish
1286 HiLink texOnlyMath texError
1287 endif
1288 endif
1289 HiLink texError Error
1290 endif
1291
Bram Moolenaard38b0552012-04-25 19:07:41 +02001292 hi texBoldStyle gui=bold cterm=bold
1293 hi texItalStyle gui=italic cterm=italic
1294 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1295 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001296 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297 HiLink texDefCmd texDef
1298 HiLink texDefName texDef
1299 HiLink texDocType texCmdName
1300 HiLink texDocTypeArgs texCmdArgs
1301 HiLink texInputFileOpt texCmdArgs
1302 HiLink texInputCurlies texDelimiter
1303 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001304 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001305 HiLink texMathDelimSet1 texMathDelim
1306 HiLink texMathDelimSet2 texMathDelim
1307 HiLink texMathDelimKey texMathDelim
1308 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001309 HiLink texAccent texStatement
1310 HiLink texGreek texStatement
1311 HiLink texSuperscript texStatement
1312 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001313 HiLink texSuperscripts texSuperscript
1314 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001315 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001316 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001317 HiLink texMathZoneW texMath
1318 HiLink texMathZoneX texMath
1319 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001320 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001321 HiLink texMathZoneZ texMath
1322 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001323 HiLink texBeginEnd texCmdName
1324 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001325 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001326 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327 HiLink texTypeSize texType
1328 HiLink texTypeStyle texType
1329
1330 " Basic TeX highlighting groups
1331 HiLink texCmdArgs Number
1332 HiLink texCmdName Statement
1333 HiLink texComment Comment
1334 HiLink texDef Statement
1335 HiLink texDefParm Special
1336 HiLink texDelimiter Delimiter
1337 HiLink texInput Special
1338 HiLink texInputFile Special
1339 HiLink texLength Number
1340 HiLink texMath Special
1341 HiLink texMathDelim Statement
1342 HiLink texMathOper Operator
1343 HiLink texNewCmd Statement
1344 HiLink texNewEnv Statement
1345 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001346 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001347 HiLink texSection PreCondit
1348 HiLink texSpaceCodeChar Special
1349 HiLink texSpecialChar SpecialChar
1350 HiLink texStatement Statement
1351 HiLink texString String
1352 HiLink texTodo Todo
1353 HiLink texType Type
1354 HiLink texZone PreCondit
1355
1356 delcommand HiLink
1357endif
1358
Bram Moolenaar15146672011-10-20 22:22:38 +02001359" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001360delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001361unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001362let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001363let &cpo = s:keepcpo
1364unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001365" vim: ts=8 fdm=marker