ฉันได้ทำบางสิ่งบางอย่างที่คล้ายกัน มันเป็นภาษาฝรั่งเศส แต่รหัสควรพูดด้วยตัวของมันเอง ฉันใช้‰
สำหรับเครื่องหมาย (ฉันใช้เลย์เอาต์ bepo ) และเมื่อฉันทำข้อความที่ทำเครื่องหมายว่าเป็นรูปแบบปุ่มกด
ฉันไม่คล่องแคล่วในเสียงกระเพื่อมดังนั้นอาจมีที่ว่างสำหรับการปรับปรุง
สิ่งที่ฉันทำคือเมื่อใช้‰
สำหรับตัวทำเครื่องหมายข้อความที่ทำเครื่องหมายจะมีลักษณะเป็นปุ่มกดและเมื่อส่งออกแล้วจะถูกแปลเป็น<kbd>
ก่อนอื่นฉันต้องกำหนดหน้าใหม่:
(defface my-face-org-keystroke
'((t (:inherit shadow
:box (:line-width -2 ;neg. in order to keep the same size of lines
:color "grey75"
:style pressed-button)))) "Face for keystrokes"
:group 'org-faces)
จากนั้นปรับแต่ง org-emphasis-alist
:
(("*" bold)
("/" italic)
("_" underline)
("=" org-code verbatim)
("~" org-verbatim verbatim)
("+"
(:strike-through t))
("‰" my-face-org-keystroke verbatim));This line is what you want to add
เพื่อการส่งออกคุณอาจจำเป็นต้องโหลดด้วยox.el
(require 'ox)
จากนั้นทุกครั้งbold
หรือcode
ปรากฏในฟังก์ชั่น (ในox-org.el
) ฉันได้สร้างฟังก์ชั่นที่คล้ายกัน (หรือแก้ไขที่มีอยู่):
;creation
(defun org-html-keystroke (keystroke contents info)
"Transcode KEYSTROKE from Org to HTML.
CONTENTS is nil. INFO is a plist holding contextual
information."
(format (or (cdr (assq 'my-object-keystroke org-html-text-markup-alist)) "%s")
(org-html-encode-plain-text (org-element-property :value keystroke))))
;creation
(defun org-element-my-object-keystroke-parser ()
"Parse code object at point.
Return a list whose CAR is `my-object-keystroke' and CDR is a plist with
`:value', `:begin', `:end' and `:post-blank' keywords.
Assume point is at the first tilde marker."
(interactive)
(save-excursion
(unless (bolp) (backward-char 1))
(looking-at org-emph-re)
(let ((begin (match-beginning 2))
(value (org-match-string-no-properties 4))
(post-blank (progn (goto-char (match-end 2))
(skip-chars-forward " \t")))
(end (point)))
(list 'my-object-keystroke
(list :value value
:begin begin
:end end
:post-blank post-blank)))))
;creation
(defun org-element-my-object-keystroke-interpreter (keystroke contents)
"Interpret KEYSTROKE object as Org syntax.
CONTENTS is nil."
(format "‰%s‰" (org-element-property :value keystroke)))
;modification
(defconst org-element-object-successor-alist
'((subscript . sub/superscript) (superscript . sub/superscript)
(bold . text-markup) (code . text-markup) (italic . text-markup)
(strike-through . text-markup) (underline . text-markup)
(verbatim . text-markup) (entity . latex-or-entity)
(latex-fragment . latex-or-entity) (my-object-keystroke . text-markup))
"Alist of translations between object type and successor name.
Sharing the same successor comes handy when, for example, the
regexp matching one object can also match the other object.")
;modification
(defconst org-element-all-objects
'(bold code entity export-snippet footnote-reference inline-babel-call
inline-src-block italic line-break latex-fragment link macro
radio-target statistics-cookie strike-through subscript superscript
table-cell target timestamp underline verbatim my-object-keystroke)
"Complete list of object types.")
;modification
(defun org-element-text-markup-successor ()
"Search for the next text-markup object.
Return value is a cons cell whose CAR is a symbol among `bold',
`italic', `underline', `strike-through', `code' and `verbatim'
and CDR is beginning position."
(save-excursion
(unless (bolp) (backward-char))
(when (re-search-forward org-emph-re nil t)
(let ((marker (match-string 3)))
(cons (cond
((equal marker "*") 'bold)
((equal marker "/") 'italic)
((equal marker "_") 'underline)
((equal marker "+") 'strike-through)
((equal marker "~") 'code)
((equal marker "=") 'verbatim)
((equal marker "‰") 'my-object-keystroke)
(t (error "Unknown marker at %d" (match-beginning 3))))
(match-beginning 2))))))
ถัดไปฉันได้กำหนดmy-html
แบ็กเอนด์สำหรับการส่งออก:
(org-export-define-derived-backend 'my-html 'html
:translate-alist '((my-object-keystroke . org-html-keystroke))
:menu-entry ' (?h 1
((?r "my-html" org-html-export-to-my-html))))
(defun org-html-export-to-my-html
(&optional async subtreep visible-only body-only ext-plist)
"Export current buffer to a HTML file.
Return output file's name."
(interactive)
(let* ((extension (concat "." org-html-extension))
(file (org-export-output-file-name extension subtreep))
(org-export-coding-system org-html-coding-system))
(org-export-to-file 'my-html file
async subtreep visible-only body-only ext-plist)))
(defun org-html-publish-to-my-html (plist filename pub-dir)
"Publish an org file to my-html.
Return output file name."
(org-publish-org-to 'my-html filename
(concat "." (or (plist-get plist :html-extension)
org-html-extension "html"))
plist pub-dir))
(defun org-html-convert-region-to-my-html ()
"Assume the current region has org-mode syntax, and convert it to HTML.
This can be used in any buffer. For example, you can write an
itemized list in org-mode syntax in an HTML buffer and use this
command to convert it."
(interactive)
(org-export-replace-region-by 'my-html))
ดังนั้นเมื่อฉันใช้C-c C-e h r
มันส่งออกอย่างถูกต้อง:
ตามคำแนะนำของ OP ในความคิดเห็นคุณอาจต้องใช้org-mode-restart
(หรือorg-reload
) หรือฆ่า / โหลดบัฟเฟอร์ของคุณใหม่
แก้ไข: ใช้งานได้กับโหมดองค์กรที่มีเวอร์ชันก่อน 8.3 (นั่นคือจนถึง 8.2.10)
ด้วยเวอร์ชั่น≥8.3.1ฉันต้องแก้ไข
- org องค์ประกอบทั้งหมดวัตถุ
- อาจเป็นข้อ จำกัด ขององค์ประกอบองค์ประกอบวัตถุ
- org องค์ประกอบ - ชุด regexps
- org องค์ประกอบ - วัตถุแนนเชี่ยล
และแน่นอนยังคงเพิ่มฟังก์ชั่น
- org องค์ประกอบของฉัน-วัตถุการกดแป้นพิมพ์-parser
- org องค์ประกอบของฉัน-วัตถุการกดแป้นพิมพ์ล่าม
แต่
- org-องค์ประกอบวัตถุสืบทอด alist
- org-องค์ประกอบข้อความมาร์กอัป-ทายาท
ถูกลบแล้ว
ขอบคุณCharles C. Berryสำหรับความช่วยเหลือของเขา