LaTeX 文档源 (.dtx) 文件的编辑器/IDE

LaTeX 文档源 (.dtx) 文件的编辑器/IDE

类似于问题“Latex 编辑器/IDE“,“我很好奇是否有任何编辑器或插件直接支持 LaTeX 文档源 (.dtx) 格式。

我认为这样的编辑器应该支持实现和文档的语法高亮,也许可以使用不同的背景来增加各部分之间的对比度。正如大多数编辑器会保留换行符的缩进一样,%在文档模式中保留行距也会很有帮助。支持特定宏的额外好处Doc

有这样的事吗?有足够多的人实际编辑.dtx文件以满足足够的需求吗?

答案1

一些编辑器有专门的.dtx模式。从个人经验来说,编辑如果你想要一个“重量级”的编辑器,那么它就很不错。作为替代方案,特克斯沃克斯很容易使用新的语法高亮样式进行自定义。我使用 TeXworks 的自定义正则表达式集进行.dtx编辑:

[LaTeX DTX]

# comments
red        Y    \^\^A.*

# Guards
orange        N    %<(?:[A-Za-z0-9!\|]+|.)>
limegreen    N    %<\*(?:[A-Za-z0-9!\|]+|.)>
crimson        N    %</(?:[A-Za-z0-9!\|]+|.)>

# special characters
darkred        N    \^\^\^\^\^[0-9a-z]{5}
darkred        N    \^\^\^\^[0-9a-z]{4}
darkred        N    \^\^\^[0-9a-z]{3}
darkred        N    \^\^[0-9a-z]{2}
darkred        N    [$#^_{}&]
gray        N    ^%%.*
gray        N    ^%

# Macrocode
green        N    \\(?:begin|end)\{macrocode\}

# LaTeX environments
darkgreen    N    \\(?:begin|end)\s*\{[^}]*\}

# control sequences
blue        N    \\(?:[A-Za-z@:_]+|.)

另一个常见的选择,但我没有用过,是曲线下面积,插入Emacs

(我已经介绍过.dtx关于我的博客中编辑的一些细节过去:我在那里给出的编辑列表与我在这里给出的相同。

答案2

你可以这样做Vim。它禁用文件的“%”注释.dtx。您可以为环境内的所有代码重新激活它{macrocode},甚至可以切换语言。这通过Vim 技巧 857

我使用了这个,svn-multi-pl.dtx它实际上描述了一个 Perl 脚本。

答案3

作为另一种选择,我只是随便为 TextMate 提供了一个解决方案。它并不复杂,但需要一些技巧才能在实现和文档中同时使用现有的 LaTeX 语言语法。

它有几个问题。最值得注意的是,许多.dtx文件对 的 catcode 做了一些奇怪的事情$,因此,TextMate 会疯狂地尝试匹配所有$s,即使没有匹配的对。由于某些.dtx文件可能超过 30k 行,这可能会导致解析器锁定相当长一段时间(除了解析 之后的所有错误内容$)。

latex.tmbundle直接从GitHub 上的官方分支,但它可以轻松地集成到其他分支中。

以下是纯文本格式的 plist 语言:

{   scopeName = 'text.tex.latex.dtx';
    firstLineMatch = '^%\s*\\iffalse\s+(?:meta-)?comment';
    fileTypes = ( '.dtx' );
    patterns = (
        {   name = 'text.tex.latex.dtx.implementation';
            begin = '(?:^(%)    (\\begin){macrocode}|^(%)\s*(\\iffalse\b)(.*)$\n)';
            end = '(?:^(%)    (\\end){macrocode}|^(%)\s*(\\fi)\b)';
            beginCaptures = {
                1 = { name = 'comment.block.tex.latex.dtx'; };
                2 = { name = 'keyword.control.tex'; };
                3 = { name = 'comment.block.tex.latex.dtx'; };
                4 = { name = 'keyword.control.tex'; };
                5 = { name = 'comment.block.tex.latex.dtx'; };
            };
            endCaptures = {
                1 = { name = 'comment.block.tex.latex.dtx'; };
                2 = { name = 'keyword.control.tex'; };
                3 = { name = 'comment.block.tex.latex.dtx'; };
                4 = { name = 'keyword.control.tex'; };
            };
            patterns = (
                {   match = '^(%)(<[\*/]?(?:[A-Za-z0-9!\|]+|.)>)';
                    captures = {
                        1 = { name = 'comment.block.tex.latex.dtx'; };
                        2 = { name = 'entity.name.selection.tex.latex.dtx'; };
                    };
                },
                {   include = 'text.tex.latex'; },
            );
        },
        {   name = 'comment.block.tex.latex.dtx';
            match = '^%';
        },
        {   name = 'text.tex.latex.dtx.documentation';
            begin = '(\\CharacterTable)\b';
            end = '(?<!\\)}';
            beginCaptures = { 1 = { name = 'keyword.control.tex'; }; };
            patterns = (
                {   name = 'comment.block.tex.latex.dtx';
                    match = '^%';
                },
                {   name = 'markup.raw.charactertable';
                    match = '.';
                },
            );
        },
        {   include = 'text.tex.latex'; },
    );
}

相关内容