TeXShop

TeXShop

我开始将LaTeX3代码嵌入到我的自定义类和包中,并且随着对它的了解越来越多,我越来越喜欢它,但至少对我来说,如果我可以使用一些对代码敏感的编辑器,这将带来更好的体验,这在我经常使用的计算机语言中很常见。LaTeX3显示敏感的编辑器,这将带来更好的体验,这在我经常使用的计算机语言中很常见。

现在可能有点太早了,因为界面(据我所知,还有实现本身)仍然在开发中,而且并不是所有已经可用的东西都是稳定的,但整体稳定性(如果有这样的事情的话)可能还遥遥领先,而且在我看来,我们已经拥有足够稳定的元素,我们可以从这些编辑功能中受益。

确实,人们总是可以相应地设置一个喜欢的文本编辑器(WinEdt是我处理所有 TeX 内容的常规编辑器,但我并没有特别使用任何编辑器),但我要求的是已经制作好的东西......并试图引起开发人员对这个主题的关注。

有人知道有哪个编辑器有这种功能吗?有这方面的项目吗?

答案1

更新(2017-02-14)

感谢你花在回答下面的问题上的时间,以及 WinEdt 10.2 中的一些新功能,现在 WinEdt 10.2 真的“对 LaTeX3 敏感”

WinEdt 10.2 结合了该答案中的突出显示方案(并进行了许多改进),并具有许多其他功能以支持 LaTeX3(例如,使用 等定义的命令和环境的命令完成\NewDocumentCommand\NewDocumentEnvironment


WinEdt 的完整突出显示方案

expl3这是WinEdt 8 中的突出显示方案。

新功能:现可作为附加组件使用: LaTeX3


.dtx突出显示文件中的 LaTeX3 保护

Switches.ini在开关之前添加以下几行SWITCH="DTX Single Guard"

SWITCH="DTX LaTeX3 Guard"
  ENABLED=1
  MODE_FILTER="DTX"
  START="DTX %"
  STOP=">"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=1
  HIGHLIGHT_STOP=1
  SCOPE=1
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=1
  PRIORITY=9
  INDENTED=0
  BOLN_ONLY=1
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="<@@="
  STOP1_TRIGGER=""
  STOP2_TRIGGER=""
    TEXT_COLOR=5
    BACKGROUND_RGB="$F8F8F8"
    TRANSPARENT=144
    DEFAULT_FONT=1

结果:

在此处输入图片描述

在“树”中收集 LaTeX3 保护

Tree.ini在分支内添加以下几行BRANCH="Guards-DTX",就在行END="</?>"和之间ITEM="<?>"

  ITEM="<@@=?>"
    MODE_FILTER="DTX"
    CASE_SENSITIVE=1
    LINE_START="%"
    BEGINNING_OF_LINE_ONLY=2
    CURRENT_DOCUMENT_ONLY=1
    ALL_OPENED_DOCUMENTS=0
    COMPLETE_PROJECT_TREE=1
    ICON="ArrowPurple"
    LEVEL=0
    CAPTION="%?"
    MAX_LINE_SPAN=1
    ON_CTRL_CLICK_MACRO="GlobalMark;TreeTrack(2);"
    ON_CLICK_MACRO="TreeTrack(2,1);"
    ON_DBL_CLICK_MACRO="TreeTrack(2,2);"
    ACTION="Find"
      IMAGE="Find"
      MACRO="TreeTrack(2);"
  END="<@@=?>"

结果:

在此处输入图片描述

突出显示 LaTeX3 命令

FilterSets.ini在set 之前添加以下几行FILTER_SET="~AlphaNumeric"

FILTER_SET="~Alpha@_:"
  ENABLED=0
  MODE_FILTER=""
  SET=:~(Alpha+["@_:"])
  BEFORE=""
  AFTER=""
  BOLN_NOT_OK=0
  EOLN_NOT_OK=0
  STRICT_PRIORITY=0
  PRIORITY=0
    DEFAULT_FONT=1

然后,Switches.ini在交换机中SWITCH="\",将行

STOP="~Alpha@"

STOP="~Alpha@_:"

最后,在 中Keywords.ini,替换所有出现的

AFTER="~Alpha@"

AFTER="~Alpha@_:"

结果:

在此处输入图片描述

突出显示 LaTeX3 内核关键字

Switches.ini在开关之前添加以下几行SWITCH="\"

SWITCH="LaTeX3 Kernel Engine Prefixes"
  ENABLED=1
  MODE_FILTER="TeX"
  START="\"
  STOP="~Alpha@_:"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=0
  HIGHLIGHT_STOP=0
  SCOPE=0
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=0
  PRIORITY=5
  INDENTED=0
  BOLN_ONLY=0
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="luatex_if_engine"
  START2_TRIGGER="pdftex_if_engine"
  START2_TRIGGER="xetex_if_engine"
  STOP1_TRIGGER=""
  STOP2_TRIGGER=""
    TEXT_COLOR=5
    DEFAULT_FONT=1
    BOLD=1

SWITCH="LaTeX3 Kernel Prefixes"
  ENABLED=1
  MODE_FILTER="TeX"
  START="\"
  STOP="~Alpha@_:"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=0
  HIGHLIGHT_STOP=0
  SCOPE=0
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=0
  PRIORITY=5
  INDENTED=0
  BOLN_ONLY=0
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="alloc_"
  START2_TRIGGER="bool_"
  START2_TRIGGER="box_"
  START2_TRIGGER="cctab_"
  START2_TRIGGER="char_"
  START2_TRIGGER="chk_"
  START2_TRIGGER="clist_"
  START2_TRIGGER="codedoc_"
  START2_TRIGGER="coffin_"
  START2_TRIGGER="color_"
  START2_TRIGGER="cs_"
  START2_TRIGGER="dim_"
  START2_TRIGGER="driver_"
  START2_TRIGGER="else_"
  START2_TRIGGER="etex_"
  START2_TRIGGER="exp_"
  START2_TRIGGER="expl_"
  START2_TRIGGER="fi_"
  START2_TRIGGER="fp_"
  START2_TRIGGER="group_"
  START2_TRIGGER="hbox_"
  START2_TRIGGER="hcoffin_"
  START2_TRIGGER="if_"
  START2_TRIGGER="insert_"
  START2_TRIGGER="int_"
  START2_TRIGGER="kernel_"
  START2_TRIGGER="keys_"
  START2_TRIGGER="keyval_"
  START2_TRIGGER="lua_"
  START2_TRIGGER="luatex_"
  START2_TRIGGER="mode_"
  START2_TRIGGER="muskip_"
  START2_TRIGGER="or_"
  START2_TRIGGER="pdftex_"
  START2_TRIGGER="peek_"
  START2_TRIGGER="prop_"
  START2_TRIGGER="quark_"
  START2_TRIGGER="reverse_"
  START2_TRIGGER="seq_"
  START2_TRIGGER="skip_"
  START2_TRIGGER="str_"
  START2_TRIGGER="tex_"
  START2_TRIGGER="tl_"
  START2_TRIGGER="token_"
  START2_TRIGGER="use_"
  START2_TRIGGER="vbox_"
  START2_TRIGGER="vcoffin_"
  START2_TRIGGER="xetex_"
  STOP1_TRIGGER=""
  STOP2_TRIGGER=""
    TEXT_COLOR=4
    DEFAULT_FONT=1
    BOLD=1

SWITCH="LaTeX3 File Handling"
  ENABLED=1
  MODE_FILTER="TeX"
  START="\"
  STOP="~Alpha@_:"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=0
  HIGHLIGHT_STOP=0
  SCOPE=0
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=0
  PRIORITY=5
  INDENTED=0
  BOLN_ONLY=0
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="file_"
  START2_TRIGGER="g_file_"
  START2_TRIGGER="ior_"
  START2_TRIGGER="iow_"
  START2_TRIGGER="l_ior_"
  START2_TRIGGER="l_iow_"
  STOP1_TRIGGER=""
  STOP2_TRIGGER=""
   TEXT_COLOR=2
   DEFAULT_FONT=1
   BOLD=1

SWITCH="LaTeX3 Package Messages"
 ENABLED=1
 MODE_FILTER="TeX"
 START="\"
 STOP="~Alpha@_:"
 HIGHLIGHT_START=1
 STEP_OVER_STOP=0
 HIGHLIGHT_STOP=0
 SCOPE=0
 DOMINANT_PRIORITY=0
 STRICT_PRIORITY=0
 PRIORITY=5
 INDENTED=0
 BOLN_ONLY=0
 CASE_SENSITIVE=1
 START1_TRIGGER=""
 START2_TRIGGER="msg_"
 STOP1_TRIGGER=""
 STOP2_TRIGGER=""
  TEXT_COLOR=9
  DEFAULT_FONT=1
  ITALIC=1

SWITCH="LaTeX3 NoOp Functions"
 ENABLED=1
 MODE_FILTER="TeX"
 START="\"
 STOP="~Alpha@_:"
 HIGHLIGHT_START=1
 STEP_OVER_STOP=0
 HIGHLIGHT_STOP=0
 SCOPE=0
 DOMINANT_PRIORITY=0
 STRICT_PRIORITY=0
 PRIORITY=5
 INDENTED=0
 BOLN_ONLY=0
 CASE_SENSITIVE=1
 START1_TRIGGER=""
 START2_TRIGGER="prg_"
 START2_TRIGGER="scan_"
 STOP1_TRIGGER=""
 STOP2_TRIGGER=""
  TEXT_COLOR=3
  DEFAULT_FONT=1
  BOLD=1

Keywords.ini然后,在组之前添加以下几行KEYWORD_GROUP="TeX Units"

KEYWORD_GROUP="LaTeX3  Keywords"
  ENABLED=1
  MODE_FILTER="TeX"
  BEFORE="\ (single)"
  AFTER="~Alpha@_:"
  BOLN_NOT_OK=1
  EOLN_NOT_OK=0
  STRICT_PRIORITY=0
  PRIORITY=6
  CASE_SENSITIVE=1
    TEXT_COLOR=0
    DEFAULT_FONT=1
    BOLD=1
    UNDERLINE=1
LIST="END_LIST"
ExplSyntaxOff
ExplSyntaxOn
END_LIST

KEYWORD_GROUP="LaTeX3  Keywords..."
  ENABLED=1
  MODE_FILTER="TeX"
  BEFORE="\ (single)"
  AFTER="~Alpha@_:"
  BOLN_NOT_OK=1
  EOLN_NOT_OK=0
  STRICT_PRIORITY=0
  PRIORITY=6
  CASE_SENSITIVE=1
    TEXT_COLOR=4
    DEFAULT_FONT=1
    BOLD=1
LIST="END_LIST"
DeclareDocumentCommand
DeclareDocumentEnvironment
NewDocumentCommand
NewDocumentEnvironment
ProvideDocumentCommand
ProvideDocumentEnvironment
RenewDocumentCommand
RenewDocumentEnvironment
END_LIST

结果:

在此处输入图片描述

突出显示 LaTeX3 属性和常量

这是对此能做的最好的事情了。

FilterSets.ini在set 之前添加以下几行FILTER_SET="="

FILTER_SET="."
  ENABLED=0
  MODE_FILTER=""
  SET=:["."]
  BEFORE=""
  AFTER=""
  BOLN_NOT_OK=0
  EOLN_NOT_OK=0
  STRICT_PRIORITY=0
  PRIORITY=0
    DEFAULT_FONT=1

Switches.ini然后,在开关之前SWITCH="\"(新定义的开关之后SWITCH="LaTeX3 Kernel Prefixes")添加以下几行

SWITCH="LaTeX3 Properties"
  ENABLED=1
  MODE_FILTER="TeX"
  START="."
  STOP=":"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=1
  HIGHLIGHT_STOP=1
  SCOPE=0
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=0
  PRIORITY=5
  INDENTED=0
  BOLN_ONLY=0
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="code"
  START2_TRIGGER="choice"
  START2_TRIGGER="choice_code"
  START2_TRIGGER="generate_choices"
  START2_TRIGGER="initial"
  START2_TRIGGER="default"
  START2_TRIGGER="meta"
  START2_TRIGGER="alloc_"
  START2_TRIGGER="bool_"
  START2_TRIGGER="box_"
  START2_TRIGGER="cctab_"
  START2_TRIGGER="char_"
  START2_TRIGGER="chk_"
  START2_TRIGGER="clist_"
  START2_TRIGGER="codedoc_"
  START2_TRIGGER="coffin_"
  START2_TRIGGER="color_"
  START2_TRIGGER="cs_"
  START2_TRIGGER="dim_"
  START2_TRIGGER="driver_"
  START2_TRIGGER="else_"
  START2_TRIGGER="etex_"
  START2_TRIGGER="exp_"
  START2_TRIGGER="expl_"
  START2_TRIGGER="fi_"
  START2_TRIGGER="file_"
  START2_TRIGGER="fp_"
  START2_TRIGGER="group_"
  START2_TRIGGER="hbox_"
  START2_TRIGGER="hcoffin_"
  START2_TRIGGER="if_"
  START2_TRIGGER="insert_"
  START2_TRIGGER="int_"
  START2_TRIGGER="ior_"
  START2_TRIGGER="iow_"
  START2_TRIGGER="kernel_"
  START2_TRIGGER="keys_"
  START2_TRIGGER="keyval_"
  START2_TRIGGER="lua_"
  START2_TRIGGER="luatex_"
  START2_TRIGGER="mode_"
  START2_TRIGGER="msg_"
  START2_TRIGGER="muskip_"
  START2_TRIGGER="or_"
  START2_TRIGGER="pdftex_"
  START2_TRIGGER="peek_"
  START2_TRIGGER="prg_"
  START2_TRIGGER="prop_"
  START2_TRIGGER="quark_"
  START2_TRIGGER="reverse_"
  START2_TRIGGER="scan_"
  START2_TRIGGER="seq_"
  START2_TRIGGER="skip_"
  START2_TRIGGER="str_"
  START2_TRIGGER="tex_"
  START2_TRIGGER="tl_"
  START2_TRIGGER="token_"
  START2_TRIGGER="use_"
  START2_TRIGGER="vbox_"
  START2_TRIGGER="vcoffin_"
  START2_TRIGGER="xetex_"
  STOP1_TRIGGER=""
  STOP2_TRIGGER="n"
  STOP2_TRIGGER="N"
  STOP2_TRIGGER="x"
    TEXT_COLOR=1
    DEFAULT_FONT=1
    ITALIC=1

SWITCH="LaTeX3 Kernel Constants"
  ENABLED=1
  MODE_FILTER="TeX"
  START="\"
  STOP="~Alpha@_:"
  HIGHLIGHT_START=1
  STEP_OVER_STOP=0
  HIGHLIGHT_STOP=0
  SCOPE=0
  DOMINANT_PRIORITY=0
  STRICT_PRIORITY=0
  PRIORITY=5
  INDENTED=0
  BOLN_ONLY=0
  CASE_SENSITIVE=1
  START1_TRIGGER=""
  START2_TRIGGER="c_"
  STOP1_TRIGGER=""
  STOP2_TRIGGER=""
    TEXT_COLOR=6
    DEFAULT_FONT=1
    ITALIC=1

结果:

在此处输入图片描述

答案2

记录一下,这是我在 Emacs 和 LaTeX3 中设置的字体锁定。为了使用这些设置,我定义了一个latex3-mode从 inbuild 派生的latex-mode字体锁定。(注意:我不使用 AucTeX,我使用简单的 TeX 模式。)字体锁定的想法与 Joseph 的想法类似,因为它增加了更多匹配以进行突出显示。我specials为核心函数添加了一个(可能尚未全部包含)。带有一个的宏_和不带有一个的宏之间也有区别(例如普通的 LaTeX2e 宏/函数和这些xparse宏)。我可能需要定义更多的面来进一步区分,但目前对我来说这已经足够好了。

(defconst latex3-font-lock-keywords
   (eval-when-compile
     (let* (;; Commands relevant to data structures
            (specials "\\(bool\\|char\\|clist\\|cs\\|exp\\|file\\|group\\|keys\\|prop\\|q\\|seq\\|tl\\)_[a-zA-Z_:]+")
            (general "\\([a-zA-Z_:]+\\)")
            (camel "\\([a-zA-Z@]+\\)")
            (nocamel "\\(?:[^a-zA-Z@_:]\\)")
            (slash "\\\\")
            )
       (list
        (list (concat "\\(" slash specials "\\)")
              1 'font-lock-function-name-face)
        (list (concat "\\(" slash camel "\\)" nocamel) 1 'font-lock-function-name-face)
        (list (concat "\\(" slash general "\\)") 1 'font-lock-variable-name-face)
        )
       )
     )
  "Extra commands to highlight in LaTeX3 modes."
  )

(define-derived-mode latex3-mode latex-mode "LaTeX3"
  "Major mode to edit LaTeX3 files."
  (set (make-local-variable 'font-lock-defaults)
       '((tex-font-lock-keywords latex3-font-lock-keywords) 
         nil nil ((?$ . "\"")) nil
         ;; Who ever uses that anyway ???
         (font-lock-mark-block-function . mark-paragraph)
         (font-lock-syntactic-face-function
          . tex-font-lock-syntactic-face-function)
         (font-lock-unfontify-region-function
          . tex-font-lock-unfontify-region)
         (font-lock-syntactic-keywords
          . tex-font-lock-syntactic-keywords)
         (parse-sexp-lookup-properties . t)))
 )

(add-hook 'latex3-mode-hook (function (lambda () (setq ispell-parser 'tex))))
(add-hook 'latex3-mode-hook '(lambda () (flyspell-mode 0)))

下面是一个屏幕截图(您可以看到我应该将 添加boxvbox我的特殊功能列表中):

具有 L3 字体锁定功能的 Emacs

答案3

特克斯沃克斯使用基于正则表达式的简单方法进行语法突出显示,信息存储在文件syntax-patterns.txt夹内的文件中TeXworks/configuration,该文件位于系统相关的位置。我有一套用于处理.dtx(LaTeX 文档源)文件的模式,其中包括expl3代码突出显示:

[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!\|]+|.)>
darkviolet     N    %<@@=(?:[A-Za-z]+|.)>

