将vim语法突出显示导出到latex
我想利用vim的语法突出显示功能突出显示latex中的代码(任何语言)(使用xcolor包)。因此,我想知道是否有可能让vim脚本导出有关缓冲区中突出显示文本的vim内部信息。显然,知道每个高亮显示实体的开始、结束和颜色就足够了。latex代码或其他语言(如html)的生成将是显而易见的。将vim语法突出显示导出到latex,vim,latex,Vim,Latex,我想利用vim的语法突出显示功能突出显示latex中的代码(任何语言)(使用xcolor包)。因此,我想知道是否有可能让vim脚本导出有关缓冲区中突出显示文本的vim内部信息。显然,知道每个高亮显示实体的开始、结束和颜色就足够了。latex代码或其他语言(如html)的生成将是显而易见的。:TOhtml命令是在Vim中构建的。很明显,它生成的是HTML,而不是Latex。这个:TOhtml命令是在Vim中构建的。很明显,它生成的是HTML,而不是Latex。您可以使用我的插件:它可以使用 For
:TOhtml
命令是在Vim中构建的。很明显,它生成的是HTML,而不是Latex。这个:TOhtml
命令是在Vim中构建的。很明显,它生成的是HTML,而不是Latex。您可以使用我的插件:它可以使用
Format format latex-xcolor
。如果您对结果不满意(它完全未经测试,我几乎从未使用过此选项),请随时发送修补程序,可以查看带有格式规范的字典,您创建自己格式所需的一切都在其中
注意:如果您需要导出到任何其他语言,您所需要的就是根据我的插件为它编写一个规范。下面是一段代码,它将向我的插件添加latex xcolor clone
格式:
scriptencoding utf-8
execute frawor#Setup('0.0', {'plugin/format': '3.0'})
let s:texescape=
\'substitute('.
\ 'substitute(@@@, ''\v[\\\[\]{}&$_\^%#]'', '.
\ '''\=''''\char''''.char2nr(submatch(0))."{}"'', '.
\ '"g"),'.
\'" ", ''\\enskip{}'', "g")'
let s:texstylestart=
\'((@inverse@)?'.
\ '(''\colorbox[HTML]{''.'.
\ '((@fgcolor@!=#"")?'.
\ '(toupper(@fgcolor@[1:])):'.
\ '(toupper(@_fgcolor@[1:])))."}{".'.
\ '''\textcolor[HTML]{''.'.
\ '((@bgcolor@!=#"")?'.
\ '(toupper(@bgcolor@[1:])):'.
\ '(toupper(@_bgcolor@[1:])))."}{"):'.
\ '(((@bgcolor@!=#"")?'.
\ '(''\colorbox[HTML]{''.toupper(@bgcolor@[1:])."}{"):'.
\ '("")).'.
\ '''\textcolor[HTML]{''.'.
\ '((@fgcolor@!=#"")?'.
\ '(toupper(@fgcolor@[1:])):'.
\ '(toupper(@_fgcolor@[1:])))."}{"))'
let s:texstyleend=
\'repeat("}", '.
\ '((@inverse@)?'.
\ '(2):'.
\ '((@bgcolor@!=#"")+1)))'
let s:format={
\'begin': '\documentclass[a4paper,12pt]{article}'.
\ '\usepackage[utf8]{inputenc}'.
\ '\usepackage[HTML]{xcolor}'.
\ '\pagecolor[HTML]{%''toupper(@_bgcolor@[1:])''%}'.
\ '\color[HTML]{%''toupper(@_fgcolor@[1:])''%}'.
\ '\begin{document}{\ttfamily\noindent',
\'line': '%>'.s:texstylestart.".".
\ s:texescape.".".
\ s:texstyleend,
\'lineend': '\\',
\'end': '}\end{document}',
\'strescape': s:texescape,
\}
call s:_f.format.add('latex-xcolor-clone', s:format)
你可以使用我的插件:它可以用
Format format latex-xcolor
。如果您对结果不满意(它完全未经测试,我几乎从未使用过此选项),请随时发送修补程序,可以查看带有格式规范的字典,您创建自己格式所需的一切都在其中
注意:如果您需要导出到任何其他语言,您所需要的就是根据我的插件为它编写一个规范。下面是一段代码,它将向我的插件添加latex xcolor clone
格式:
scriptencoding utf-8
execute frawor#Setup('0.0', {'plugin/format': '3.0'})
let s:texescape=
\'substitute('.
\ 'substitute(@@@, ''\v[\\\[\]{}&$_\^%#]'', '.
\ '''\=''''\char''''.char2nr(submatch(0))."{}"'', '.
\ '"g"),'.
\'" ", ''\\enskip{}'', "g")'
let s:texstylestart=
\'((@inverse@)?'.
\ '(''\colorbox[HTML]{''.'.
\ '((@fgcolor@!=#"")?'.
\ '(toupper(@fgcolor@[1:])):'.
\ '(toupper(@_fgcolor@[1:])))."}{".'.
\ '''\textcolor[HTML]{''.'.
\ '((@bgcolor@!=#"")?'.
\ '(toupper(@bgcolor@[1:])):'.
\ '(toupper(@_bgcolor@[1:])))."}{"):'.
\ '(((@bgcolor@!=#"")?'.
\ '(''\colorbox[HTML]{''.toupper(@bgcolor@[1:])."}{"):'.
\ '("")).'.
\ '''\textcolor[HTML]{''.'.
\ '((@fgcolor@!=#"")?'.
\ '(toupper(@fgcolor@[1:])):'.
\ '(toupper(@_fgcolor@[1:])))."}{"))'
let s:texstyleend=
\'repeat("}", '.
\ '((@inverse@)?'.
\ '(2):'.
\ '((@bgcolor@!=#"")+1)))'
let s:format={
\'begin': '\documentclass[a4paper,12pt]{article}'.
\ '\usepackage[utf8]{inputenc}'.
\ '\usepackage[HTML]{xcolor}'.
\ '\pagecolor[HTML]{%''toupper(@_bgcolor@[1:])''%}'.
\ '\color[HTML]{%''toupper(@_fgcolor@[1:])''%}'.
\ '\begin{document}{\ttfamily\noindent',
\'line': '%>'.s:texstylestart.".".
\ s:texescape.".".
\ s:texstyleend,
\'lineend': '\\',
\'end': '}\end{document}',
\'strescape': s:texescape,
\}
call s:_f.format.add('latex-xcolor-clone', s:format)
那么为什么不直接导出到HTML呢?将组匹配到LaTeX的正则表达式有点复杂:/您知道列表包吗?那么为什么不直接导出到HTML呢?将组与LaTeX匹配的正则表达式有点复杂:/你知道列表包吗?工作起来很有魅力。似乎只有制表器和不可破坏的空格会导致问题,但我可以先替换它们。不确定这是否符合bug报告的条件。@highscigy你是什么意思?制表符替换为空格,不保留。非中断空格不应引起问题,但除非您这样做,否则它们将按原样包括在内。如果您这样做,它们将被包括为使用SpecialKey突出显示的
。(当前:即使您设置hl=8:ErrorMsg
,这将使vim将其突出显示为ErrorMsg
)。set list命令有助于非中断空格。可能是选项卡出现,因为我在vim中显示了它们。事实上,在输出中会出现“»”字符。@highscigue我的插件同时尊重“list”和“listchars”选项(前者仅在某种程度上:除extend和prefers之外的所有选项)。因此,如果选项卡显示为>
,则必须关闭“列表”,添加设置lcs=tab:\\
(即使用空格显示选项卡),在命令行上关闭插件的列表
选项(在目标格式名称后添加nolist
),或使用let g:format\u IgnoreList=1
全局关闭它。默认情况下,我的插件试图使其输出尽可能接近vim显示的内容。@Highscigue一个补充:LaTeX将>
转换为>
,因此如果您有选项卡:?>
(?
-任何符号)然后formatvim可能会在没有字符的地方显示这些字符。为了防止这种情况发生,我必须将s:texescape
更改为escape
,或者(更好)找到一种方法来禁用>
,'
。。。你知道怎么做吗(更好的是:在一个给定的块中,使除\{}[]
之外的所有字符都不特殊)?工作起来很有魅力。似乎只有制表器和不可破坏的空格会导致问题,但我可以先替换它们。不确定这是否符合bug报告的条件。@highscigy你是什么意思?制表符替换为空格,不保留。非中断空格不应引起问题,但除非您这样做,否则它们将按原样包括在内。如果您这样做,它们将被包括为使用SpecialKey突出显示的。(当前:即使您设置hl=8:ErrorMsg
,这将使vim将其突出显示为ErrorMsg
)。set list命令有助于非中断空格。可能是选项卡出现,因为我在vim中显示了它们。事实上,在输出中会出现“»”字符。@highscigue我的插件同时尊重“list”和“listchars”选项(前者仅在某种程度上:除extend和prefers之外的所有选项)。因此,如果选项卡显示为>
,则必须关闭“列表”,添加设置lcs=tab:\\
(即使用空格显示选项卡),在命令行上关闭插件的列表
选项(在目标格式名称后添加nolist
),或使用let g:format\u IgnoreList=1
全局关闭它。默认情况下,我的插件试图使其输出尽可能接近vim显示的内容。@Highscigue一个补充:LaTeX将>
转换为>
,因此如果您有选项卡:?>
(?
-任何符号)然后formatvim可能会在没有字符的地方显示这些字符。为了防止这种情况发生,我必须将s:texescape
更改为escape
,或者(更好)找到一种方法来禁用>
,'
。。。你知道怎么做吗(更好:在一个给定的块中,使除\{}[]
之外的所有字符都不特殊)?