make4ht - fornece vários arquivos de configuração

make4ht - fornece vários arquivos de configuração

Na postagemComo posso substituir o CSS do tex4ht em um único arquivo .css?a solução proposta requer a adição de um arquivo de configuração (ou seja,amostra.cfg). Então, se eu tiveramostra.texposso adicionaramostra.cfg.

No entanto, no meu caso, estou usando um arquivo de configuração adicional chamadominhaMídia.cfgpara adicionar alguns recursos adicionais ao meu documento.

Isso significa (se acertei) que devo usar --config myMediapara adicionar esse arquivo à compilação.

make4ht --utf8 --shell-escape sample.tex --config myMedia

Agora, acabo comdoisarquivos de configuração:

  • um com todos os comandos necessários paraminha mídia
  • outro arquivo com configuração CSS (aquele com \CssFile[] \EndCssFile)

Então:

  • devo adicionar algo como --config myMedia,sampleou --config "myMedia,sample"? bem, não funciona... carrega apenas o primeiro arquivo de configuração
  • devo mesclarminhaMídia.cfgeamostra.cfgjunto? Parece muito feio, mas realmente funciona

Estou esquecendo de algo? Devo mudar o compilador?

Responder1

Gostaria de acrescentar algumas informações adicionais à resposta de Darios.

Apenas um arquivo de configuração pode ser utilizado pelo tex4ht, mas seu conteúdo pode ser incluído pelo \inputcomando, portanto é possível reutilizar partes da configuração entre diferentes projetos. É possível salvar os arquivos específicos no diretório TEXMF local, para que possam ser acessados ​​de qualquer local do computador.

No seu caso, ao criar um pacote personalizado, você precisa criar um arquivo de configuração para esse pacote, chamado packagename.4ht. Você forneceu o arquivo de configuração do seu pacote myMedia.4htem sua resposta. Eu mudaria um pouco:

\NewConfigure{myMedia}{2}%
\renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia}
%\Configure{myMedia}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}

\Hinput{myMedia}

O \NewConfigure{myMedia}{2}comando cria os chamados ganchos que podem ser inseridos nos comandos redefinidos e configurados usando o \Configurecomando. Faz exatamente a mesma coisa que a \NewConfiguresua resposta, mas é um pouco mais simples.

É melhor manter os \Configurecomandos fora dos arquivos de configuração do pacote. Por que? Ao tex4htprocessar o preâmbulo do documento, ele carrega arquivos de configuração de todos os pacotes utilizados, para redefinir comandos e inserir os ganchos. Depois disso, os arquivos de configuração do formato de saída atual são executados. tex4htpode, portanto, suportar HTML, ODT e mais alguns formatos de saída. Portanto, as configurações para HTML são fornecidas em arquivos html4.4htou html5.4ht, para o formato ODT, ooffice.4htetc. É claro que não é possível inserir suas configurações personalizadas nesses arquivos, pois suas edições serão removidas na próxima tex4htatualização.

Se você tiver certeza de que oferece suporte apenas a HTML, poderá manter o \Configurecomando em myMedia.4ht, mesmo que não seja a solução ideal. Outra possibilidade é colocá-lo no .cfgarquivo e a última é criar um formato de saída personalizado. Mostrarei essa possibilidade apenas para fins educacionais:

Os formatos de saída são definidos no tex4ht.4htarquivo. Esta é a definição de html5formato, por exemplo:

\Configure{html5}{%
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infoht4.4ht}\fi
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infomml.4ht}\fi
   \Hinclude[*]{html4.4ht}%
   \Hinclude[*]{unicode.4ht}%
   \:CheckOption{mathml}\if:Option%
   \else\:CheckOption{mathml-}\fi%
   \if:Option%
      \Hinclude[*]{mathml.4ht}%
      \Hinclude[*]{html-mml.4ht}%
   \else
      \Hinclude[*]{html4-math.4ht}%
   \fi
   \:CheckOption{svg}%
             \if:Option \else\:CheckOption{svg-}\fi
             \if:Option \else\:CheckOption{svg-obj}\fi
             \if:Option \else\:CheckOption{svg-inline}\fi
             \if:Option \Hinclude[*]{svg-option.4ht}%
                        \:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
             \fi
   \Hinclude[*]{html5.4ht}%
}

O \Configurecomando aqui declara um código que é executado quando a marca usada como argumento é usada como opção para tex4ht. html5é adicionado automaticamente make4htpara que este código seja executado por padrão.

O formato de saída personalizado pode ser definido no tex4ht.usrarquivo. É possível colocá-lo na árvore TEXMF local, por exemplo ~/texmf/tex/latex/tex4ht/tex4ht.usrparece funcionar. Seu conteúdo pode ser assim:

