You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写Emacs函数:为选中内容添加LaTeX斜体格式

Solution for LaTeX Italicization in Org-Mode Without Conflicting with Native Emphasis

Got it, I totally get your frustration—Org-mode's native emphasis markers are great until you need to use raw LaTeX commands for export consistency. Here's a custom Elisp function tailored exactly to your needs, modeled after org-emphasize but modified to wrap text with \textit{} instead of Org's native markers:

(defun org-latex-italicize ()
  "Wrap selected text (or insert empty template) with LaTeX \\textit{} for Org-mode.
Automatically strips existing Org emphasis markers to avoid nesting conflicts."
  (interactive)
  (let ((beg (region-beginning))
        (end (region-end))
        (text "")
        move-cursor)
    ;; Check if text is selected
    (if (org-region-active-p)
        (setq text (buffer-substring beg end))
      (setq move-cursor t))
    ;; Remove existing Org emphasis markers (optional but recommended)
    (while (and (> (length text) 1)
                (equal (substring text 0 1) (substring text -1))
                (assoc (substring text 0 1) org-emphasis-alist))
      (setq text (substring text 1 -1)))
    ;; Wrap text with LaTeX italic command
    (setq text (concat "\\textit{" text "}"))
    ;; Replace selected region if present
    (when beg (delete-region beg end))
    ;; Insert the formatted text
    (insert text)
    ;; Position cursor inside braces if no text was selected
    (when move-cursor
      (backward-char 1))))

Key Features

  • Region Support: Works with selected text just like org-emphasize—select text, hit your shortcut, and it's wrapped in \textit{}.
  • Cleanup Existing Markers: Automatically removes Org's native emphasis (like /italic/ or *bold*) from selected text to prevent messy nested syntax.
  • Empty Template Insert: If you don't have text selected, it inserts \textit{} and places your cursor between the braces for quick typing.
  • Export-Safe: Uses raw LaTeX syntax that Org's LaTeX exporter will pass through directly, no parsing conflicts.

How to Use

  1. Add the function to your Emacs init file (~/.emacs, ~/.emacs.d/init.el, or ~/.config/emacs/init.el).
  2. Bind it to a convenient key in Org-mode. For example, to bind it to C-c i, add this to your init file:
(add-hook 'org-mode-hook
          (lambda ()
            (local-set-key (kbd "C-c i") 'org-latex-italicize)))
  1. Activate the changes by restarting Emacs or running M-x eval-buffer on your init file.

Optional Adjustment

If you don't want the function to strip existing Org emphasis markers, simply delete the entire while loop block from the function code.

内容的提问来源于stack exchange,提问作者Carlos Alberto Rivera Carreño

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:23:22