¿Cómo utilizar mi propia plantilla HTML con make4ht?

¿Cómo utilizar mi propia plantilla HTML con make4ht?

Aquí está mi archivo LaTeX foo.tex:

\documentclass{article}
\usepackage{amsmath}
\title{Demo}
\begin{document}

\begin{align}
1 + 0 & = 1, \label{eq1} \\
1 + 1 & = 2, \label{eq2} \\
e^{i \pi} = -1. \label{eq3}
\end{align}

Equations \( \eqref{eq1} \), \( \eqref{eq2} \) and \( \eqref{eq3} \)
describe eternal truths.

The equation \( e^{i \pi} = -1 \) can also be rewritten as \( e^{i \pi}
+ 1 = 0 \) which is known as Euler's identity.
\end{document}

Lo convierto a HTML así:

$ make4ht foo mathjax
[STATUS]  make4ht: Conversion started
[STATUS]  make4ht: Input file: foo
[STATUS]  make4ht: Conversion finished

Aquí está el resultado foo.html:

<!DOCTYPE html> 
<html lang='en-US' xml:lang='en-US'> 
<head><title></title> 
<meta charset='utf-8' /> 
<meta name='generator' content='TeX4ht (https://tug.org/tex4ht/)' /> 
<meta name='viewport' content='width=device-width,initial-scale=1' /> 
<link href='foo.css' type='text/css' rel='stylesheet' /> 
<meta name='src' content='foo.tex' /> 
<script>window.MathJax = { tex: { tags: "ams", inlineMath: [ ["\\\(","\\\)"] ], displayMath: [ ['$$','$$'], ["\\[","\\]"] ], processEscapes: true, processEnvironments: true, packages: ['base', 'color', 'ams'] }, loader: { load: ['[tex]/color', '[tex]/ams'] } }; </script> 
 <script id='MathJax-script' async='async' type='text/javascript' src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js'></script>  
</head><body>
<!-- l. 10 --><p class='noindent'>\begin{align} 1 + 0 &amp; = 1, \label{eq1} \\ 1 + 1 &amp; = 2, \label{eq2} \\ e^{i \pi } = -1. \label{eq3} \end{align}
</p><!-- l. 12 --><p class='noindent'>Equations \( \eqref{eq1} \), \( \eqref{eq2} \) and \( \eqref{eq3} \) describe eternal truths.
</p><!-- l. 15 --><p class='indent'>   The equation \( e^{i \pi } = -1 \) can also be rewritten as \( e^{i \pi } + 1 = 0 \) which is known as Euler’s identity.
</p> 
</body> 
</html>

Hasta ahora, todo bien. Sin embargo, lo que quiero hacer es usar mi propia plantilla HTML que decide el encabezado y el pie de página. Quiero que solo el contenido principal sea generado por make4ht.

Aquí está mi plantilla template.html.

<!DOCTYPE html>
<html>
<head>
  <title>Test</title> 
  <meta charset='utf-8' /> 
  <meta name='viewport' content='width=device-width,initial-scale=1' /> 
  <style>
    body {background: gray}
    main {background: white; max-width: 40em; margin: 0 auto; padding: 1em}
  </style>
  <script>window.MathJax = {tex: {tags: "ams"}}</script> 
  <script src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js'></script>  
</head>
<body>
<main>

<!-- HTML converted by make4ht goes here -->

</main>
</body>
</html>

¿Hay alguna manera de solicitar make4htel uso de esta plantilla en lugar de usar su propia plantilla para generar el HTML de salida?

Respuesta1

La forma más sencilla es utilizar enlaces configurables que TeX4ht proporciona para la configuración HTML básica. Aquí está la información básica que se incluye en el .logarchivo cuando usa la infoopción para make4ht:

\Configure{DOCTYPE}.........1
\Configure{HTML}............2
\Configure{HEAD}............2
\Configure{@HEAD}...........1
\Configure{BODY}............2
\Configure{TITLE+}..........1
\Configure{TITLE}...........2
\Configure{@TITLE}..........1
\Configure{Preamble}........2

    <DOCTYPE>
    <HTML 1>
      <HEAD 1>
         <TITLE 1>
            <@TITLE>
            <TITLE+>
         <TITLE 2>
         <@HEAD>
      <HEAD 2>
      <BODY 1>
      ......
      <BODY 2>
    <HTML 2>

