将vim语法高亮导出到latex

Posted

技术标签:

【中文标题】将vim语法高亮导出到latex【英文标题】:Export vim syntax highlighting to latex 【发布时间】:2012-07-01 17:35:59 【问题描述】:

我想利用 vim 的语法高亮功能来高亮 Latex 中的代码(任何语言)(使用 xcolor 包)。因此,我想知道是否可以让 vim 脚本导出有关缓冲区中突出显示文本的 vim 内部信息。显然,知道每个突出显示的实体的开始、结束和颜色就足够了。乳胶代码或其他语言(如 html)的生成将是显而易见的。

【问题讨论】:

那为什么不直接导出到 HTML 呢?正则表达式匹配组到 LaTeX 有点复杂:/ 你知道上市包en.wikibooks.org/wiki/LaTeX/Packages/Listings吗? 【参考方案1】:

:TOhtml 命令内置于 Vim 中。很明显,它生成的是 HTML,而不是 Latex。

【讨论】:

【参考方案2】:

你可以使用我的formatvim插件:它可以导出为latex-xcolor格式

Format format latex-xcolor

。如果您对结果不满意(它完全未经测试,我几乎从未使用过此选项)随时发送补丁,可以看到带有格式规范的字典here,创建自己的格式所需的一切都在@ 987654323@.

注意:如果您需要导出到任何其他语言,您只需根据我的插件为其编写规范。这是一个将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:])''%'.
            \                '\begindocument\ttfamily\noindent',
            \'line':         '%>'.s:texstylestart.".".
            \                     s:texescape.".".
            \                     s:texstyleend,
            \'lineend':      '\\',
            \'end':          '\enddocument',
            \'strescape':    s:texescape,
        \
call s:_f.format.add('latex-xcolor-clone', s:format)

【讨论】:

像魅力一样工作。只有制表符和不可破坏的空格似乎会引起问题,但我可以先替换它们。不确定这是否符合错误报告的条件。 @highsciguy 你什么意思?制表符被替换为空格,它们不会被保留。不间断空格不应该引起问题,但除非你这样做set list listchars=nbsp:_,否则它们将按原样包含在内。如果你这样做,它们将被包含为 _ 使用 SpecialKey 突出显示(当前:即使你这样做 set hl=8:ErrorMsg 这将使 vim 将其突出显示为 ErrorMsg)。 set list 命令有助于不间断的空格。可能是选项卡出现了,因为我将它们显示在 vim 中。实际上在输出中出现了“»”字符。 @highsciguy 我的插件同时尊重 'list' 和 'listchars' 选项(前者仅在某种程度上:除了扩展和之前的所有内容)。因此,如果您的选项卡显示为»,那么您必须关闭“列表”,添加set lcs=tab:\ \ (即使用空格显示选项卡),在命令行上关闭插件的list 选项(通过添加@ 987654334@ 在目标格式名称之后)或使用let g:format_IgnoreList=1 全局关闭它。默认情况下,我的插件会尝试使其输出尽可能接近 vim 显示的内容。 @highsciguy 一个补充:LaTeX 将 >> 变成 » 所以如果你有 tab:?>? - 任何符号)那么很可能 formatvim 会在有这些字符的地方显示这些字符不。为了防止它发生,我必须更改s:texescape 以逃避> 或者(更好)找到一种方法来禁用>>''、...你知道怎么做吗(很多更好:在给定的块中,使除\[] 之外的所有字符都不特殊)?

以上是关于将vim语法高亮导出到latex的主要内容,如果未能解决你的问题,请参考以下文章

vim 支持 nginx配置文件 语法高亮

用于 arXiv 的 Lua 语法高亮乳胶

同一文件中多种语言的语法高亮显示:StatWeave/SAS/LaTeX

.Rnw 文件 (LaTeX) 中的 knitr 语法高亮显示

有没有人遇到过在 iterm2 下 vim 语法高亮的问题

将彩色语法高亮打印到纸上