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

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

【问题讨论】:

标签: vim latex


【解决方案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:])''%}'.
                \                '\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)
    

    【讨论】:

    • 像魅力一样工作。只有制表符和不可破坏的空格似乎会引起问题,但我可以先替换它们。不确定这是否符合错误报告的条件。
    • @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 以逃避> 或者(更好)找到一种方法来禁用>>''、...你知道怎么做吗(很多更好:在给定的块中,使除\{}[] 之外的所有字符都不特殊)?
    猜你喜欢
    • 2012-08-16
    • 2014-11-14
    • 2011-01-19
    • 2015-08-08
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多