【问题标题】:Global substitution for latex commands in vimvim 中乳胶命令的全局替换
【发布时间】:2012-07-17 00:51:00
【问题描述】:

我正在写一个很长的文档,并且我经常将一些术语格式化为斜体。一段时间后,我意识到也许这就是我现在想要的,所以我想删除所有将文本格式化为斜体的乳胶命令。

例子:

\textit{Vim} is undoubtedly one of the best editors ever made. \textit{LaTeX} is an extremely powerful, intelligent typesetter. \textbd{Vim-LaTeX} aims at bringing together the best of both these worlds

如何运行一个替换命令来识别\textit{whatever} 的所有实例并将它们更改为仅whatever 而不会影响本示例中的\textbd{Vim-LaTeX} 等不同命令?

编辑:从技术上讲,有帮助的答案是来自 Igor 的答案,我会将其标记为正确的答案。尽管如此,应该考虑康拉德的回答,因为它显示了要遵循的正确乳胶策略。

【问题讨论】:

    标签: regex vim latex


    【解决方案1】:

    您根本不应该在文本中使用格式化命令。

    LaTeX 是围绕语义标记的思想构建的。所以不要说“这个文本应该是斜体”,你应该使用它的函数来标记文本。例如:

    \product{Vim} is undoubtedly one of the best editors ever made. \product{LaTeX}
    is an extremely powerful, intelligent typesetter. \product{Vim-LaTeX} aims at
    bringing together the best of both these worlds
    

    ... 然后,在您的序言、包或文档类中,您(重新)定义一个宏 \product 来设置您想要的格式。这样,您可以在认为有必要时调整宏,而无需更改代码。

    或者,如果您想完全删除格式,只需让宏显示其裸参数:

    \newcommand*\product[1]{#1}
    

    【讨论】:

    • 感谢您的回答。我明白你的意思,但我仍然会遇到同样的问题:\product{whatever}whatever
    • 您可以将\product{whatever} 重新定义为一个什么都不做的命令。然后,在最终的 PDF 中,它就像你写了 whatever 一样。如果您需要帮助,请来 tex.SE。
    【解决方案2】:

    使用这个替换命令:

    % s/\\textit{\([^}]*\)}/\1/
    

    如果 textit 可以跨越多行:

    %! perl -e 'local $/; $_=<>; s/\\textit{([^}]*)}/$1/g; print;'
    

    你也可以在没有 perl 的情况下做到这一点:

    %s/\\textit{\(\_.\{-}\)}/\1/g
    

    这里:

    • \_. -- 任何符号,包括换行符
    • \{-} -- 使 * 非贪婪。

    【讨论】:

    • 这可以按我的需要工作,但正如@gerrit 所说,我不适用于多行。使用 s 标志并没有解决它。
    • @gerrit:谢谢你的建议;我添加了另一个(支持多行的)解决方案
    • 好的。我似乎无法撤消我的反对票,请参阅meta.stackexchange.com/questions/71121/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多