make4ht: proporciona múltiples archivos de configuración

make4ht: proporciona múltiples archivos de configuración

en la publicación¿Cómo puedo anular el CSS de tex4ht en un único archivo .css?la solución propuesta requiere agregar un archivo de configuración (es decir,muestra.cfg). Entonces, si tengomuestra.texpuedo agregarmuestra.cfg.

Sin embargo, en mi caso, estoy usando un archivo de configuración adicional llamadomisMedia.cfgpara agregar algunas características adicionales a mi documento.

Esto significa (si lo hice bien) que debería usar --config myMediapara agregar este archivo a la compilación.

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

Ahora termino condosArchivos de configuración:

  • uno con todos los comandos necesarios paramis medios
  • otro archivo con configuración CSS (el que tiene \CssFile[] \EndCssFile)

Entonces:

  • ¿Debería agregar algo como --config myMedia,sampleo --config "myMedia,sample"? bueno, no funciona... carga solo el primer archivo de configuración
  • ¿Debería fusionarme?misMedia.cfgymuestra.cfg¿juntos? Parece muy feo, pero realmente funciona.

¿Me estoy perdiendo de algo? ¿Debo cambiar el compilador?

Respuesta1

Me gustaría agregar información adicional a la respuesta de Darios.

Solo se puede utilizar un archivo de configuración tex4ht, pero su contenido se puede incluir mediante el \inputcomando, por lo que es posible reutilizar partes de la configuración entre diferentes proyectos. Es posible guardar los archivos particulares en el directorio TEXMF local, para que sean accesibles desde cualquier ubicación de una computadora.

En su caso, al crear un paquete personalizado, necesita crear un archivo de configuración para ese paquete, llamado packagename.4ht. Proporcionó el archivo de configuración para su paquete myMedia.4hten su respuesta. Yo lo cambiaría un poco:

\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}

El \NewConfigure{myMedia}{2}comando crea los llamados ganchos que se pueden insertar en los comandos redefinidos y configurar usando el \Configurecomando. Hace exactamente lo mismo que \NewConfiguretu respuesta, pero es un poco más simple.

Es mejor mantener los \Configurecomandos fuera de los archivos de configuración del paquete. ¿Por qué? Cuando tex4htprocesa el preámbulo del documento, carga archivos de configuración para todos los paquetes utilizados, con el fin de redefinir comandos e insertar los ganchos. Después de eso, se ejecutan los archivos de configuración para el formato de salida actual. tex4htPor lo tanto, puede admitir HTML, ODT y algunos formatos de salida más. Por lo tanto, las configuraciones para HTML se proporcionan en archivos html4.4hto html5.4ht, para el formato ODT, ooffice.4htetc. Por supuesto, no le es posible insertar sus configuraciones personalizadas en estos archivos, ya que sus ediciones se eliminarán en la próxima tex4htactualización.

Si está seguro de que solo admite HTML, puede mantener el \Configurecomando en myMedia.4ht, incluso si no es la solución óptima. Otra posibilidad es ponerlo en el .cfgarchivo y la última es crear un formato de salida personalizado. Mostraré esta posibilidad sólo con fines educativos:

Los formatos de salida se definen en el tex4ht.4htarchivo. Esta es la definición de html5formato, por ejemplo:

\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}%
}

El \Configurecomando aquí declara un código que se ejecuta cuando la marca utilizada como argumento se usa como una opción para tex4ht. html5se agrega automáticamente por make4htlo que este código se ejecuta de forma predeterminada.

El formato de salida personalizado se puede definir en el tex4ht.usrarchivo. Es posible colocarlo en el árbol TEXMF local, por ejemplo ~/texmf/tex/latex/tex4ht/tex4ht.usrparece funcionar. Su contenido puede verse así:

\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}
}

La diferencia con el listado anterior es que se nombra la marca myhtml5y se solicita un nuevo archivo, myconfig.4ht. Para solicitar este formato de salida, ejecute

make4ht filename.tex "myhtml5"

Luego, las configuraciones personalizadas se pueden agregar al myconfig.4htarchivo, que se puede guardar en la misma ubicación 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 

He usado la plantilla para un paquete dela documentación tex4ht. En general, el código de un paquete debe estar incluido en \ConfigureHinput{packagename} ... \endinput. Esto garantiza que se ejecute solo cuando el paquete se haya utilizado en el documento. De lo contrario, recibirá advertencias sobre configuraciones faltantes y probablemente código HTML no deseado en su documento. Los paquetes usados ​​se registran para el procesamiento mediante el \Hinputcomando en el .4htarchivo del paquete.

La configuración de myMediaha sido modificada un poco, para poder manejar correctamente los párrafos. La configuración original produjo un código HTML no válido debido a este problema. Puede copiar el \Configurecomando al .cfgarchivo o al archivo myMedia.4htsi decide utilizar una solución más simple. Esta es la única solución realmente necesaria de mi respuesta.

La última información que quiero proporcionar en mi respuesta es que es posible utilizar un comando más simple para incluir un archivo CSS externo:

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

No incluirá el código del samplestyle.cssarchivo CSS principal, solo incluirá un enlace al encabezado HTML. Creo que es una forma preferible en la mayoría de los casos.

Este es el resultado del 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" />

Respuesta2

Ok, simplemente seguí lo que @gusbrs sugirió en el comentario a continuación (¡muchas gracias!) y tenía razón: hayNo hay necesidadde cualquiermisMedia.cfg. Lo que había allí, simplemente podría trasladarse amisMedia.4ht.

Esta solución permite separar completamente el archivo de configuración global (muestra.cfg) de archivos de otros paquetes (comomisMedia.4ht).

La corrientelaboralla configuración es la siguiente:

  • muestra.texcontiene el \usepackage{myMedia}comando en el preámbulo del 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}
    
  • muestra.cfgque actúa como un archivo de configuración real;
    \Preamble{xhtml}
    \begin{document}
    \CssFile[samplestyle.css]
    \EndCssFile
    \EndPreamble
    
  • misMedia.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}
    
  • myMedia.sty
    \ProvidesPackage{myMedia}
    \newcommand\myMedia[1]{#1}
    \endinput
    
  • estilo de muestra.csscontiene el estilo CSS del documento;
    /* css.sty */
    body {
        text-align: justify;
    }
    

La línea de comando es

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

Para aquellos que puedan necesitar un MWE, aquí está:mi muestra

información relacionada