\Configure{myhtml5}{%
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infoht4.4ht}\fi
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infomml.4ht}\fi
   \Hinclude[*]{html4.4ht}%
   \Hinclude[*]{unicode.4ht}%
   \:CheckOption{mathml}\if:Option%
   \else\:CheckOption{mathml-}\fi%
   \if:Option%
      \Hinclude[*]{mathml.4ht}%
      \Hinclude[*]{html-mml.4ht}%
   \else
      \Hinclude[*]{html4-math.4ht}%
   \fi
   \:CheckOption{svg}%
             \if:Option \else\:CheckOption{svg-}\fi
             \if:Option \else\:CheckOption{svg-obj}\fi
             \if:Option \else\:CheckOption{svg-inline}\fi
             \if:Option \Hinclude[*]{svg-option.4ht}%
                        \:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
             \fi
   \Hinclude[*]{html5.4ht}%
   \Hinclude[*]{myconfig.4ht}
}

A diferença para a listagem anterior é que a marca recebe um nome myhtml5e é solicitado um novo arquivo, myconfig.4ht. Para solicitar este formato de saída, execute

make4ht filename.tex "myhtml5"

As configurações personalizadas podem então ser adicionadas ao myconfig.4htarquivo, que pode ser salvo no mesmo local que tex4ht.usr:

\exit:ifnot{myMedia} 
\ConfigureHinput{myMedia}

\Configure{myMedia}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}
{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}

\endinput\empty\empty\empty\empty\empty\empty 
\endinput 

Eu usei o modelo para um pacote dea documentação do tex4ht. Em geral, o código de um pacote precisa ser colocado entre \ConfigureHinput{packagename} ... \endinput. Isso garante que ele seja executado somente quando o pacote tiver sido usado no documento. Caso contrário, você receberia avisos sobre configurações ausentes e código HTML provavelmente indesejado em seu documento. Os pacotes utilizados são registrados para processamento através do \Hinputcomando no .4htarquivo do pacote.

A configuração de myMediafoi um pouco modificada, para poder manusear corretamente os parágrafos. A configuração original produziu código HTML inválido devido a este problema. Você pode copiar o \Configurecomando para o .cfgarquivo ou para o myMedia.4htse decidir usar soluções mais simples. Esta é a única correção realmente necessária da minha resposta.

A última informação que quero fornecer em minha resposta é que é possível usar um comando mais simples para inclusão de um arquivo CSS externo:

\Preamble{xhtml}
\begin{document}
\Configure{AddCss}{samplestyle.css}
\EndPreamble

Não incluirá o código samplestyle.cssdo arquivo CSS principal, apenas incluirá um link para o cabeçalho HTML. Acho que é uma forma preferível na maioria dos casos.

Este é o resultado do comando

make4ht -um draft -c sample.cfg sample.tex "myhtml5"
 <hr class="figure" /><div class="figure" 
>                                                                                                                           
<a id="x1-21"></a>                                                     
<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="test.mp4" type="video/mp4"></video></div>
<br /> <div class="caption" 
><span class="id">Figure 1: </span><span  
class="content">test</span></div><!--tex4ht:label?: x1-21 -->                                                   
   </div><hr class="endfigure" />

Responder2

Ok, apenas segui o que o @gusbrs sugeriu no comentário abaixo (muito obrigado!) e ele acertou: existenão há necessidadede qualquerminhaMídia.cfg. O que estava lá, poderia simplesmente ser movido paraminhaMedia.4ht.

Esta solução permite separar completamente o arquivo de configuração global (amostra.cfg) de arquivos de outros pacotes (comominhaMedia.4ht).

O actualtrabalhandoconfiguração é a seguinte:

  • amostra.texcontém o \usepackage{myMedia}comando no preâmbulo do documento;

    \documentclass{article}
    \usepackage{graphicx}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc} % may use latin1 instead of utf8
    \usepackage[hidelinks]{hyperref}
    \usepackage{myMedia}
    
    \begin{document}
    
    \begin{figure}
       \centering
       \myMedia{test.mp4}
       \caption{test}
    \end{figure}
    
    \end{document}
    
  • amostra.cfgque funciona como um arquivo de configuração real;
    \Preamble{xhtml}
    \begin{document}
    \CssFile[samplestyle.css]
    \EndCssFile
    \EndPreamble
    
  • minhaMedia.4ht
    \NewConfigure{myMedia}[2]%
    {
        \def\a:myMedia{#1}%
        \def\b:myMedia{#2}%
    }
    \renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia}
    \Configure{myMedia}{\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src=}\NoFonts}{\HCode{ type="video/mp4"></video></div>}\EndNoFonts}
    
  • minhaMedia.sty
    \ProvidesPackage{myMedia}
    \newcommand\myMedia[1]{#1}
    \endinput
    
  • estilo de amostra.csscontém o estilo CSS do documento;
    /* css.sty */
    body {
        text-align: justify;
    }
    

A linha de comando é

make4ht --utf8 --shell-escape sample.tex --config sample

Para quem precisa de um MWE, aqui está:minha amostra

informação relacionada