Org-modeで引用符付きの逐語的インラインコード


37

組織モードでは、テキストをインラインで囲む=~、テキストをインライン逐語モードまたはコードモードで配置できます。

ただし、テキストに引用符が含まれていると失敗し、ドキュメントで説明や回避策を見つけることができませんでした。

例えば:

  • =hello= 逐語的な表現
  • ~hello~ コードとしてレンダリング
  • =hello'= 逐語的な表現に失敗する
  • ~hello'~ コードとしてレンダリングできません

私がこれまで見つけた唯一の解決策C-x 8 <RET> 200b <RET>は、この質問で説明されているように、入力などの不可視文字を挿入することです。

これはなぜですか(バグですか?)、見えない文字を挿入せずにこの問題を回避するにはどうすればよいですか?

回答:


47

まず第一に:これはEmacsです。それはバグではなく、設定です!

第二に、@ glucasは、必要なorg-emphasis-regexp-componentsものを取得するために変更する必要があるという点で正しいです。ただし、彼(@Malabarba)のコードに2つの変更を提案し、もう少しコンテキストを提供したいと思います。

  1. org-emphasis-regexp-components単一のコンポーネントを変更するためにinitファイルに値全体をコピーする必要はありません。ユースケースでは、次のもので十分です。

    (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\r\n,\"")
  2. 経由で読み込む前変更する必要はありません。変更後、次の行を追加するだけです。org-emphasis-regexp-componentsorg-mode(require 'org)

    (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)

より多くのコンテキスト

で強調マークアップが機能する方法の他の側面をカスタマイズする場合はorg-mode、次のことを知ってください。

の値org-emphasis-regexp-componentsは、5つのエントリを持つリストです。

  1. 最初のエントリは、マークアップ文字の直前に許可される文字を制御します。why=hello=正しくレンダリングするようなものにしたい場合は、このエントリを変更する必要があります。

    (setcar org-emphasis-regexp-components "...")
  2. 2番目のエントリは、マークアップ文字の直後に許可される文字を制御します。=hello=there正しくレンダリングするようなものにしたい場合は、このエントリを変更する必要があります。

    (setcar (nthcdr 1 org-emphasis-regexp-components) "...")
  3. 3番目のエントリは、境界文字として許可されない文字、つまり、開始マークアップ文字の直後または終了マークアップ文字の前の文字を指定します。これを変更して、='hello'=レンダリングなどを正しく行う必要があります。

    (setcar (nthcdr 2 org-emphasis-regexp-components) "...")
  4. 4番目のエントリには、マークアップされた文字列の本文で使用できる文字、つまり境界文字のに表示される文字がリストされます。これを変更する必要はほとんどありません。デフォルトでは、すべての文字が本文の文字として許可されています。

    (setcar (nthcdr 3 org-emphasis-regexp-components) "...")
  5. 5番目のエントリは、マークアップ式内で許可される改行の数を指定します。デフォルトでorg-modeは、単一の改行を許可します。したがって、連続する3行以上にまたがるテキストにマークアップを追加できるようにするには、このエントリを変更する必要があります。

    (setcar (nthcdr 4 org-emphasis-regexp-components) N)

    ... Nは、許可する改行の数です。

関連記事

人々はこの問題にかなり頻繁に遭遇するようです。あなたが言及した投稿とは別に、非常によく似た問題に対処するStackOverflowに関する質問が少なくとも2つあります。


7
私はあなたの答えを支持しましたが、答えの質についても賞賛したいと思います。
カウシャルモディ

ありがとう@itsjeydこれは、Emacsがバッファをすでに開いた状態で完全にロードされた後、これらの2行を対話的に実行すると、うまく機能します。しかし、奇妙なことに、"Symbol's value as variable is void: org-emphasis-regexp-components"これらの2行を.emacsファイルの最後に配置しても、私は遭遇します。なぜそうなるのかについての考えはありますか?
アメリオバスケスレイナ

@ AmelioVazquez-Reinaどういたしまして:)念のために:カスタマイズを行う前に(require 'org)、あなたは.emacsファイルの中にいますorg-emphasis-regexp-componentsか?
itsjeyd

1
@ AmelioVazquez-Reina現在、すべてが正常に機能していることをうれしく思います:)あなたの観察結果は正しいです(require 'org)。それを使用するためにinitファイルに含める必要はありません。そうしないと、Emacsは次の場合に自動的にロードします:(a).org現在のセッションで初めてファイルを開く、または(b)M-x org-mode現在のセッションで初めて経由して手動でモードを有効にする、または(c )少なくとも1つの.orgファイルを含む保存済みデスクトップを復元するとき。(続き)
itsjeyd

1
@ AmelioVazquez-Reina(続き)問題は、initファイルにいくつかのカスタマイズを加えたからといって、Emacs org-mode自動的に読み込まれないことです。そのため(require 'org)、変数をカスタマイズする前に必要があります。モードを完全にロードしないと、Emacsはorg-emphasis-regexp-components; などの変数をどうするかわかりません。Emacsが最初にそれらに出会ったときは定義されていないため、Symbol's value as variable is voidメッセージです。
itsjeyd

11

もっと簡単なオプションがあります:インラインソースブロックを使用します

src_python{hello'}

これは引用符などの文字に対して問題なく機能し、インラインコードの構文の強調表示を提供します。

エクスポート時にインラインソースコードを含めるには、次の宣言をヘッダーに追加します。

#+PROPERTY: header-args :exports code

1
これは素晴らしいヒントです!インラインコードの構文を強調表示できるのは非常に便利です。
ショー

これは素晴らしい!ラテックスを思い出させる(:
Chris.Q

7

org-emphasis-regexp-componentsこのブログ投稿の @Malabarbaで説明されているように、引用文字を削除できます。

その投稿の関連コード:

;; This HAS to come before (require 'org)
(setq org-emphasis-regexp-components
      '("     ('\"{“”"
        "-   .,!?;''“”\")}/\\“”"
        "    \r\n,"
        "."
        1))

のドキュメント文字列を参照してくださいorg-emphasis-regexp-components:デフォルトでは、引用文字が考慮されます:

border- 境界文字として禁止されている文字。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.