Como posso escapar do * no modo organizacional para evitar fonte em negrito


12

Se eu escrever algo como *shrug*no modo organizacional, ele será automaticamente tipificado como texto em negrito . Como posso evitar isso, ou seja, na verdade, *shrug*aparecer literalmente quando exportado?

Editar:

Ainda quero usar a fonte em negrito (sem precisar alterar a sintaxe em estrela padrão do texto em negrito) e não deve importar para o formato de arquivo que meu arquivo organizacional é exportado, por exemplo, deve funcionar tanto para o Markdown quanto para o HTML exportação.

Isso é algo importante , é por isso que está escrito em negrito. Mas, para outra coisa, não tenho a idéia * encolher os ombros *.


1
Se você estiver exportando isso para o LaTeX posteriormente, poderá tentar , \ast{}shrug\ast{}ou \star{}shrug\star{}similar, com HTML, poderá usar a codificação de entidade: &#2a;ou se adicionar uma opção antes ou depois do asterisco, isso também funcionaria.
Wvxvw 17/09/2015

Parece que a resposta de suvayu de apenas envolvê-lo em marcadores textuais é o que você deseja. Como alternativa, você pode modificar a lista de ênfase organizacional para que outro caractere seja usado no texto em negrito.
User2699

Não exatamente. = * shrug * = resulta no HTML exportado para ser envolvido em uma code-tag e no markdown tem backticks. Quero que não seja formatado de forma alguma.
timor

Pergunta editada para refletir que mudar a ênfase organizacional não é realmente uma opção. Não quero mudar tudo que estiver em negrito que já existe no meu arquivo .org.
timor

2
O \ast{}shrug\ast{}mencionado por wvxvw é provavelmente a sua melhor opção. exporta para html como ∗shrug∗e para látex $\ast$shrug$\ast$usando as entidades de caracteres apropriadas. org-toggle-pretty-entitiesos exibe como caracteres UTF8 no buffer organizacional.
mutbuerger

Respostas:


9

Esta resposta é inspirada após sugestões coletivas na lista GNU do emacs-org-mode para usar os caracteres de espaço de larguraorg-entity ( C-h i g (org) Special symbols) em \ast{}vez de largura zero (o que eu sugeri na minha outra resposta aqui ).

Abaixo está uma solução genérica em que o usuário não precisa se lembrar das entidades orgânicas para vários símbolos. Ele insere a entidade organizacional (se disponível) quando o usuário o faz C-u SYMBOL; trabalha para C-u *, C-u /, C-u =, etc.

