O destaque da sintaxe e o recuo do bloco do código-fonte no arquivo html exportado para o modo organizacional

9

Quando insiro o bloco de código C dentro de um arquivo de modo organizacional, o destaque da sintaxe e o recuo do código-fonte são personalizados conforme desejado.

  1. Quando eu o exporto para um arquivo html, o destaque da sintaxe no arquivo html é exatamente o mesmo que no Emacs. Mas o destaque da sintaxe funciona melhor com o tema de cores do meu Emacs. Por exemplo, o {símbolo é branco no meu bloco de código C, mas meu tema de cores é escuro, se eu o exportar para html, o plano de fundo do arquivo html também é branco, ou seja, você não pode ver {no bloco de código-fonte de html exportado até pensei que está lá.

  2. O recuo do código fonte é normal no meu Emacs (como eu o customizei), mas o recuo do código fonte no arquivo html exportado será diferente, pois ele adiciona mais espaços para recuo.

  3. Se eu exportar o mesmo arquivo organizacional emacs -q, eles serão normais no arquivo html exportado, mas o destaque da sintaxe e o recuo do código-fonte serão a defaultconfiguração do Emacs. Portanto, isso significa que as configurações das faces das fontes init.elserão afetadas org-export.

Portanto, minha pergunta é: quando exporto um arquivo de modo organizacional que contém bloco de código-fonte para um arquivo html (ou talvez outros formatos como PDF), é possível livrar-me de toda a minha própria configuração de faces de fonte sobre o arquivo código-fonte e fazê-lo como em emacs -q?

Atualização :

O segundo problema é resolvido definindo- (setq org-src-preserve-indentation t)se no arquivo init ou executando-o através de M-:( eval-expression).

Update2 :

O primeiro problema é resolvido por Defina o plano de fundo dos blocos <code> exportados pela organização de acordo com o tema .

O terceiro problema não é importante se o primeiro e o segundo problemas forem resolvidos.

CodyChan
fonte

Respostas:

10

A solução para isso abrange a personalização de elisp, org-mode e css.

elisp

Por padrão, as informações de fonte são incorporadas no arquivo html exportado. Precisamos desativar isso e informar ao modo organizacional que estamos planejando especificar as informações de formatação da fonte usando um arquivo css externo.

Eu escolhi prefixar os nomes de classe html com org-string.

;; (setq org-html-htmlize-output-type 'inline-css) ;; default
(setq org-html-htmlize-output-type 'css)
;; (setq org-html-htmlize-font-prefix "") ;; default
(setq org-html-htmlize-font-prefix "org-")

modo organizacional

No arquivo organizacional, você especifica qual arquivo css usar. Este arquivo conterá informações sobre como você deseja formatar cada org-classe.

# My custom fontification theme
#+HTML_HEAD: <link href="path/to/your/custom/theme.css" rel="stylesheet">

css

Aqui está o meu arquivo css de tema personalizado, no qual copiei os códigos de cores do leuven-theme. Você pode encontrar a versão mais recente do css abaixo no meu git .

/* Set the colors in <pre> blocks from the Leuven theme */
pre                                      {background-color:#FFFFFF;}
pre span.org-builtin                     {color:#006FE0;font-weight:bold;}
pre span.org-string                      {color:#008000;}
pre span.org-keyword                     {color:#0000FF;}
pre span.org-variable-name               {color:#BA36A5;}
pre span.org-function-name               {color:#006699;}
pre span.org-type                        {color:#6434A3;}
pre span.org-preprocessor                {color:#808080;font-weight:bold;}
pre span.org-constant                    {color:#D0372D;}
pre span.org-comment-delimiter           {color:#8D8D84;}
pre span.org-comment                     {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-1            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-2            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-3            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-4            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-5            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-6            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-7            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-8            {color:#8D8D84;font-style:italic}
pre span.org-outshine-level-9            {color:#8D8D84;font-style:italic}
pre span.org-rainbow-delimiters-depth-1  {color:#707183;}
pre span.org-rainbow-delimiters-depth-2  {color:#7388d6;}
pre span.org-rainbow-delimiters-depth-3  {color:#909183;}
pre span.org-rainbow-delimiters-depth-4  {color:#709870;}
pre span.org-rainbow-delimiters-depth-5  {color:#907373;}
pre span.org-rainbow-delimiters-depth-6  {color:#6276ba;}
pre span.org-rainbow-delimiters-depth-7  {color:#858580;}
pre span.org-rainbow-delimiters-depth-8  {color:#80a880;}
pre span.org-rainbow-delimiters-depth-9  {color:#887070;}
pre span.org-sh-quoted-exec              {color:#FF1493;}
Kaushal Modi
fonte
Posso apenas usar o emacs -qestilo padrão em vez do custom/theme.css?
CodyChan
O estilo padrão é usar o tema atual do emacs. Você pode copiar manualmente as cores que o tema padrão tem para o seuemacs_default_theme.css
Kaushal Modi
11
Eu não tentei isso, mas você provavelmente pode redefinir para org-html-fontify-codeque ele defina o tema padrão antes da fonte e depois restaure o tema anterior.
Kaushal Modi
Seria realmente útil se o modo org aceitasse um no-theme-inheritargumento para # + BEGIN_SRC, por exemplo, #+BEGIN_SRC haskell no-theme-inherit .. #+END_SRCque apenas usasse as informações de fonte padrão do emacs para o código, neste caso Haskell.
Rob Stewart
Quero salientar que o css acima não tem entrada para o texto de código regular e apenas aparece em preto. Seria bom encontrar essa entrada. Sou capaz de personalizar todas as entradas, por exemplo, pre span.org-function-name {color: rgb (255,000,255);} mas não consigo alterar a cor preta da maior parte do código. O que span.org - ??? seria isso?
Steve
2

Encontrei uma solução / solução simples para o problema de cores. Antes de exportar, digite M-x customize-themese ative o leuventema. É um tema com fundo claro que parece adequado para imprimir código em papel branco. Após a exportação, desative o tema novamente e você voltará com suas cores originais.

De alguma forma, presumi que eu teria que criar uma maneira complicada de alternar a configuração para exportar, então estou aliviado por ser simples assim!

Se você está fazendo isso com frequência, pode valer a pena aconselhar a função de exportação HTML para fazer isso automaticamente:

(defvar my-org-html-export-theme 'tsdh-light)

(defun my-with-theme (orig-fun &rest args)
  (load-theme my-org-html-export-theme)
  (unwind-protect
      (apply orig-fun args)
    (disable-theme my-org-html-export-theme)))

(with-eval-after-load "ox-html"
  (advice-add 'org-export-to-buffer :around 'my-with-theme))
legoscia
fonte
Sim, isso funciona. Mas se você trabalha com muitos arquivos que exporta frequentemente para HTML, será muito chato alternar entre os temas.
Christian Herenz
11
Sim, acabei aconselhando a função de exportação: github.com/legoscia/dotemacs/blob/master/…
legoscia
OK - também uma solução. Mas, por que não seguir a rota acima e usar um CSS personalizado com base em algum tema leve?
Christian Herenz
@legoscia Parece que isso não funciona para mim.
Stardiviner