blob: 109ce61b787e7aa1dfc3fcf7e67a525f296c1b60 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Christian Brabandtf9ca1392024-02-19 20:37:11 +01003" Maintainer: This runtime file is looking for a new maintainer.
4" Former Maintainer: Charles E. Campbell
Bram Moolenaarce001a32022-04-27 15:25:03 +01005" Last Change: Apr 22, 2022
Christian Brabandt2cb82462025-01-18 18:09:38 +01006" 2024 Feb 19 by Vim Project: announce adoption
7" 2025 Jan 18 by Vim Project: add texEmphStyle to texMatchGroup, #16228
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +01008" 2025 Feb 08 by Vim Project: improve macro option, \providecommand,
9" \newcommand and \newenvironment #16543
Bram Moolenaarce001a32022-04-27 15:25:03 +010010" Version: 121
Christian Brabandtf9ca1392024-02-19 20:37:11 +010011" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
Bram Moolenaar071d4272004-06-13 20:20:40 +000012"
13" Notes: {{{1
14"
15" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
16" use %stopzone.
17"
18" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
19" by suitable use of %stopzone.
20"
21" 3. If you have a slow computer, you may wish to modify
22"
23" syn sync maxlines=200
24" syn sync minlines=50
25"
26" to values that are more to your liking.
27"
28" 4. There is no match-syncing for $...$ and $$...$$; hence large
29" equation blocks constructed that way may exhibit syncing problems.
30" (there's no difference between begin/end patterns)
31"
32" 5. If you have the variable "g:tex_no_error" defined then none of the
33" lexical error-checking will be done.
34"
35" ie. let g:tex_no_error=1
Bram Moolenaara6878372014-03-22 21:02:50 +010036"
37" 6. Please see :help latex-syntax for information on
38" syntax folding :help tex-folding
39" spell checking :help tex-nospell
40" commands and mathzones :help tex-runon
41" new command highlighting :help tex-morecommands
42" error highlighting :help tex-error
43" new math groups :help tex-math
44" new styles :help tex-style
45" using conceal mode :help tex-conceal
Bram Moolenaar071d4272004-06-13 20:20:40 +000046
47" Version Clears: {{{1
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020048" quit when a syntax file was already loaded
49if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000050 finish
51endif
Bram Moolenaar15146672011-10-20 22:22:38 +020052let s:keepcpo= &cpo
53set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020054scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020056" by default, enable all region-based highlighting
57let s:tex_fast= "bcmMprsSvV"
58if exists("g:tex_fast")
59 if type(g:tex_fast) != 1
60 " g:tex_fast exists and is not a string, so
61 " turn off all optional region-based highighting
62 let s:tex_fast= ""
63 else
64 let s:tex_fast= g:tex_fast
65 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000066endif
67
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020068" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020069" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020070if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020071 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020072else
73 let s:tex_conceal= g:tex_conceal
74endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020075if !exists("g:tex_superscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020076 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020077else
78 let s:tex_superscripts= g:tex_superscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020079endif
80if !exists("g:tex_subscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020081 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020082else
83 let s:tex_subscripts= g:tex_subscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020084endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020085
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000086" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000087" The user may override the normal determination by setting
88" g:tex_stylish to 1 (for "*.sty" mode)
89" or to 0 else (normal "*.tex" mode)
90" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010091let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000092if exists("g:tex_stylish")
93 let b:tex_stylish= g:tex_stylish
94elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010095 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000096 let b:tex_stylish= 1
97 else
98 let b:tex_stylish= 0
99 endif
100endif
101
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000102" handle folding {{{1
103if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100104 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000105elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100106 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000107 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 +0100108else
109 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000110endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100111if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200112 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000113endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100114if s:tex_fold_enabled && has("folding")
amarakon8e6b5032024-11-09 18:59:31 +0100115 com! -nargs=* TexFold <args> fold
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100116else
amarakon8e6b5032024-11-09 18:59:31 +0100117 com! -nargs=* TexFold <args>
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100118endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000119
Bram Moolenaaradc21822011-04-01 18:03:16 +0200120" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200122" One may override this iskeyword setting by providing
123" g:tex_isk
124if exists("g:tex_isk")
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200125 if b:tex_stylish && g:tex_isk !~ '@'
126 let b:tex_isk= '@,'.g:tex_isk
127 else
128 let b:tex_isk= g:tex_isk
129 endif
130elseif b:tex_stylish
131 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132else
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200133 let b:tex_isk="48-57,a-z,A-Z,192-255"
Bram Moolenaaradc21822011-04-01 18:03:16 +0200134endif
Bram Moolenaar723dd942019-04-04 13:11:03 +0200135if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200136 exe "syn iskeyword ".b:tex_isk
137else
138 exe "setl isk=".b:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100140if exists("g:tex_no_error") && g:tex_no_error
141 let s:tex_no_error= 1
142else
143 let s:tex_no_error= 0
144endif
145if exists("g:tex_comment_nospell") && g:tex_comment_nospell
146 let s:tex_comment_nospell= 1
147else
148 let s:tex_comment_nospell= 0
149endif
150if exists("g:tex_nospell") && g:tex_nospell
151 let s:tex_nospell = 1
152else
153 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200154endif
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200155if exists("g:tex_matchcheck")
156 let s:tex_matchcheck= g:tex_matchcheck
157else
158 let s:tex_matchcheck= '[({[]'
159endif
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100160if exists("g:tex_excludematcher")
161 let s:tex_excludematcher= g:tex_excludematcher
162else
163 let s:tex_excludematcher= 0
164endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165
166" Clusters: {{{1
167" --------
Christian Brabandt622f6f52024-11-11 08:49:04 +0100168syn 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 +0100169if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100170 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000171endif
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100172syn cluster texEnvGroup contains=texDefParm,texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaar723dd942019-04-04 13:11:03 +0200173syn 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 +0100174syn 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
175syn 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
176if !s:tex_excludematcher
177 syn cluster texBoldGroup add=texMatcher
178 syn cluster texItalGroup add=texMatcher
179endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100180if !s:tex_nospell
Bram Moolenaarce001a32022-04-27 15:25:03 +0100181 if !s:tex_no_error
Christian Brabandt2cb82462025-01-18 18:09:38 +0100182 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texEmphStyle,texZone,texInputFile,texOption,@Spell
Bram Moolenaarce001a32022-04-27 15:25:03 +0100183 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
184 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell
185 else
Christian Brabandt2cb82462025-01-18 18:09:38 +0100186 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,texEmphStyle,texZone,texInputFile,texOption,@Spell
Bram Moolenaarce001a32022-04-27 15:25:03 +0100187 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
188 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
189 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200190else
Bram Moolenaarce001a32022-04-27 15:25:03 +0100191 if !s:tex_no_error
192 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
193 syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
194 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
195 else
196 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
197 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
198 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
199 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200200endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200201syn 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 +0100202syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100203if !exists("g:tex_no_math")
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200204 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 +0100205 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
206 syn cluster texMatchGroup add=@texMathZones
207 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
Christian Brabandt622f6f52024-11-11 08:49:04 +0100208 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
209 syn cluster texMathZoneGroup contains=texBadPar,texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100210 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100211 syn cluster texMathMatchGroup add=texMathError
212 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100214 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000215 " following used in the \part \chapter \section \subsection \subsubsection
216 " \paragraph \subparagraph \author \title highlighting
217 syn cluster texDocGroup contains=texPartZone,@texPartGroup
218 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
219 syn cluster texChapterGroup contains=texSectionZone,texParaZone
220 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
221 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
222 syn cluster texSubSubSectionGroup contains=texParaZone
223 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200224 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100225 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
226 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200227 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228endif
229
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200230" Try to flag {}, [], and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100231if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100232 if !s:tex_no_error
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200233 if s:tex_matchcheck =~ '{'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100234 syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
235 syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200236 endif
237 if s:tex_matchcheck =~ '\['
Bram Moolenaarce001a32022-04-27 15:25:03 +0100238 syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
239 syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200240 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100241 else
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200242 if s:tex_matchcheck =~ '{'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100243 syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
244 syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200245 endif
246 if s:tex_matchcheck =~ '\['
Bram Moolenaarce001a32022-04-27 15:25:03 +0100247 syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup
248 syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200249 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100250 endif
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200251 if s:tex_matchcheck =~ '('
252 if !s:tex_nospell
253 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
254 else
255 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
256 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100257 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100259if !s:tex_no_error
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200260 if s:tex_matchcheck =~ '('
261 syn match texError "[}\]]"
262 else
263 syn match texError "[}\])]"
264 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100266if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100267 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100268 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100269 syn match texMathError "}" contained
270 endif
Bram Moolenaarce001a32022-04-27 15:25:03 +0100271 syn region texMathMatcher matchgroup=texDelimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100272 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273endif
274
275" TeX/LaTeX keywords: {{{1
276" Instead of trying to be All Knowing, I just match \..alphameric..
277" Note that *.tex files may not have "@" in their \commands
278if exists("g:tex_tex") || b:tex_stylish
279 syn match texStatement "\\[a-zA-Z@]\+"
280else
281 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100282 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283 syn match texError "\\\a*@[a-zA-Z@]*"
284 endif
285endif
286
287" TeX/LaTeX delimiters: {{{1
288syn match texDelimiter "&"
289syn match texDelimiter "\\\\"
290
291" Tex/Latex Options: {{{1
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100292syn match texOption "[^\\]\zs#[1-9]\|^#[1-9]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000293
294" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
295if b:tex_stylish
296 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
297 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
298else
299 syn match texAccent "\\[bcdvuH]\A"me=e-1
300 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
301endif
302syn match texAccent "\\[bcdvuH]$"
303syn match texAccent +\\[=^.\~"`']+
304syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
305syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
306
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100307
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200309syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100310if s:tex_fast =~# 'm'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100311 syn region texBeginEndName matchgroup=texDelimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
312 syn region texBeginEndModifier matchgroup=texDelimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100313endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314
315" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200316syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100317if s:tex_fast =~# 'm'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100318 syn region texDocTypeArgs matchgroup=texDelimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100319endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000320
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000321" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100322if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200323 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000324endif
325
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326" TeX input: {{{1
327syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100328syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000329syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
330syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100331if s:tex_fast =~# 'm'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100332 syn region texInputFileOpt matchgroup=texDelimiter start="\[" end="\]" contained contains=texComment
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100333endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000334
335" Type Styles (LaTeX 2.09): {{{1
336syn match texTypeStyle "\\rm\>"
337syn match texTypeStyle "\\em\>"
338syn match texTypeStyle "\\bf\>"
339syn match texTypeStyle "\\it\>"
340syn match texTypeStyle "\\sl\>"
341syn match texTypeStyle "\\sf\>"
342syn match texTypeStyle "\\sc\>"
343syn match texTypeStyle "\\tt\>"
344
345" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200346if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200347 syn match texTypeStyle "\\textbf\>"
348 syn match texTypeStyle "\\textit\>"
Bram Moolenaar723dd942019-04-04 13:11:03 +0200349 syn match texTypeStyle "\\emph\>"
Bram Moolenaard38b0552012-04-25 19:07:41 +0200350endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000351syn match texTypeStyle "\\textmd\>"
352syn match texTypeStyle "\\textrm\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000353
Bram Moolenaar071d4272004-06-13 20:20:40 +0000354syn match texTypeStyle "\\mathbf\>"
355syn match texTypeStyle "\\mathcal\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000356syn match texTypeStyle "\\mathit\>"
357syn match texTypeStyle "\\mathnormal\>"
358syn match texTypeStyle "\\mathrm\>"
359syn match texTypeStyle "\\mathsf\>"
360syn match texTypeStyle "\\mathtt\>"
361
362syn match texTypeStyle "\\rmfamily\>"
363syn match texTypeStyle "\\sffamily\>"
364syn match texTypeStyle "\\ttfamily\>"
365
366syn match texTypeStyle "\\itshape\>"
367syn match texTypeStyle "\\scshape\>"
368syn match texTypeStyle "\\slshape\>"
369syn match texTypeStyle "\\upshape\>"
370
371syn match texTypeStyle "\\bfseries\>"
372syn match texTypeStyle "\\mdseries\>"
373
374" Some type sizes: {{{1
375syn match texTypeSize "\\tiny\>"
376syn match texTypeSize "\\scriptsize\>"
377syn match texTypeSize "\\footnotesize\>"
378syn match texTypeSize "\\small\>"
379syn match texTypeSize "\\normalsize\>"
380syn match texTypeSize "\\large\>"
381syn match texTypeSize "\\Large\>"
382syn match texTypeSize "\\LARGE\>"
383syn match texTypeSize "\\huge\>"
384syn match texTypeSize "\\Huge\>"
385
386" Spacecodes (TeX'isms): {{{1
387" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
388syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
389syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
390
391" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100392if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100393 if !s:tex_nospell
394 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
395 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
396 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
397 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
398 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
399 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
400 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
401 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
402 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
403 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
404 else
405 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
406 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
407 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
408 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
409 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
410 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
411 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
412 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
413 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
414 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 +0100415 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000416endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417
Bram Moolenaard38b0552012-04-25 19:07:41 +0200418" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100419if s:tex_fast =~# 'b'
420 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200421 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200422 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
423 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
424 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
425 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
Bram Moolenaar723dd942019-04-04 13:11:03 +0200426 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100427 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
428 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
429 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
amarakon8e6b5032024-11-09 18:59:31 +0100430 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200431 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
432 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
433 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
434 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar723dd942019-04-04 13:11:03 +0200435 syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100436 syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
437 syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
438 syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200439 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100440 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200441endif
442
Bram Moolenaar071d4272004-06-13 20:20:40 +0000443" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100444if !exists("g:tex_no_math") && !s:tex_no_error
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200445 syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100446 syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447 syn match texBadMath "\\[\])]"
Bram Moolenaarce001a32022-04-27 15:25:03 +0100448 syn match texBadPar contained "\%(\\par\>\|^\s*\n.\)"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449endif
450
451" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100452if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000453 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454 " Starred forms are created if starform is true. Starred
455 " forms have syntax group and synchronization groups with a
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +0200456 " "S" appended. Handles: cluster, syntax, sync, and highlighting.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000457 fun! TexNewMathZone(sfx,mathzone,starform)
458 let grpname = "texMathZone".a:sfx
459 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100460 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000461 let foldcmd= " fold"
462 else
463 let foldcmd= ""
464 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100466 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100467 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
468 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
469 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
470 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100471 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000472 if a:starform
473 let grpname = "texMathZone".a:sfx.'S'
474 let syncname = "texSyncMathZone".a:sfx.'S'
475 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100476 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100477 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
478 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
479 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
480 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100481 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000482 endif
483 endfun
484
485 " Standard Math Zones: {{{2
Bram Moolenaarf0b03c42017-12-17 17:17:07 +0100486 call TexNewMathZone("A","displaymath",1)
487 call TexNewMathZone("B","eqnarray",1)
488 call TexNewMathZone("C","equation",1)
489 call TexNewMathZone("D","math",1)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000490
491 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100492 if s:tex_fast =~# 'M'
493 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100494 syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
495 syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
496 syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\\\\\|\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
497 syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100498 else
Bram Moolenaarce001a32022-04-27 15:25:03 +0100499 syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
500 syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
501 syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
502 syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100503 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200504 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200505 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000506
507 syn match texMathOper "[_^=]" contained
508
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200509 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100510 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100511 if !exists("g:tex_nospell") || !g:tex_nospell
512 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
513 else
514 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
515 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200516 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200517
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518 " \left..something.. and \right..something.. support: {{{2
519 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100520 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200521 syn match texMathDelim contained "\\left\["
522 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
523 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200524 let s:texMathDelimList=[
525 \ ['<' , '<'] ,
526 \ ['>' , '>'] ,
527 \ ['(' , '('] ,
528 \ [')' , ')'] ,
529 \ ['\[' , '['] ,
530 \ [']' , ']'] ,
531 \ ['\\{' , '{'] ,
532 \ ['\\}' , '}'] ,
533 \ ['|' , '|'] ,
534 \ ['\\|' , '‖'] ,
535 \ ['\\backslash' , '\'] ,
536 \ ['\\downarrow' , '↓'] ,
537 \ ['\\Downarrow' , '⇓'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200538 \ ['\\lbrace' , '['] ,
539 \ ['\\lceil' , '⌈'] ,
540 \ ['\\lfloor' , '⌊'] ,
541 \ ['\\lgroup' , '⌊'] ,
542 \ ['\\lmoustache' , '⎛'] ,
Bram Moolenaaradc21822011-04-01 18:03:16 +0200543 \ ['\\rbrace' , ']'] ,
544 \ ['\\rceil' , '⌉'] ,
545 \ ['\\rfloor' , '⌋'] ,
546 \ ['\\rgroup' , '⌋'] ,
547 \ ['\\rmoustache' , '⎞'] ,
548 \ ['\\uparrow' , '↑'] ,
549 \ ['\\Uparrow' , '↑'] ,
550 \ ['\\updownarrow', '↕'] ,
551 \ ['\\Updownarrow', '⇕']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100552 if &ambw == "double" || exists("g:tex_usedblwidth")
553 let s:texMathDelimList= s:texMathDelimList + [
554 \ ['\\langle' , '〈'] ,
Bram Moolenaar7f2e9d72017-11-11 20:58:53 +0100555 \ ['\\rangle' , '〉']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100556 else
557 let s:texMathDelimList= s:texMathDelimList + [
558 \ ['\\langle' , '<'] ,
559 \ ['\\rangle' , '>']]
560 endif
Bram Moolenaaradc21822011-04-01 18:03:16 +0200561 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
562 for texmath in s:texMathDelimList
563 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
564 endfor
565
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200566 else
567 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200568 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
569 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
570 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
571 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
572 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
573 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
574 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
575 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200576 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000577 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
578 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000579endif
580
581" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
582syn match texSpecialChar "\\[$&%#{}_]"
583if b:tex_stylish
584 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
585else
586 syn match texSpecialChar "\\[SP@]\A"me=e-1
587endif
588syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100589if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000590 syn match texOnlyMath "[_^]"
591endif
592syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200593if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200594 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
595 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
596 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
597 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
598 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
599endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000600
601" Comments: {{{1
602" Normal TeX LaTeX : %....
603" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100604if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000605 syn cluster texCommentGroup contains=texTodo,@Spell
606else
607 syn cluster texCommentGroup contains=texTodo,@NoSpell
608endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000609syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000610syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000611syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100612if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100613 syn match texComment "\^\^A.*$" contains=@texCommentGroup
614 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000615else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100616 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100617 " allows syntax-folding of 2 or more contiguous comment lines
618 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100619 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100620 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100621 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
622 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 +0000623 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100624 else
625 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100626 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100627 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100628 endif
629 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000630endif
631
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100632" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files.
633if !s:tex_nospell
634 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell
635else
636 TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup
637endif
638
Bram Moolenaar071d4272004-06-13 20:20:40 +0000639" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200640" will appropriately terminate.
641" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100642if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100643 if exists("g:tex_verbspell") && g:tex_verbspell
644 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
Bram Moolenaarb0d45e72017-11-05 18:19:24 +0100645 " listings package:
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200646 if b:tex_stylish
647 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200648 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200649 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200650 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100651 else
652 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200653 if b:tex_stylish
654 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200655 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200656 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200657 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100658 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000659endif
660
661" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100662if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100663 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
664 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
665 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
666 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
667 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
668 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
Bram Moolenaarce001a32022-04-27 15:25:03 +0100669 syn region texRefOption contained matchgroup=texDelimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
670 syn region texCite contained matchgroup=texDelimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100671endif
Bram Moolenaar1d9215b2020-01-25 13:27:42 +0100672syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000673
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100674" Handle (re)newcommand, providecommand, (re)newenvironment : {{{1
675" EXAMPLE:
676"
677" The followings are valid (ignoring error due to redefinition):
678"
679" \newcommand{\foo}{body}
680" \newcommand{\foo}[1]{#1}
681" \newcommand{\foo}[1][def]{#1}
682"
683" The followings are ill-formed:
684"
685" \newcommand{\foo}{#1} ! Illegal parameter number in definition of \foo.
686" \newcommand{\foo}[x]{…} ! Missing number, treated as zero.
687" \newcommand{\foo}[10]{…} ! You already have nine parameters.
688syn match texNewCmd "\\\%(\%(re\)\=new\|provide\)command\>\*\?" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100689if s:tex_fast =~# 'V'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100690 syn region texCmdName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100691 syn region texCmdArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdDefaultPar,texCmdBody skipwhite skipnl
692 syn region texCmdDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
Bram Moolenaarce001a32022-04-27 15:25:03 +0100693 syn region texCmdBody contained matchgroup=texDelimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=texDelimiter end="}" contains=@texCmdGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100694endif
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100695" EXAMPLE:
696"
697" The followings are valid (ignoring error due to redefinition):
698"
699" \newenvironment{baz}{beg}{end}
700" \newenvironment{baz}[1]{beg #1}{end}
701" \newenvironment{baz}[1][default]{beg #1}{end}
702"
703" The followings are invalid:
704"
705" \newenvironment{baz}{#1}{…} ! Illegal parameter number in definition of \baz.
706" \newenvironment{baz}[x]{…}{…} ! Missing number, treated as zero.
707" \newenvironment{baz}[10]{…}{…} ! You already have nine parameters.
708" \newenvironment{baz}[1]{…}{#1} ! Illegal parameter number in definition of \endbaz.
709syn match texNewEnv "\\\%(re\)\=newenvironment\>\*\?" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100710if s:tex_fast =~# 'V'
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100711 syn region texEnvName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvArgs,texEnvBgn skipwhite skipnl
712 syn region texEnvArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvDefaultPar,texEnvBgn skipwhite skipnl
713 syn region texEnvDefaultPar contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texEnvBgn skipwhite skipnl
Bram Moolenaarce001a32022-04-27 15:25:03 +0100714 syn region texEnvBgn contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
715 syn region texEnvEnd contained matchgroup=texDelimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100716endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000717
718" Definitions/Commands: {{{1
719syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
720if b:tex_stylish
721 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
722 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
723else
724 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
725 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
726endif
727syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +0100728syn match texDefParm contained "#[1-9]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000729
730" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000731syn 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 +0000732
733" TeX String Delimiters: {{{1
734syn match texString "\(``\|''\|,,\)"
735
Bram Moolenaar5c736222010-01-06 20:54:52 +0100736" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100737if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100738 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100739 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
740 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100741 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100742 if s:tex_fast =~# 'S'
Bram Moolenaarce001a32022-04-27 15:25:03 +0100743 syn region texStyleMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
744 syn region texStyleMatcher matchgroup=texDelimiter start="\[" end="]" contains=@texStyleGroup,texError contained
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100745 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100746endif
747
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200748" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200749if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200750
751 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100753 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200754 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200755 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200756 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100757 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['angle' , '∠'],
759 \ ['approx' , '≈'],
760 \ ['ast' , '∗'],
761 \ ['asymp' , '≍'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200762 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200763 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100764 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200765 \ ['bigcup' , '∪'],
766 \ ['bigodot' , '⊙'],
767 \ ['bigoplus' , '⊕'],
768 \ ['bigotimes' , '⊗'],
769 \ ['bigsqcup' , '⊔'],
770 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100771 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200772 \ ['bigvee' , '⋁'],
773 \ ['bigwedge' , '⋀'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100775 \ ['bowtie' , '⋈'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100776 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200777 \ ['cap' , '∩'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200778 \ ['cdot' , '·'],
779 \ ['cdots' , '⋯'],
780 \ ['circ' , '∘'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200781 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200782 \ ['cong' , '≅'],
783 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200784 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['cup' , '∪'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100786 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200787 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100788 \ ['ddagger' , '‡'],
789 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200790 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200791 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200792 \ ['div' , '÷'],
793 \ ['doteq' , '≐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100794 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200795 \ ['downarrow' , '↓'],
796 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100797 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['emptyset' , '∅'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200799 \ ['equiv' , '≡'],
800 \ ['exists' , '∃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200801 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200802 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['ge' , '≥'],
805 \ ['geq' , '≥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200806 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['gg' , '⟫'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200808 \ ['hbar' , 'ℏ'],
809 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200810 \ ['hookleftarrow' , '↩'],
811 \ ['hookrightarrow' , '↪'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100812 \ ['iff' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200813 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200814 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['in' , '∈'],
816 \ ['infty' , '∞'],
817 \ ['int' , '∫'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100818 \ ['jmath' , '𝚥'],
819 \ ['land' , '∧'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200820 \ ['lceil' , '⌈'],
821 \ ['ldots' , '…'],
822 \ ['le' , '≤'],
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200823 \ ['left|' , '|'],
Bram Moolenaar2547aa92020-07-26 17:00:44 +0200824 \ ['left\\|' , '‖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200825 \ ['left(' , '('],
826 \ ['left\[' , '['],
827 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100828 \ ['leftarrow' , '←'],
829 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100830 \ ['leftharpoondown', '↽'],
831 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100832 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100833 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200834 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100835 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200836 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100837 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200838 \ ['lmoustache' , '╭'],
Bram Moolenaar690afe12017-01-28 18:34:47 +0100839 \ ['lor' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200840 \ ['mapsto' , '↦'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200841 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100842 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200843 \ ['mp' , '∓'],
844 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200845 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200846 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100847 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200848 \ ['neg' , '¬'],
849 \ ['neq' , '≠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200850 \ ['ni' , '∋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200851 \ ['notin' , '∉'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200852 \ ['nwarrow' , '↖'],
853 \ ['odot' , '⊙'],
854 \ ['oint' , '∮'],
855 \ ['ominus' , '⊖'],
856 \ ['oplus' , '⊕'],
857 \ ['oslash' , '⊘'],
858 \ ['otimes' , '⊗'],
859 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200860 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100861 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200862 \ ['partial' , '∂'],
863 \ ['perp' , '⊥'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200865 \ ['prec' , '≺'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200866 \ ['preceq' , '⪯'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200867 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200868 \ ['prod' , '∏'],
869 \ ['propto' , '∝'],
870 \ ['rceil' , '⌉'],
871 \ ['Re' , 'ℜ'],
Bram Moolenaar723dd942019-04-04 13:11:03 +0200872 \ ['quad' , ' '],
873 \ ['qquad' , ' '],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200874 \ ['rfloor' , '⌋'],
Bram Moolenaar65e0d772020-06-14 17:29:55 +0200875 \ ['right|' , '|'],
876 \ ['right\\|' , '‖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200877 \ ['right)' , ')'],
878 \ ['right]' , ']'],
879 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100880 \ ['rightarrow' , '→'],
881 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100882 \ ['rightleftharpoons', '⇌'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200883 \ ['rmoustache' , '╮'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200884 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200885 \ ['searrow' , '↘'],
886 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200887 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100889 \ ['simeq' , '⋍'],
890 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200891 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200892 \ ['sqcap' , '⊓'],
893 \ ['sqcup' , '⊔'],
894 \ ['sqsubset' , '⊏'],
895 \ ['sqsubseteq' , '⊑'],
896 \ ['sqsupset' , '⊐'],
897 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100898 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200899 \ ['subset' , '⊂'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200900 \ ['subseteq' , '⊆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200901 \ ['succ' , '≻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200902 \ ['succeq' , '⪰'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100904 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200905 \ ['supseteq' , '⊇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200906 \ ['surd' , '√'],
907 \ ['swarrow' , '↙'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200908 \ ['times' , '×'],
909 \ ['to' , '→'],
910 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200911 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200912 \ ['triangleleft' , '⊲'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200913 \ ['triangleright' , '⊳'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200914 \ ['uparrow' , '↑'],
915 \ ['Uparrow' , '⇑'],
916 \ ['updownarrow' , '↕'],
917 \ ['Updownarrow' , '⇕'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200918 \ ['vdash' , '⊢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200919 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200920 \ ['vee' , '∨'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200921 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200922 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200923 \ ['wr' , '≀']]
Bram Moolenaar690afe12017-01-28 18:34:47 +0100924 if &ambw == "double" || exists("g:tex_usedblwidth")
925 let s:texMathList= s:texMathList + [
926 \ ['right\\rangle' , '〉'],
927 \ ['left\\langle' , '〈']]
928 else
929 let s:texMathList= s:texMathList + [
930 \ ['right\\rangle' , '>'],
931 \ ['left\\langle' , '<']]
932 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200933 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100934 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100935 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
936 else
937 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
938 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200939 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200940
941 if &ambw == "double"
942 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
943 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
944 else
945 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
946 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
947 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200948
949 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
950 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
951 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
952 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
953 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
954 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
955 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
956 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
957 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
958 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
959 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
960 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
961 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
962 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
963 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
964 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
965 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
966 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
967 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
968 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100969" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar51ad4ea2018-04-06 11:14:11 +0200970
971 syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
972 syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
973 syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
974 syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
975 syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
976 syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
977 syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
978 syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
979 syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
980 syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
981 syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
982 syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
983 syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
984 syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
985 syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
986 syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
987 syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
988 syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
989 syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
990 syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
991 syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
992 syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
993 syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
994 syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
995 syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
996 syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
997 syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
998 syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
999
1000 syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
1001 syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
1002 syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
1003 syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
1004 syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
1005 syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
1006 syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
1007
1008 syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
1009 syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
1010 syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
1011 syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001012 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001013
1014 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001015 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001016 fun! s:Greek(group,pat,cchar)
1017 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1018 endfun
1019 call s:Greek('texGreek','\\alpha\>' ,'α')
1020 call s:Greek('texGreek','\\beta\>' ,'β')
1021 call s:Greek('texGreek','\\gamma\>' ,'γ')
1022 call s:Greek('texGreek','\\delta\>' ,'δ')
1023 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1024 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1025 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1026 call s:Greek('texGreek','\\eta\>' ,'η')
1027 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001028 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001029 call s:Greek('texGreek','\\iota\>' ,'ι')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001030 call s:Greek('texGreek','\\kappa\>' ,'κ')
1031 call s:Greek('texGreek','\\lambda\>' ,'λ')
1032 call s:Greek('texGreek','\\mu\>' ,'μ')
1033 call s:Greek('texGreek','\\nu\>' ,'ν')
1034 call s:Greek('texGreek','\\xi\>' ,'ξ')
1035 call s:Greek('texGreek','\\pi\>' ,'π')
1036 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1037 call s:Greek('texGreek','\\rho\>' ,'ρ')
1038 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1039 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001040 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001041 call s:Greek('texGreek','\\tau\>' ,'τ')
1042 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001043 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1044 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001045 call s:Greek('texGreek','\\chi\>' ,'χ')
1046 call s:Greek('texGreek','\\psi\>' ,'ψ')
1047 call s:Greek('texGreek','\\omega\>' ,'ω')
1048 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1049 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1050 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1051 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001052 call s:Greek('texGreek','\\Xi\>' ,'Ξ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001053 call s:Greek('texGreek','\\Pi\>' ,'Π')
1054 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1055 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1056 call s:Greek('texGreek','\\Phi\>' ,'Φ')
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02001057 call s:Greek('texGreek','\\Chi\>' ,'Χ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001058 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1059 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1060 delfun s:Greek
1061 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001062
1063 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001064 if s:tex_conceal =~# 's'
1065 if s:tex_fast =~# 's'
Bram Moolenaarce001a32022-04-27 15:25:03 +01001066 syn region texSuperscript matchgroup=texDelimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1067 syn region texSubscript matchgroup=texDelimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001068 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001069 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001070 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001071 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001072" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1073 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001074 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001075 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001076 endfun
1077 call s:SuperSub('texSuperscript','\^','0','⁰')
1078 call s:SuperSub('texSuperscript','\^','1','¹')
1079 call s:SuperSub('texSuperscript','\^','2','²')
1080 call s:SuperSub('texSuperscript','\^','3','³')
1081 call s:SuperSub('texSuperscript','\^','4','⁴')
1082 call s:SuperSub('texSuperscript','\^','5','⁵')
1083 call s:SuperSub('texSuperscript','\^','6','⁶')
1084 call s:SuperSub('texSuperscript','\^','7','⁷')
1085 call s:SuperSub('texSuperscript','\^','8','⁸')
1086 call s:SuperSub('texSuperscript','\^','9','⁹')
1087 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1088 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1089 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1090 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1091 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1092 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1093 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1094 call s:SuperSub('texSuperscript','\^','h','ʰ')
1095 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1096 call s:SuperSub('texSuperscript','\^','j','ʲ')
1097 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1098 call s:SuperSub('texSuperscript','\^','l','ˡ')
1099 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1100 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1101 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1102 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1103 call s:SuperSub('texSuperscript','\^','r','ʳ')
1104 call s:SuperSub('texSuperscript','\^','s','ˢ')
1105 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1106 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1107 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1108 call s:SuperSub('texSuperscript','\^','w','ʷ')
1109 call s:SuperSub('texSuperscript','\^','x','ˣ')
1110 call s:SuperSub('texSuperscript','\^','y','ʸ')
1111 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1112 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1113 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1114 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1115 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1116 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1117 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1118 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1119 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1120 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1121 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1122 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1123 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1124 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1125 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1126 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1127 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1128 call s:SuperSub('texSuperscript','\^','U','ᵁ')
Bram Moolenaar388a5d42020-05-26 21:20:45 +02001129 call s:SuperSub('texSuperscript','\^','V','ⱽ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001130 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001131 call s:SuperSub('texSuperscript','\^',',','︐')
1132 call s:SuperSub('texSuperscript','\^',':','︓')
1133 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001134 call s:SuperSub('texSuperscript','\^','+','⁺')
1135 call s:SuperSub('texSuperscript','\^','-','⁻')
1136 call s:SuperSub('texSuperscript','\^','<','˂')
1137 call s:SuperSub('texSuperscript','\^','>','˃')
1138 call s:SuperSub('texSuperscript','\^','/','ˊ')
1139 call s:SuperSub('texSuperscript','\^','(','⁽')
1140 call s:SuperSub('texSuperscript','\^',')','⁾')
1141 call s:SuperSub('texSuperscript','\^','\.','˙')
1142 call s:SuperSub('texSuperscript','\^','=','˭')
1143 call s:SuperSub('texSubscript','_','0','₀')
1144 call s:SuperSub('texSubscript','_','1','₁')
1145 call s:SuperSub('texSubscript','_','2','₂')
1146 call s:SuperSub('texSubscript','_','3','₃')
1147 call s:SuperSub('texSubscript','_','4','₄')
1148 call s:SuperSub('texSubscript','_','5','₅')
1149 call s:SuperSub('texSubscript','_','6','₆')
1150 call s:SuperSub('texSubscript','_','7','₇')
1151 call s:SuperSub('texSubscript','_','8','₈')
1152 call s:SuperSub('texSubscript','_','9','₉')
1153 call s:SuperSub('texSubscript','_','a','ₐ')
1154 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001155 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001156 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001157 call s:SuperSub('texSubscript','_','j','ⱼ')
1158 call s:SuperSub('texSubscript','_','k','ₖ')
1159 call s:SuperSub('texSubscript','_','l','ₗ')
1160 call s:SuperSub('texSubscript','_','m','ₘ')
1161 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001162 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001163 call s:SuperSub('texSubscript','_','p','ₚ')
1164 call s:SuperSub('texSubscript','_','r','ᵣ')
1165 call s:SuperSub('texSubscript','_','s','ₛ')
1166 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001167 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001168 call s:SuperSub('texSubscript','_','v','ᵥ')
1169 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001170 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001171 call s:SuperSub('texSubscript','_','+','₊')
1172 call s:SuperSub('texSubscript','_','-','₋')
1173 call s:SuperSub('texSubscript','_','/','ˏ')
1174 call s:SuperSub('texSubscript','_','(','₍')
1175 call s:SuperSub('texSubscript','_',')','₎')
1176 call s:SuperSub('texSubscript','_','\.','‸')
1177 call s:SuperSub('texSubscript','_','r','ᵣ')
1178 call s:SuperSub('texSubscript','_','v','ᵥ')
1179 call s:SuperSub('texSubscript','_','x','ₓ')
1180 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1181 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1182 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1183 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1184 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001185
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001186 delfun s:SuperSub
1187 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001188
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001189 " Accented characters and Ligatures: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001190 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001191 if b:tex_stylish
1192 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001193 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1194 syn match texLigature '--'
1195 syn match texLigature '---'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001196 else
1197 fun! s:Accents(chr,...)
1198 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001199 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001200 if i > a:0
1201 break
1202 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001203 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001204 let i= i + 1
1205 continue
1206 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001207 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001208 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1209 else
1210 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1211 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001212 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001213 endfor
1214 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001215 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1216 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1217 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1218 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1219 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1220 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1221 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1222 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1223 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1224 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1225 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1226 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1227 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1228 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1229 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1230 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1231 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1232 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1233 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1234 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1235 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1236 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1237 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1238 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1239 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1240 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1241 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1242 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1243 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1244 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1245 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1246 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1247 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1248 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1249 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1250 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1251 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1252 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001253 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1254 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001255 delfun s:Accents
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001256 syn match texAccent '\\aa\>' conceal cchar=å
1257 syn match texAccent '\\AA\>' conceal cchar=Å
1258 syn match texAccent '\\o\>' conceal cchar=ø
1259 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001260 syn match texLigature '\\AE\>' conceal cchar=Æ
1261 syn match texLigature '\\ae\>' conceal cchar=æ
1262 syn match texLigature '\\oe\>' conceal cchar=œ
1263 syn match texLigature '\\OE\>' conceal cchar=Œ
1264 syn match texLigature '\\ss\>' conceal cchar=ß
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001265 syn match texLigature '--' conceal cchar=–
1266 syn match texLigature '---' conceal cchar=—
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001267 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001268 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001269endif
1270
1271" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001272" LaTeX synchronization: {{{1
1273syn sync maxlines=200
1274syn sync minlines=50
1275
1276syn sync match texSyncStop groupthere NONE "%stopzone\>"
1277
1278" Synchronization: {{{1
1279" The $..$ and $$..$$ make for impossible sync patterns
1280" (one can't tell if a "$$" starts or stops a math zone by itself)
1281" The following grouptheres coupled with minlines above
1282" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001283if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001284 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1285 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1286 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1287 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1288 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1289 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1290 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1291 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1292endif
1293
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001294" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001295" Highlighting: {{{1
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001296
1297" Define the default highlighting. {{{1
1298if !exists("skip_tex_syntax_inits")
1299
Bram Moolenaar071d4272004-06-13 20:20:40 +00001300 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001301 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001302 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001303 hi def link texBadMath texError
Bram Moolenaarce001a32022-04-27 15:25:03 +01001304 hi def link texBadPar texBadMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001305 hi def link texMathDelimBad texError
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001306 hi def link texMathError texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001307 if !b:tex_stylish
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001308 hi def link texOnlyMath texError
Bram Moolenaar071d4272004-06-13 20:20:40 +00001309 endif
1310 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001311 hi def link texError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +00001312 endif
1313
Bram Moolenaard38b0552012-04-25 19:07:41 +02001314 hi texBoldStyle gui=bold cterm=bold
1315 hi texItalStyle gui=italic cterm=italic
1316 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1317 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaar723dd942019-04-04 13:11:03 +02001318 hi def link texEmphStyle texItalStyle
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001319 hi def link texCite texRefZone
1320 hi def link texDefCmd texDef
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001321 hi def link texDefName texDef
1322 hi def link texDocType texCmdName
1323 hi def link texDocTypeArgs texCmdArgs
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001324 hi def link texInputFileOpt texCmdArgs
1325 hi def link texInputCurlies texDelimiter
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001326 hi def link texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001327 if !exists("g:tex_no_math")
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001328 hi def link texMathDelimSet1 texMathDelim
1329 hi def link texMathDelimSet2 texMathDelim
1330 hi def link texMathDelimKey texMathDelim
1331 hi def link texMathMatcher texMath
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001332 hi def link texAccent texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001333 hi def link texGreek texStatement
1334 hi def link texSuperscript texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001335 hi def link texSubscript texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001336 hi def link texSuperscripts texSuperscript
1337 hi def link texSubscripts texSubscript
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001338 hi def link texMathSymbol texStatement
1339 hi def link texMathZoneV texMath
1340 hi def link texMathZoneW texMath
1341 hi def link texMathZoneX texMath
1342 hi def link texMathZoneY texMath
1343 hi def link texMathZoneV texMath
1344 hi def link texMathZoneZ texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001345 endif
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001346 hi def link texBeginEnd texCmdName
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001347 hi def link texBeginEndName texSection
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001348 hi def link texSpaceCode texStatement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001349 hi def link texStyleStatement texStatement
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001350 hi def link texTypeSize texType
1351 hi def link texTypeStyle texType
Bram Moolenaar071d4272004-06-13 20:20:40 +00001352
1353 " Basic TeX highlighting groups
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001354 hi def link texCmdArgs Number
1355 hi def link texCmdName Statement
1356 hi def link texComment Comment
1357 hi def link texDef Statement
1358 hi def link texDefParm Special
1359 hi def link texDelimiter Delimiter
Eisuke Kawashimaa35040f2025-02-08 18:32:14 +01001360 hi def link texEnvArgs Number
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001361 hi def link texInput Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001362 hi def link texInputFile Special
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001363 hi def link texLength Number
1364 hi def link texMath Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001365 hi def link texMathDelim Statement
1366 hi def link texMathOper Operator
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001367 hi def link texNewCmd Statement
1368 hi def link texNewEnv Statement
1369 hi def link texOption Number
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001370 hi def link texRefZone Special
1371 hi def link texSection PreCondit
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001372 hi def link texSpaceCodeChar Special
Bram Moolenaar6d5ad4c2016-10-27 17:00:16 +02001373 hi def link texSpecialChar SpecialChar
1374 hi def link texStatement Statement
Bram Moolenaarf37506f2016-08-31 22:22:10 +02001375 hi def link texString String
1376 hi def link texTodo Todo
1377 hi def link texType Type
1378 hi def link texZone PreCondit
Bram Moolenaar071d4272004-06-13 20:20:40 +00001379
Bram Moolenaar071d4272004-06-13 20:20:40 +00001380endif
1381
Bram Moolenaar15146672011-10-20 22:22:38 +02001382" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001383delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001384unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001385let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001386let &cpo = s:keepcpo
1387unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001388" vim: ts=8 fdm=marker