blob: ec0f7b99bdfccf99689c4806f854540f7111f3e4 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar1d9215b2020-01-25 13:27:42 +01003" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
Bram Moolenaar2547aa92020-07-26 17:00:44 +02004" Last Change: Jun 29, 2020
5" Version: 119
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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020043" quit when a syntax file was already loaded
44if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000045 finish
46endif
Bram Moolenaar15146672011-10-20 22:22:38 +020047let s:keepcpo= &cpo
48set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020049scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000050
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020051" by default, enable all region-based highlighting
52let s:tex_fast= "bcmMprsSvV"
53if exists("g:tex_fast")
54 if type(g:tex_fast) != 1
55 " g:tex_fast exists and is not a string, so
56 " turn off all optional region-based highighting
57 let s:tex_fast= ""
58 else
59 let s:tex_fast= g:tex_fast
60 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000061endif
62
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020063" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020064" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020065if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020066 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020067else
68 let s:tex_conceal= g:tex_conceal
69endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020070if !exists("g:tex_superscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020071 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020072else
73 let s:tex_superscripts= g:tex_superscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020074endif
75if !exists("g:tex_subscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020076 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020077else
78 let s:tex_subscripts= g:tex_subscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020079endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020080
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000081" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000082" The user may override the normal determination by setting
83" g:tex_stylish to 1 (for "*.sty" mode)
84" or to 0 else (normal "*.tex" mode)
85" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010086let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000087if exists("g:tex_stylish")
88 let b:tex_stylish= g:tex_stylish
89elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010090 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000091 let b:tex_stylish= 1
92 else
93 let b:tex_stylish= 0
94 endif
95endif
96
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000097" handle folding {{{1
98if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010099 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000100elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100101 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000102 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 +0100103else
104 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000105endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100106if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200107 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000108endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100109if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100110 com! -nargs=* TexFold <args> fold
111else
112 com! -nargs=* TexFold <args>
113endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000114
Bram Moolenaaradc21822011-04-01 18:03:16 +0200115" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200117" One may override this iskeyword setting by providing
118" g:tex_isk
119if exists("g:tex_isk")
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200120 if b:tex_stylish && g:tex_isk !~ '@'
121 let b:tex_isk= '@,'.g:tex_isk
122 else
123 let b:tex_isk= g:tex_isk
124 endif
125elseif b:tex_stylish
126 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127else
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200128 let b:tex_isk="48-57,a-z,A-Z,192-255"
Bram Moolenaaradc21822011-04-01 18:03:16 +0200129endif
Bram Moolenaar723dd942019-04-04 13:11:03 +0200130if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200131 exe "syn iskeyword ".b:tex_isk
132else
133 exe "setl isk=".b:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100135if exists("g:tex_no_error") && g:tex_no_error
136 let s:tex_no_error= 1
137else
138 let s:tex_no_error= 0
139endif
140if exists("g:tex_comment_nospell") && g:tex_comment_nospell
141 let s:tex_comment_nospell= 1
142else
143 let s:tex_comment_nospell= 0
144endif
145if exists("g:tex_nospell") && g:tex_nospell
146 let s:tex_nospell = 1
147else
148 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200149endif
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200150if exists("g:tex_matchcheck")
151 let s:tex_matchcheck= g:tex_matchcheck
152else
153 let s:tex_matchcheck= '[({[]'
154endif
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100155if exists("g:tex_excludematcher")
156 let s:tex_excludematcher= g:tex_excludematcher
157else
158 let s:tex_excludematcher= 0
159endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160
161" Clusters: {{{1
162" --------
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200163syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones
Bram Moolenaara0f849e2015-10-30 14:37:44 +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
Bram Moolenaar723dd942019-04-04 13:11:03 +0200168syn 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,texEmphStyle,texNoSpell
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100169syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,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,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,texEmphStyle,texItalBoldStyle,texNoSpell
171if !s:tex_excludematcher
172 syn cluster texBoldGroup add=texMatcher
173 syn cluster texItalGroup add=texMatcher
174endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100175if !s:tex_nospell
Bram Moolenaarb730f0c2018-11-25 03:56:26 +0100176 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,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
177 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
178 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell
Bram Moolenaard960d762011-09-21 19:22:10 +0200179else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100180 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200181 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100182 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 +0200183endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200184syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100185syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100186if !exists("g:tex_no_math")
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200187 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100188 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
189 syn cluster texMatchGroup add=@texMathZones
190 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
191 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
192 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100193 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100194 syn cluster texMathMatchGroup add=texMathError
195 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000196 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100197 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000198 " following used in the \part \chapter \section \subsection \subsubsection
199 " \paragraph \subparagraph \author \title highlighting
200 syn cluster texDocGroup contains=texPartZone,@texPartGroup
201 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
202 syn cluster texChapterGroup contains=texSectionZone,texParaZone
203 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
204 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
205 syn cluster texSubSubSectionGroup contains=texParaZone
206 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200207 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100208 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
209 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200210 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211endif
212
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200213" Try to flag {}, [], and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100214if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100215 if !s:tex_no_error
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200216 if s:tex_matchcheck =~ '{'
217 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
218 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
219 endif
220 if s:tex_matchcheck =~ '\['
221 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
222 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
223 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100224 else
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200225 if s:tex_matchcheck =~ '{'
226 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
227 syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
228 endif
229 if s:tex_matchcheck =~ '\['
230 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
231 syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup
232 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100233 endif
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200234 if s:tex_matchcheck =~ '('
235 if !s:tex_nospell
236 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
237 else
238 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
239 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100240 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100242if !s:tex_no_error
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200243 if s:tex_matchcheck =~ '('
244 syn match texError "[}\]]"
245 else
246 syn match texError "[}\])]"
247 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100249if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100250 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100251 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100252 syn match texMathError "}" contained
253 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100254 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100255 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256endif
257
258" TeX/LaTeX keywords: {{{1
259" Instead of trying to be All Knowing, I just match \..alphameric..
260" Note that *.tex files may not have "@" in their \commands
261if exists("g:tex_tex") || b:tex_stylish
262 syn match texStatement "\\[a-zA-Z@]\+"
263else
264 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100265 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266 syn match texError "\\\a*@[a-zA-Z@]*"
267 endif
268endif
269
270" TeX/LaTeX delimiters: {{{1
271syn match texDelimiter "&"
272syn match texDelimiter "\\\\"
273
274" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200275syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000276
277" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
278if b:tex_stylish
279 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
280 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
281else
282 syn match texAccent "\\[bcdvuH]\A"me=e-1
283 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
284endif
285syn match texAccent "\\[bcdvuH]$"
286syn match texAccent +\\[=^.\~"`']+
287syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
288syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
289
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100290
Bram Moolenaar071d4272004-06-13 20:20:40 +0000291" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200292syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100293if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100294 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200295 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100296endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000297
298" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200299syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100300if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100301 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
302endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000304" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100305if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200306 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000307endif
308
Bram Moolenaar071d4272004-06-13 20:20:40 +0000309" TeX input: {{{1
310syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100311syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000312syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
313syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100314if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100315 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
316endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000317
318" Type Styles (LaTeX 2.09): {{{1
319syn match texTypeStyle "\\rm\>"
320syn match texTypeStyle "\\em\>"
321syn match texTypeStyle "\\bf\>"
322syn match texTypeStyle "\\it\>"
323syn match texTypeStyle "\\sl\>"
324syn match texTypeStyle "\\sf\>"
325syn match texTypeStyle "\\sc\>"
326syn match texTypeStyle "\\tt\>"
327
328" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200329if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200330 syn match texTypeStyle "\\textbf\>"
331 syn match texTypeStyle "\\textit\>"
Bram Moolenaar723dd942019-04-04 13:11:03 +0200332 syn match texTypeStyle "\\emph\>"
Bram Moolenaard38b0552012-04-25 19:07:41 +0200333endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334syn match texTypeStyle "\\textmd\>"
335syn match texTypeStyle "\\textrm\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000336
337syn match texTypeStyle "\\mathbb\>"
338syn match texTypeStyle "\\mathbf\>"
339syn match texTypeStyle "\\mathcal\>"
340syn match texTypeStyle "\\mathfrak\>"
341syn match texTypeStyle "\\mathit\>"
342syn match texTypeStyle "\\mathnormal\>"
343syn match texTypeStyle "\\mathrm\>"
344syn match texTypeStyle "\\mathsf\>"
345syn match texTypeStyle "\\mathtt\>"
346
347syn match texTypeStyle "\\rmfamily\>"
348syn match texTypeStyle "\\sffamily\>"
349syn match texTypeStyle "\\ttfamily\>"
350
351syn match texTypeStyle "\\itshape\>"
352syn match texTypeStyle "\\scshape\>"
353syn match texTypeStyle "\\slshape\>"
354syn match texTypeStyle "\\upshape\>"
355
356syn match texTypeStyle "\\bfseries\>"
357syn match texTypeStyle "\\mdseries\>"
358
359" Some type sizes: {{{1
360syn match texTypeSize "\\tiny\>"
361syn match texTypeSize "\\scriptsize\>"
362syn match texTypeSize "\\footnotesize\>"
363syn match texTypeSize "\\small\>"
364syn match texTypeSize "\\normalsize\>"
365syn match texTypeSize "\\large\>"
366syn match texTypeSize "\\Large\>"
367syn match texTypeSize "\\LARGE\>"
368syn match texTypeSize "\\huge\>"
369syn match texTypeSize "\\Huge\>"
370
371" Spacecodes (TeX'isms): {{{1
372" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
373syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
374syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
375
376" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100377if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100378 if !s:tex_nospell
379 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
380 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
381 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
382 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
383 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
384 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
385 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
386 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
387 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
388 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
389 else
390 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
391 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
392 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
393 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
394 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
395 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
396 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
397 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
398 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
399 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 +0100400 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000401endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402
Bram Moolenaard38b0552012-04-25 19:07:41 +0200403" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100404if s:tex_fast =~# 'b'
405 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200406 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200407 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
408 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
409 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
410 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar723dd942019-04-04 13:11:03 +0200411 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100412 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
413 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
414 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200415 else
416 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
417 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
418 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
419 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar723dd942019-04-04 13:11:03 +0200420 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100421 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
422 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
423 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200424 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100425 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200426endif
427
Bram Moolenaar071d4272004-06-13 20:20:40 +0000428" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100429if !exists("g:tex_no_math") && !s:tex_no_error
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200430 syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100431 syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000432 syn match texBadMath "\\[\])]"
433endif
434
435" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100436if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000437 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000438 " Starred forms are created if starform is true. Starred
439 " forms have syntax group and synchronization groups with a
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200440 " "S" appended. Handles: cluster, syntax, sync, and highlighting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000441 fun! TexNewMathZone(sfx,mathzone,starform)
442 let grpname = "texMathZone".a:sfx
443 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100444 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000445 let foldcmd= " fold"
446 else
447 let foldcmd= ""
448 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100450 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100451 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
452 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
453 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
454 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100455 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000456 if a:starform
457 let grpname = "texMathZone".a:sfx.'S'
458 let syncname = "texSyncMathZone".a:sfx.'S'
459 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100460 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100461 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
462 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
463 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
464 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100465 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000466 endif
467 endfun
468
469 " Standard Math Zones: {{{2
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100470 call TexNewMathZone("A","displaymath",1)
471 call TexNewMathZone("B","eqnarray",1)
472 call TexNewMathZone("C","equation",1)
473 call TexNewMathZone("D","math",1)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000474
475 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100476 if s:tex_fast =~# 'M'
477 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200478 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
479 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
480 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
481 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100482 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200483 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
484 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100485 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200486 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100487 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200488 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200489 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490
491 syn match texMathOper "[_^=]" contained
492
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200493 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100494 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100495 if !exists("g:tex_nospell") || !g:tex_nospell
496 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
497 else
498 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
499 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200500 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200501
Bram Moolenaar071d4272004-06-13 20:20:40 +0000502 " \left..something.. and \right..something.. support: {{{2
503 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100504 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200505 syn match texMathDelim contained "\\left\["
506 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
507 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200508 let s:texMathDelimList=[
509 \ ['<' , '<'] ,
510 \ ['>' , '>'] ,
511 \ ['(' , '('] ,
512 \ [')' , ')'] ,
513 \ ['\[' , '['] ,
514 \ [']' , ']'] ,
515 \ ['\\{' , '{'] ,
516 \ ['\\}' , '}'] ,
517 \ ['|' , '|'] ,
518 \ ['\\|' , '‖'] ,
519 \ ['\\backslash' , '\'] ,
520 \ ['\\downarrow' , '↓'] ,
521 \ ['\\Downarrow' , '⇓'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200522 \ ['\\lbrace' , '['] ,
523 \ ['\\lceil' , '⌈'] ,
524 \ ['\\lfloor' , '⌊'] ,
525 \ ['\\lgroup' , '⌊'] ,
526 \ ['\\lmoustache' , '⎛'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200527 \ ['\\rbrace' , ']'] ,
528 \ ['\\rceil' , '⌉'] ,
529 \ ['\\rfloor' , '⌋'] ,
530 \ ['\\rgroup' , '⌋'] ,
531 \ ['\\rmoustache' , '⎞'] ,
532 \ ['\\uparrow' , '↑'] ,
533 \ ['\\Uparrow' , '↑'] ,
534 \ ['\\updownarrow', '↕'] ,
535 \ ['\\Updownarrow', '⇕']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100536 if &ambw == "double" || exists("g:tex_usedblwidth")
537 let s:texMathDelimList= s:texMathDelimList + [
538 \ ['\\langle' , '〈'] ,
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100539 \ ['\\rangle' , '〉']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100540 else
541 let s:texMathDelimList= s:texMathDelimList + [
542 \ ['\\langle' , '<'] ,
543 \ ['\\rangle' , '>']]
544 endif
Bram Moolenaaradc21822011-04-01 18:03:16 +0200545 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
546 for texmath in s:texMathDelimList
547 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
548 endfor
549
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200550 else
551 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200552 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
553 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
554 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
555 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
556 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
557 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
558 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
559 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200560 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
562 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000563endif
564
565" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
566syn match texSpecialChar "\\[$&%#{}_]"
567if b:tex_stylish
568 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
569else
570 syn match texSpecialChar "\\[SP@]\A"me=e-1
571endif
572syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100573if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000574 syn match texOnlyMath "[_^]"
575endif
576syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200577if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200578 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
579 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
580 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
581 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
582 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
583endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000584
585" Comments: {{{1
586" Normal TeX LaTeX : %....
587" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100588if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000589 syn cluster texCommentGroup contains=texTodo,@Spell
590else
591 syn cluster texCommentGroup contains=texTodo,@NoSpell
592endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000593syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000594syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100596if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100597 syn match texComment "\^\^A.*$" contains=@texCommentGroup
598 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000599else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100600 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100601 " allows syntax-folding of 2 or more contiguous comment lines
602 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100603 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100604 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100605 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
606 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 +0000607 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100608 else
609 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100610 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100611 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100612 endif
613 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614endif
615
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100616" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files.
617if !s:tex_nospell
618 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell
619else
620 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup
621endif
622
Bram Moolenaar071d4272004-06-13 20:20:40 +0000623" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200624" will appropriately terminate.
625" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100626if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100627 if exists("g:tex_verbspell") && g:tex_verbspell
628 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100629 " listings package:
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200630 if b:tex_stylish
631 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200632 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200633 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200634 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100635 else
636 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200637 if b:tex_stylish
638 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200639 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200640 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200641 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100642 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000643endif
644
645" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100646if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100647 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
648 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
649 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
650 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
651 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
652 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
653 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200654 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100655endif
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100656syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000657
658" Handle newcommand, newenvironment : {{{1
659syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100660if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100661 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
662 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
663 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
664endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000665syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100666if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100667 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
668 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
669 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
670endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000671
672" Definitions/Commands: {{{1
673syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
674if b:tex_stylish
675 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
676 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
677else
678 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
679 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
680endif
681syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
682syn match texDefParm contained "#\d\+"
683
684" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000685syn 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 +0000686
687" TeX String Delimiters: {{{1
688syn match texString "\(``\|''\|,,\)"
689
Bram Moolenaar5c736222010-01-06 20:54:52 +0100690" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100691if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100692 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100693 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
694 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100695 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100696 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100697 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
698 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
699 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100700endif
701
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200702" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200703if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200704
705 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200706 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100707 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200708 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200709 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200710 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['angle' , '∠'],
713 \ ['approx' , '≈'],
714 \ ['ast' , '∗'],
715 \ ['asymp' , '≍'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200716 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100718 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200719 \ ['bigcup' , '∪'],
720 \ ['bigodot' , '⊙'],
721 \ ['bigoplus' , '⊕'],
722 \ ['bigotimes' , '⊗'],
723 \ ['bigsqcup' , '⊔'],
724 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100725 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200726 \ ['bigvee' , '⋁'],
727 \ ['bigwedge' , '⋀'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200728 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100729 \ ['bowtie' , '⋈'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100730 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200731 \ ['cap' , '∩'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200732 \ ['cdot' , '·'],
733 \ ['cdots' , '⋯'],
734 \ ['circ' , '∘'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200735 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200736 \ ['cong' , '≅'],
737 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200738 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['cup' , '∪'],
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' , '≐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100748 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200749 \ ['downarrow' , '↓'],
750 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100751 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 \ ['emptyset' , '∅'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200753 \ ['equiv' , '≡'],
754 \ ['exists' , '∃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200755 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200756 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100757 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['ge' , '≥'],
759 \ ['geq' , '≥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200760 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100761 \ ['gg' , '⟫'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200762 \ ['hbar' , 'ℏ'],
763 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200764 \ ['hookleftarrow' , '↩'],
765 \ ['hookrightarrow' , '↪'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100766 \ ['iff' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200767 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200768 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['in' , '∈'],
770 \ ['infty' , '∞'],
771 \ ['int' , '∫'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100772 \ ['jmath' , '𝚥'],
773 \ ['land' , '∧'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['lceil' , '⌈'],
775 \ ['ldots' , '…'],
776 \ ['le' , '≤'],
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200777 \ ['left|' , '|'],
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200778 \ ['left\\|' , '‖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200779 \ ['left(' , '('],
780 \ ['left\[' , '['],
781 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100782 \ ['leftarrow' , '←'],
783 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100784 \ ['leftharpoondown', '↽'],
785 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100786 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100787 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100789 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200790 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100791 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200792 \ ['lmoustache' , '╭'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100793 \ ['lor' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200794 \ ['mapsto' , '↦'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200795 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100796 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200797 \ ['mp' , '∓'],
798 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200799 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200800 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100801 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200802 \ ['neg' , '¬'],
803 \ ['neq' , '≠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['ni' , '∋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200805 \ ['notin' , '∉'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200806 \ ['nwarrow' , '↖'],
807 \ ['odot' , '⊙'],
808 \ ['oint' , '∮'],
809 \ ['ominus' , '⊖'],
810 \ ['oplus' , '⊕'],
811 \ ['oslash' , '⊘'],
812 \ ['otimes' , '⊗'],
813 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200814 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100815 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200816 \ ['partial' , '∂'],
817 \ ['perp' , '⊥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200818 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200819 \ ['prec' , '≺'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200820 \ ['preceq' , '⪯'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200821 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200822 \ ['prod' , '∏'],
823 \ ['propto' , '∝'],
824 \ ['rceil' , '⌉'],
825 \ ['Re' , 'ℜ'],
Bram Moolenaar723dd942019-04-04 13:11:03 +0200826 \ ['quad' , ' '],
827 \ ['qquad' , ' '],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200828 \ ['rfloor' , '⌋'],
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200829 \ ['right|' , '|'],
830 \ ['right\\|' , '‖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200831 \ ['right)' , ')'],
832 \ ['right]' , ']'],
833 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100834 \ ['rightarrow' , '→'],
835 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100836 \ ['rightleftharpoons', '⇌'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200837 \ ['rmoustache' , '╮'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200838 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200839 \ ['searrow' , '↘'],
840 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200841 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200842 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100843 \ ['simeq' , '⋍'],
844 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200845 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200846 \ ['sqcap' , '⊓'],
847 \ ['sqcup' , '⊔'],
848 \ ['sqsubset' , '⊏'],
849 \ ['sqsubseteq' , '⊑'],
850 \ ['sqsupset' , '⊐'],
851 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100852 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200853 \ ['subset' , '⊂'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200854 \ ['subseteq' , '⊆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200855 \ ['succ' , '≻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200856 \ ['succeq' , '⪰'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200857 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100858 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200859 \ ['supseteq' , '⊇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200860 \ ['surd' , '√'],
861 \ ['swarrow' , '↙'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200862 \ ['times' , '×'],
863 \ ['to' , '→'],
864 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200865 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200866 \ ['triangleleft' , '⊲'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200867 \ ['triangleright' , '⊳'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200868 \ ['uparrow' , '↑'],
869 \ ['Uparrow' , '⇑'],
870 \ ['updownarrow' , '↕'],
871 \ ['Updownarrow' , '⇕'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200872 \ ['vdash' , '⊢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200873 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200874 \ ['vee' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200875 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200876 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200877 \ ['wr' , '≀']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100878 if &ambw == "double" || exists("g:tex_usedblwidth")
879 let s:texMathList= s:texMathList + [
880 \ ['right\\rangle' , '〉'],
881 \ ['left\\langle' , '〈']]
882 else
883 let s:texMathList= s:texMathList + [
884 \ ['right\\rangle' , '>'],
885 \ ['left\\langle' , '<']]
886 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200887 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100888 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100889 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
890 else
891 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
892 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200893 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200894
895 if &ambw == "double"
896 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
897 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
898 else
899 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
900 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
901 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200902
903 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
904 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
905 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
906 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
907 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
908 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
909 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
910 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
911 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
912 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
913 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
914 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
915 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
916 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
917 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
918 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
919 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
920 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
921 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
922 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100923" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200924
925 syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
926 syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
927 syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
928 syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
929 syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
930 syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
931 syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
932 syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
933 syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
934 syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
935 syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
936 syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
937 syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
938 syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
939 syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
940 syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
941 syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
942 syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
943 syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
944 syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
945 syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
946 syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
947 syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
948 syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
949 syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
950 syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
951 syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
952 syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
953
954 syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
955 syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
956 syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
957 syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
958 syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
959 syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
960 syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
961
962 syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
963 syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
964 syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
965 syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200966 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200967
968 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100969 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200970 fun! s:Greek(group,pat,cchar)
971 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
972 endfun
973 call s:Greek('texGreek','\\alpha\>' ,'α')
974 call s:Greek('texGreek','\\beta\>' ,'β')
975 call s:Greek('texGreek','\\gamma\>' ,'γ')
976 call s:Greek('texGreek','\\delta\>' ,'δ')
977 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
978 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
979 call s:Greek('texGreek','\\zeta\>' ,'ζ')
980 call s:Greek('texGreek','\\eta\>' ,'η')
981 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100982 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +0200983 call s:Greek('texGreek','\\iota\>' ,'ι')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200984 call s:Greek('texGreek','\\kappa\>' ,'κ')
985 call s:Greek('texGreek','\\lambda\>' ,'λ')
986 call s:Greek('texGreek','\\mu\>' ,'μ')
987 call s:Greek('texGreek','\\nu\>' ,'ν')
988 call s:Greek('texGreek','\\xi\>' ,'ξ')
989 call s:Greek('texGreek','\\pi\>' ,'π')
990 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
991 call s:Greek('texGreek','\\rho\>' ,'ρ')
992 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
993 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100994 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200995 call s:Greek('texGreek','\\tau\>' ,'τ')
996 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +0100997 call s:Greek('texGreek','\\phi\>' ,'ϕ')
998 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200999 call s:Greek('texGreek','\\chi\>' ,'χ')
1000 call s:Greek('texGreek','\\psi\>' ,'ψ')
1001 call s:Greek('texGreek','\\omega\>' ,'ω')
1002 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1003 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1004 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1005 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001006 call s:Greek('texGreek','\\Xi\>' ,'Ξ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001007 call s:Greek('texGreek','\\Pi\>' ,'Π')
1008 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1009 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1010 call s:Greek('texGreek','\\Phi\>' ,'Φ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001011 call s:Greek('texGreek','\\Chi\>' ,'Χ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001012 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1013 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1014 delfun s:Greek
1015 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001016
1017 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001018 if s:tex_conceal =~# 's'
1019 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001020 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1021 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1022 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001023 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001024 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001025 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001026" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1027 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001028 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001029 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001030 endfun
1031 call s:SuperSub('texSuperscript','\^','0','⁰')
1032 call s:SuperSub('texSuperscript','\^','1','¹')
1033 call s:SuperSub('texSuperscript','\^','2','²')
1034 call s:SuperSub('texSuperscript','\^','3','³')
1035 call s:SuperSub('texSuperscript','\^','4','⁴')
1036 call s:SuperSub('texSuperscript','\^','5','⁵')
1037 call s:SuperSub('texSuperscript','\^','6','⁶')
1038 call s:SuperSub('texSuperscript','\^','7','⁷')
1039 call s:SuperSub('texSuperscript','\^','8','⁸')
1040 call s:SuperSub('texSuperscript','\^','9','⁹')
1041 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1042 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1043 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1044 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1045 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1046 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1047 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1048 call s:SuperSub('texSuperscript','\^','h','ʰ')
1049 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1050 call s:SuperSub('texSuperscript','\^','j','ʲ')
1051 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1052 call s:SuperSub('texSuperscript','\^','l','ˡ')
1053 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1054 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1055 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1056 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1057 call s:SuperSub('texSuperscript','\^','r','ʳ')
1058 call s:SuperSub('texSuperscript','\^','s','ˢ')
1059 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1060 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1061 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1062 call s:SuperSub('texSuperscript','\^','w','ʷ')
1063 call s:SuperSub('texSuperscript','\^','x','ˣ')
1064 call s:SuperSub('texSuperscript','\^','y','ʸ')
1065 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1066 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1067 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1068 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1069 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1070 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1071 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1072 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1073 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1074 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1075 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1076 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1077 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1078 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1079 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1080 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1081 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1082 call s:SuperSub('texSuperscript','\^','U','ᵁ')
Bram Moolenaar388a5d42020-05-26 21:20:45 +02001083 call s:SuperSub('texSuperscript','\^','V','ⱽ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001084 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001085 call s:SuperSub('texSuperscript','\^',',','︐')
1086 call s:SuperSub('texSuperscript','\^',':','︓')
1087 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001088 call s:SuperSub('texSuperscript','\^','+','⁺')
1089 call s:SuperSub('texSuperscript','\^','-','⁻')
1090 call s:SuperSub('texSuperscript','\^','<','˂')
1091 call s:SuperSub('texSuperscript','\^','>','˃')
1092 call s:SuperSub('texSuperscript','\^','/','ˊ')
1093 call s:SuperSub('texSuperscript','\^','(','⁽')
1094 call s:SuperSub('texSuperscript','\^',')','⁾')
1095 call s:SuperSub('texSuperscript','\^','\.','˙')
1096 call s:SuperSub('texSuperscript','\^','=','˭')
1097 call s:SuperSub('texSubscript','_','0','₀')
1098 call s:SuperSub('texSubscript','_','1','₁')
1099 call s:SuperSub('texSubscript','_','2','₂')
1100 call s:SuperSub('texSubscript','_','3','₃')
1101 call s:SuperSub('texSubscript','_','4','₄')
1102 call s:SuperSub('texSubscript','_','5','₅')
1103 call s:SuperSub('texSubscript','_','6','₆')
1104 call s:SuperSub('texSubscript','_','7','₇')
1105 call s:SuperSub('texSubscript','_','8','₈')
1106 call s:SuperSub('texSubscript','_','9','₉')
1107 call s:SuperSub('texSubscript','_','a','ₐ')
1108 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001109 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001110 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001111 call s:SuperSub('texSubscript','_','j','ⱼ')
1112 call s:SuperSub('texSubscript','_','k','ₖ')
1113 call s:SuperSub('texSubscript','_','l','ₗ')
1114 call s:SuperSub('texSubscript','_','m','ₘ')
1115 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001116 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001117 call s:SuperSub('texSubscript','_','p','ₚ')
1118 call s:SuperSub('texSubscript','_','r','ᵣ')
1119 call s:SuperSub('texSubscript','_','s','ₛ')
1120 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001121 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001122 call s:SuperSub('texSubscript','_','v','ᵥ')
1123 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001124 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001125 call s:SuperSub('texSubscript','_','+','₊')
1126 call s:SuperSub('texSubscript','_','-','₋')
1127 call s:SuperSub('texSubscript','_','/','ˏ')
1128 call s:SuperSub('texSubscript','_','(','₍')
1129 call s:SuperSub('texSubscript','_',')','₎')
1130 call s:SuperSub('texSubscript','_','\.','‸')
1131 call s:SuperSub('texSubscript','_','r','ᵣ')
1132 call s:SuperSub('texSubscript','_','v','ᵥ')
1133 call s:SuperSub('texSubscript','_','x','ₓ')
1134 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1135 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1136 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1137 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1138 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001139
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001140 delfun s:SuperSub
1141 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001142
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001143 " Accented characters and Ligatures: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001144 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001145 if b:tex_stylish
1146 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001147 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1148 syn match texLigature '--'
1149 syn match texLigature '---'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001150 else
1151 fun! s:Accents(chr,...)
1152 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001153 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001154 if i > a:0
1155 break
1156 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001157 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001158 let i= i + 1
1159 continue
1160 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001161 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001162 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1163 else
1164 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1165 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001166 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001167 endfor
1168 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001169 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1170 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1171 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1172 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1173 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1174 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1175 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1176 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1177 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1178 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1179 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1180 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1181 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1182 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1183 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1184 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1185 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1186 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1187 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1188 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1189 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1190 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1191 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1192 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1193 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1194 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1195 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1196 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1197 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1198 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1199 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1200 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1201 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1202 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1203 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1204 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1205 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1206 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001207 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1208 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001209 delfun s:Accents
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001210 syn match texAccent '\\aa\>' conceal cchar=å
1211 syn match texAccent '\\AA\>' conceal cchar=Å
1212 syn match texAccent '\\o\>' conceal cchar=ø
1213 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001214 syn match texLigature '\\AE\>' conceal cchar=Æ
1215 syn match texLigature '\\ae\>' conceal cchar=æ
1216 syn match texLigature '\\oe\>' conceal cchar=œ
1217 syn match texLigature '\\OE\>' conceal cchar=Œ
1218 syn match texLigature '\\ss\>' conceal cchar=ß
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001219 syn match texLigature '--' conceal cchar=–
1220 syn match texLigature '---' conceal cchar=—
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001221 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001222 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001223endif
1224
1225" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001226" LaTeX synchronization: {{{1
1227syn sync maxlines=200
1228syn sync minlines=50
1229
1230syn sync match texSyncStop groupthere NONE "%stopzone\>"
1231
1232" Synchronization: {{{1
1233" The $..$ and $$..$$ make for impossible sync patterns
1234" (one can't tell if a "$$" starts or stops a math zone by itself)
1235" The following grouptheres coupled with minlines above
1236" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001237if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001238 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1239 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1240 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1241 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1242 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1243 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1244 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1245 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1246endif
1247
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001248" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001249" Highlighting: {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001250
1251" Define the default highlighting. {{{1
1252if !exists("skip_tex_syntax_inits")
1253
Bram Moolenaar071d4272004-06-13 20:20:40 +00001254 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001255 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001256 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001257 hi def link texBadMath texError
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001258 hi def link texMathDelimBad texError
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001259 hi def link texMathError texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001260 if !b:tex_stylish
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001261 hi def link texOnlyMath texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262 endif
1263 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001264 hi def link texError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +00001265 endif
1266
Bram Moolenaard38b0552012-04-25 19:07:41 +02001267 hi texBoldStyle gui=bold cterm=bold
1268 hi texItalStyle gui=italic cterm=italic
1269 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1270 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaar723dd942019-04-04 13:11:03 +02001271 hi def link texEmphStyle texItalStyle
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001272 hi def link texCite texRefZone
1273 hi def link texDefCmd texDef
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001274 hi def link texDefName texDef
1275 hi def link texDocType texCmdName
1276 hi def link texDocTypeArgs texCmdArgs
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001277 hi def link texInputFileOpt texCmdArgs
1278 hi def link texInputCurlies texDelimiter
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001279 hi def link texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001280 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001281 hi def link texMathDelimSet1 texMathDelim
1282 hi def link texMathDelimSet2 texMathDelim
1283 hi def link texMathDelimKey texMathDelim
1284 hi def link texMathMatcher texMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001285 hi def link texAccent texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001286 hi def link texGreek texStatement
1287 hi def link texSuperscript texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001288 hi def link texSubscript texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001289 hi def link texSuperscripts texSuperscript
1290 hi def link texSubscripts texSubscript
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001291 hi def link texMathSymbol texStatement
1292 hi def link texMathZoneV texMath
1293 hi def link texMathZoneW texMath
1294 hi def link texMathZoneX texMath
1295 hi def link texMathZoneY texMath
1296 hi def link texMathZoneV texMath
1297 hi def link texMathZoneZ texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001298 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001299 hi def link texBeginEnd texCmdName
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001300 hi def link texBeginEndName texSection
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001301 hi def link texSpaceCode texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001302 hi def link texStyleStatement texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001303 hi def link texTypeSize texType
1304 hi def link texTypeStyle texType
Bram Moolenaar071d4272004-06-13 20:20:40 +00001305
1306 " Basic TeX highlighting groups
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001307 hi def link texCmdArgs Number
1308 hi def link texCmdName Statement
1309 hi def link texComment Comment
1310 hi def link texDef Statement
1311 hi def link texDefParm Special
1312 hi def link texDelimiter Delimiter
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001313 hi def link texInput Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001314 hi def link texInputFile Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001315 hi def link texLength Number
1316 hi def link texMath Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001317 hi def link texMathDelim Statement
1318 hi def link texMathOper Operator
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001319 hi def link texNewCmd Statement
1320 hi def link texNewEnv Statement
1321 hi def link texOption Number
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001322 hi def link texRefZone Special
1323 hi def link texSection PreCondit
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001324 hi def link texSpaceCodeChar Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001325 hi def link texSpecialChar SpecialChar
1326 hi def link texStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001327 hi def link texString String
1328 hi def link texTodo Todo
1329 hi def link texType Type
1330 hi def link texZone PreCondit
Bram Moolenaar071d4272004-06-13 20:20:40 +00001331
Bram Moolenaar071d4272004-06-13 20:20:40 +00001332endif
1333
Bram Moolenaar15146672011-10-20 22:22:38 +02001334" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001335delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001336unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001337let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001338let &cpo = s:keepcpo
1339unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001340" vim: ts=8 fdm=marker