# 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@:_]+|.)

(配色方案基于 WinEdt 用于.dtx编辑的方案,因为我以前使用过 WinEdt。)

关键行是最后一行,因为正则表达式\\(?:[A-Za-z@:_]+|.)匹配expl3“标准”LaTeX2e 宏名称。如果您只想用expl3一种颜色突出显示代码级宏,则可以使用类似

# functions
blue        N    \\(?:[A-Za-z_]+):(?:[A-Za-z_:]+|.)
# Variables
blue    N    \\(?:[A-Za-z_]+)_(?:[A-Za-z_]+|.)

这样就不会突出显示文档/设计级别(仅突出显示名称中的字母)或 LaTeX2e 内部(@名称中的)控制序列。当然,您可以做得更复杂,并给它们都不同的突出显示!您还可以像 Andrew Stacey 在他的回答expl3使用更复杂的正则表达式来区分核心名称和“附加”名称。

请注意,我还扩展了.dtx可识别的防护,以覆盖添加到“标准”集的%<@@=...>防护,用于标记内部名称。它由以下行覆盖l3doscrip

darkviolet     N    %<@@=(?:[A-Za-z]+|.)>

我必须找到一种新的颜色来适应已经在使用的颜色!

答案4

TeXShop

从版本 5.27 开始,TeXShop可以使用颜色代码。 (通过 访问)expl3的第 24 章全部介绍了此功能。 可以通过选择菜单选项来打开或关闭它。 其中包括显示 源代码的屏幕截图。TeXShop ManualHelp -> TeXShop ManualSource -> Syntax Color expl3 Codesiunitx.sty

TeXShop 的源窗口显示 expl3 语法高亮

相关内容