Estou usando o modo organizacional para gerar páginas da web de minhas anotações. Posso incorporar código para gerar HTML adicional, etc? O org-babel irá gerar resultados, mas parece mostrar os resultados além do código. Gostaria que o código criasse html que substituísse o próprio código.
org-mode
org-babel
org-export
h4labs
fonte
fonte
:exports results
; consulte Exportando blocos de código . (Deixe-me saber se isso funciona para você e se eu deveria converter isso em uma resposta.)Respostas:
Como mencionei em um comentário, a seção Exportando blocos de código descreve os valores permitidos da
:exports
opção:code
(conteúdo do bloco),results
(resultados de sua avaliação),both
(código e resultados) enone
(nada é exportado).Por padrão, a organização tenta interpretar os resultados da avaliação de um bloco de código-fonte (e transformá-lo em uma tabela, por exemplo). Se essa interpretação falhar, os resultados da avaliação serão formatados como texto monoespaçado e parecerão agrupados
<pre> ... </pre>
quando exportados para HTML.Felizmente, podemos dizer à Org para colocar os resultados da avaliação em um tipo especial de bloco usando
:results
(consulte Resultados da avaliação e:results
). Se você quiser usar um bloco de código-fonte para gerar parte de uma página HTML, use:results value html
or:results output html
e Org agrupará os resultados em um#+BEGIN_HTML ... #+END_HTML
bloco.Aqui está um exemplo mínimo (
#+OPTIONS
são irrelevantes, eu os adicionei para facilitar a inspeção do código HTML exportado usando C-c C-e h H):fonte
Isso irá gerar a página HTML (após a exportação para HTML) com um botão.
Para evitar confusão: o primeiro bloco não será avaliado durante a exportação. Você precisaria avaliá-lo movendo o ponto para ele e pressionando C-c C-c.
Mais ainda, você precisaria ligar
Ou similar antes que esse código seja executado, para que Babel reconheça o
html
bloco como executável.Mas, na verdade, o exemplo tinha como objetivo principal mostrar como você pode prosseguir sobre a adição de seu próprio "idioma", que visa um back-end específico. Você poderia ter feito isso facilmente sem adicionar novos idiomas e, talvez, com menos complicações, fazendo algo assim:
A vantagem da minha primeira abordagem é que, ao editar com C-c ', você fica
html-mode
ativado.fonte
ob-html.el
. Portanto, para exportar um bloco de HTML, seria necessário definir essa função (eu faço isso para outras marcações que uso, principalmente para YAML). Isso é diferente#+begin_html ... #+end_html
, pois eu também posso usá-lo como um mecanismo de modelo primitivo, passando variáveis para os blocos (meu atualorg-babel-execute:html
está mais envolvido que isso).