(defun modi/org-entity-get-name (char)
  "Return the entity name for CHAR. For example, return \"ast\" for *."
  (let ((ll (append org-entities-user
                    org-entities))
        e name utf8)
    (catch 'break
      (while ll
        (setq e (pop ll))
        (when (not (stringp e))
          (setq utf8 (nth 6 e))
          (when (string= char utf8)
            (setq name (car e))
            (throw 'break name)))))))

(defun modi/org-insert-org-entity-maybe (&rest args)
  "When the universal prefix C-u is used before entering any character,
    insert the character's `org-entity' name if available.

    If C-u prefix is not used and if `org-entity' name is not available, the
    returned value `entity-name' will be nil."
  ;; It would be fine to use just (this-command-keys) instead of
  ;; (substring (this-command-keys) -1) below in emacs 25+.
  ;; But if the user pressed "C-u *", then
  ;;  - in emacs 24.5, (this-command-keys) would return "^U*", and
  ;;  - in emacs 25.x, (this-command-keys) would return "*".
  ;; But in both versions, (substring (this-command-keys) -1) will return
  ;; "*", which is what we want.
  ;; http://thread.gmane.org/gmane.emacs.orgmode/106974/focus=106996
  (let ((pressed-key (substring (this-command-keys) -1))
        entity-name)
    (when (and (listp args) (eq 4 (car args)))
      (setq entity-name (modi/org-entity-get-name pressed-key))
      (when entity-name
        (setq entity-name (concat "\\" entity-name "{}"))
        (insert entity-name)
        (message (concat "Inserted `org-entity' "
                         (propertize entity-name
                                     'face 'font-lock-function-name-face)
                         " for the symbol "
                         (propertize pressed-key
                                     'face 'font-lock-function-name-face)
                         "."))))
    entity-name))

;; Run `org-self-insert-command' only if `modi/org-insert-org-entity-maybe'
;; returns nil.
(advice-add 'org-self-insert-command :before-until #'modi/org-insert-org-entity-maybe)

Portanto, quando o usuário digita C-u *, \ast{}é inserido e a mensagem abaixo é exibida na área de eco,

'Org-entity' \ ast {} inserida para o símbolo *.

Se org-pretty-entitiesestiver definido como tacima, o inserido \ast{}será exibido como *.

Se org-entitynão existe um caractere X e se o usuário faz C-u X , X é simplesmente inserido 4 vezes (como C-unormalmente faria).


1
Isso parece realmente conveniente. O único drwaback (na minha opinião) que permanece, é que o arquivo .org, que não contém nenhuma construção do LaTeX até agora, agora possui bits de sintaxe que não são do modo org (LaTeX) espalhados por todo o arquivo. A propósito, existe uma razão para que não exista uma construção semelhante \*thisisnotbold\*?
timor

1
Essa também é uma sintaxe organizacional. Confira a org-entitiesdocumentação.
Kaushal Modi

8

Usando o caractere unicode ZERO WIDTH SPACE

Você pode falhar na análise de ênfase em negrito adicionando um caractere de espaço de largura zero (indicado por [ZWS] nos trechos abaixo) antes do primeiro asterisco ou após o segundo asterisco.

Ambos os trechos abaixo exportados para HTML nos meus testes:

  • [ZWS] antes do primeiro asterisco

    This is some *bold* test and this is ​[ZWS]*not bold*.
    
  • [ZWS] após o segundo asterisco

    This is some *bold* test and this is *not bold*​[ZWS].
    

Você pode inserir o ZERO WIDTH SPACE (nome do unicode) fazendo C-x 8 RET 200b RET.
Eu uso isso com muita frequência, por isso vinculei issoC-x 8 0 .


Atualizar

De acordo com a discussão na lista de correio do emacs-org-mode , não é recomendável usar caracteres não ASCII para escapar; em vez disso, org-entitiesdeve ser usado, se aplicável. Eu também concordei com isso e criei outra solução que facilita a inserção org-entities( C-u *neste caso).


Tecnicamente, essa é uma maneira bastante rápida de resolver o problema. Ele depende do modo organizacional não interpretar o ZWS como espaço em branco? Além disso, temo que a solução é não-obvius para outras pessoas editando o arquivo org ...
timor

@timor Eu trouxe essa discussão para a emacs-orgmode@gnu.orglista de discussão. Se estiver interessado, você pode seguir / adicionar à discussão aqui .
Kaushal Modi

@timor, não é óbvio, mas de todas as soluções fornecidas aqui é a única que funciona sem modificar a configuração do emacs, por isso é a mais óbvia se você deseja compartilhar seus arquivos.
user2699

@ user2699 FWIW, o uso de entidades orgânicas nos arquivos funcionará imediatamente sem nenhuma configuração do usuário .. é apenas o uso de ascii simples \ast{}nos arquivos. Minha outra solução simplesmente torna a entrada \ast{}mais rápida e fácil de lembrar.
Kaushal Modi

3

Por literalmente, se você realmente quiser usar alguma marcação no LaTeX exportado, poderá usar =*shrug*=. No entanto, se você apenas deseja que ele seja exportado como *shrug*e deseja fazer isso o tempo todo, eu recomendaria filtros . Se, no entanto, você só precisar disso para algumas instâncias de *shrug*, deverá usar a alternativa sugerida por @wvxvw. Você pode fazer isso corretamente usando macros . Alguns exemplos a seguir.

Filtros

(defun my-bold (contents backend info)
  (when (org-export-derived-backend-p backend 'latex)
    (replace-regexp-in-string "\\`\\\\textbf{\\(.+\\)}"
                              "\\\\ast{}\\1\\\\ast{}" contents)))

(add-to-list 'org-export-filter-bold-functions 'my-bold)

Essencialmente, o filtro acima procura a \textbf{..}marcação na string transcodificada e a substitui por \ast{}..\ast{}, sem alterar o que foi colocado dentro {..}. Eu não testei a expressão regular e a sequência de substituição, portanto, pode haver erros, mas você entendeu. Da mesma forma, para cobrir outros back-ends, é possível incluir trechos extras como este:

(when (org-export-derived-backend-p backend 'html)
   (replace-regexp-in-string "<b>\\(.+\\)</b>" "\&#2a;\\1\&#2a;" contents))

A mesma ressalva vale para a expressão regular acima.

Macros

Origem da organização:

#+macro: nobold @@latex:\ast{}$1\ast{}@@ @@html:&#2a;$1&#2a;@@

This text is *bold* this is nobold{{{not}}}

exporta para o LaTeX como:

This text is \textbf{bold} this is \ast{}not\ast{}

e para HTML como:

This text is <b>bold</b> this is  &#2a;not&#2a;

Obviamente, você pode adicionar quantos backend quiser à macro.

Editar: como Kaushal aponta nos comentários, o snippet de exportação para o látex é opcional neste caso. No entanto, prefiro usá-los sempre que houver látex nu, pois acho bastante difícil acompanhar a lista org-entitiese as regras específicas por trás da identificação do látex na origem da organização.

Nota:

  • os exemplos de filtro não foram testados,
  • Eu não conheço nenhum HTML, então pode haver alguns erros nos respectivos bits.

Essa definição de macro não deve ser suficiente #+macro: nobold \ast{}$1\ast{}:? asté um dos membros da org-entitieslista, que especifica o que o látex, html, ascii, etc exportações deve ser parecido: ("ast" "\\ast" t "&lowast;" "*" "*" "*"). A ordem dos elementos nessa lista é "nome, substituição do LaTeX, LaTeX mathp, substituição de HTML, substituição de ASCII, substituição de Latin1, substituição de utf-8".
precisa saber é o seguinte

@kaushalmodi Sim, seria, no entanto, como já sabemos que é o LaTeX, não há mal em colocá-lo dentro de um snippet de látex. Na minha experiência, o uso de trechos é muito mais robusto devido à sua ambiguidade.
Quarky 21/09/2015

-1

Isso é controlado pela variável org-ênfase-alist e pode ser facilmente modificado.

  • Coloque o ponto em negrito, use o comando what-cursor-position C-u C-x =para encontrar a face, observe que ela possui propriedade org-emphasis.
  • Ligue customize-groupe procure por ênfase organizacional
  • O org-enfat-alist deve aparecer, com várias opções para marcar o texto.
  • Exclua a entrada correspondente a *
  • Aplique alterações e reinicie o modo organizacional ou emacs
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.