The \Configure{@HEAD}{...} command is additive, concatenating the
content of all of its appearances.  An empty parameter requests
the cancellation of the earlier contributions.

For instance,

  \Configure{@HEAD}{A}
  \Configure{@HEAD}{}
  \Configure{@HEAD}{B}
  \Configure{@HEAD}{C}

contributes `BC'.

The \Configure{TITLE+} provides the content for the title,
\Configure{TITLE} sets the envelop, and \Configure{@TITLE} acts as a
hook for introducing localized configurations. As is the case for
\Configure{@HEAD}, the contribution of \Configure{@TITLE} is also
additive.

These configurations should be introduced early enough in the
compilation. For instance, in the case of LaTeX, between \Preamble
and \begin{document} of a local configuration file.

           \Preamble
             %%% here %%%
           \begin{document}
             ...
           \EndPreamble


\Configure{@BODY}...........1
\Configure{@/BODY}..........1

   Variants of \Configure{@HEAD} which contribute their content,
   respectively, after <body> and before </body>.

Por lo tanto, necesitará utilizar \Configure{HTML}para eliminar atributos del <html>elemento, \Configure{TITLE+}establecer su propio título, \Configure{@HEAD}insertar la mayoría de las cosas en el <head>elemento e \Configure{@BODY}insertar \Configure{@/BODY}el <main>elemento.

Aquí hay un .cfgarchivo completo que muestra cómo se puede hacer:

\Preamble{xhtml}
\Configure{@HEAD}{} % remove default content in HTML header
\Configure{@HEAD}{%
\HCode{<meta charset='utf-8' /> \Hnewline
  <meta name='viewport' content='width=device-width,initial-scale=1' /> \Hnewline
  <style>\Hnewline
    body {background: gray}\Hnewline
    main {background: white; max-width: 40em; margin: 0 auto; padding: 1em}\Hnewline
  </style>\Hnewline
  <script>window.MathJax = {tex: {tags: "ams"}}</script> \Hnewline
  <script src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js'></script>  \Hnewline
}}
\Configure{TITLE+}{test}
\Configure{HTML}{\HCode{<html>\Hnewline}}{\HCode{\Hnewline</html>}}
\Configure{@BODY}{\ifvmode\IgnorePar\fi\EndP\HCode{<main>\Hnewline}}
\Configure{@/BODY}{\ifvmode\IgnorePar\fi\EndP\HCode{\Hnewline</main>}}
\begin{document}
\EndPreamble

El primer uso de \Configure{@HEAD}{}simplemente elimina las cosas habituales que TeX4ht inserta en el encabezado. Insertamos todas sus etiquetas en la segunda invocación de esa configuración. Tenga en cuenta el uso de la \Hnewlinemacro, se utiliza para insertar un salto de línea en el archivo HTML generado.

Debido a que \Configure{@BODY}y \Configure{@/BODY}se utilizan cuando el texto del documento ya está tipográfico, debemos ocuparnos de los párrafos. \ifvmode\IgnorePar\fi\EndPse utiliza para evitar que las etiquetas no coincidan.

Aquí está el HTML resultante.

<!DOCTYPE html> 
<html> 
<head> <title>test</title> 
<meta charset='utf-8' />  
<meta content='width=device-width,initial-scale=1' name='viewport' />  
<style> 
body {background: gray} 
main {background: white; max-width: 40em; margin: 0 auto; padding: 1em} 
</style> 
<script>window.MathJax = {tex: {tags: "ams"}}</script>  
<script src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js'></script>  
</head><body>
   <main> 

<!-- l. 11 --><p class='indent'>   \begin{align} 1 + 0 &amp; = 1, \label{eq1} \\ 1 + 1 &amp; = 2, \label{eq2} \\ e^{i \pi } = -1. \label{eq3} \end{align}
</p><!-- l. 13 --><p class='indent'>   Equations \( \eqref{eq1} \), \( \eqref{eq2} \) and \( \eqref{eq3} \) describe eternal truths.
</p><!-- l. 16 --><p class='indent'>   The equation \( e^{i \pi } = -1 \) can also be rewritten as \( e^{i \pi } + 1 = 0 \) which is known as Euler’s identity.
</p> 
</main> 
</body> 
</html>

Y así es como se ve:

ingrese la descripción de la imagen aquí

información relacionada