¿Cómo puedo convertir código LaTeX en HTML mínimo?

¿Cómo puedo convertir código LaTeX en HTML mínimo?

Estoy usando Texmaker de la distribución MikTex.

Lo que me gustaría hacer es

  • crear código de látex
  • ejecute Texmaker para hacer todas las sustituciones, por ejemplo, de\newcommand
  • constrúyalo como código ASCII puro en lugar de como pdf

Pregunta: ¿Cómo hacerlo, cómo configurar Texmaker, siempre que sea posible?

Propuestas a partir de tus comentarios.: En orden cronológico:

  • utilizar o combinar conpdftotext

  • usar tex4ebookconDOM-filters

  • usa el lwarppaquete

  • usarpandoc

  • usarmarkup

Mi evaluación preliminarde estas propuestas:

  1. pdftotextfunciona, por supuesto, y podría ser útil como solución alternativa si tuviera que rehacer el archivo epub 100 % (o en partes) manualmente con Sigil, consulte el flujo a continuación. Excluido lwarpy pandocde markupesta evaluación.

  2. Estoy seguro de que lograré mi objetivo a) ejecutando tex4ebookun archivo de configuración como lo propone michal.h21, b) utilizándolo Scrivenerpara introducir algunas sustituciones de antemano, por ejemplo, para preservar el trabajo realizado en \index{}, c) dejando que Sigilhaga su magia (reformateando , TOC, metadatos, etc.). // Sí, seguirá siendo un proceso semiautomático.

  3. Usando solo 2a), el archivo epub creado parece comportarse bien con el lector de libros electrónicos (software) de Calibre, pero muestra un comportamiento extraño en mi iPad (hardware). No lo he profundizado, pero probablemente la <guide>sección interior content.opfomite alguna información por alguna razón. Algo como eso. // Otra razón más para seguir una estrategia de codificación mínima, es decir, evitar tantas cosas sofisticadas como sea posible en la salida.

  4. Usar make4htel mismo archivo de configuración y procesar ese archivo HTML en Sigilun nuevo epub parece funcionar bien, incluso en mi iPad.

Proceso en mente: De sus comentarios por favor encuentre elproceso basicoTengo en mente a continuación. Por el momento no está claro si podré realizarlo o no, y qué tan fiable será cuando se repita. La parte pdf es confiable, mientras que la creación epub puede conducir acódigo epub frágil(funciona en algunos lectores, pero no en otros). // Enfoque: fuente única, una vez congelada, salida en pdf y epub. // ElejemploEstá simplificado, por supuesto. // epub no puede tener ningún contenido epub válido,para evitar problemasen cualquier lector de libros electrónicos. // "epub mínimo" significa: no incluya cosas sofisticadas en el archivo de salida. // Anejemplopueden ser comentarios HTML, que están permitidos, pero, con mala suerte, irritan a algún lector de libros electrónicos (tarda una eternidad en cargarlo). //Decoraciónwith <p> </p>- tags lo realiza Sigil, si no recuerdo mal. También lo es el particionamiento, la creación de TOC, las hojas de estilo, etc. Es decir, muchas cosas que pdflatexse proporcionarían son algo redundantes.

Fuente única congelada, pdf Y epub (que se ejecuta en cualquier lector de libros electrónicos) derivada de ella.

En pocas palabras, necesito deshacerme de los bytes menos útiles y tener más control para insertar clases, etiquetas div, etc. Créame: esto se puede hacer parcialmente con facilidad usando Scrivener, si es necesario. (Si no conoce este programa, piense en una herramienta para crear, organizar, modificar y recopilar un enorme conjunto de notas de distinta extensión).

El problema es que los programas/herramientas tienden a poner demasiado en un archivo epub... que es un formato realmente débil (puede funcionar rápido y bien en un lector, pero causa problemas en otro).

ingrese la descripción de la imagen aquí

Ejemplo (casi obsoleto ahora): Desafortunadamente, dejé lugar a cierta confusión sobre lo que mi requisito "ASCII" puede significar o no.Con la esperanza de que los lectores ya no activen 'ascii' o 'pdf',y comenzando con este sencillo documento de Latex…

\documentclass[10pt]{book}

\begin{document}

\chapter{Lorem ipsum}

  Dolor sit amet consectetuer eros sit quis mauris pretium. Phasellus penatibus interdum dolor Ut nisl.

  \section{Nam amet}%<<<

  Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum amet.%<<<

  Facilisi Nulla ultrices malesuada orci nibh eget ac Aliquam eros ut. 

  \section{Lorem gravida}

  Oorci sociis Nunc id hendrerit at ac amet Pellentesque. Eleifend risus orci sem Sed ac.

  A nec pellentesque Pellentesque Morbi fringilla accumsan et metus at enim. 

  Eu felis Curabitur quis nibh tellus.

\end{document}

... estaría bien si la parte marcada se convirtiera en ...

  <h3 class='myOne'>1.1 Nam amet</h3>
<p>Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum amet.
</p>

... pero ciertamente no en ...

  <h3 class='sectionHead'><span class='titlemark'>1.1   </span> <a id='x2-20001.1'></a>Nam amet</h3>
<!-- l. 12 --><p class='noindent'>Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum amet.
</p>

Cualquier otra cosa que pueda ver al mostrar un archivo pdf en un editor ASCII no es necesaria aquí.

Fondo 1 (casi obsoleto ahora): Este es un intento alternativo de crear HTML que sea lo más puro, es decir mínimo, posible. Lo probé tex4ebook, que es una gran herramienta, pero desafortunadamente incluye todo tipo de información y estilos adicionales, imitando la apariencia del látex, lo cual no quiero, ni siquiera con la opción ordenada. (¿Quizás me falta una opción para deshacerme de él?)

Pienso en un proceso de dos pasos:

  • Creación ASCII como se indica arriba
  • ejecute algún script Perl para resolver los problemas restantes

La función de expansión de Latex/Texmaker sería buena, por ejemplo, para expandir abreviaturas (a través de \newcommand) y referencias del uso \refo \vrefde la forma que necesito como HTML. Puedo hacer esto hasta cierto punto creando un pdf Y copiando el texto relevante de él (es decir, texto tipográfico "estropeado" con etiquetas HTML), pero esta no es una buena solución.

Quedarán cuestiones pendientes como la extracción y transformación, por ejemplo, de entornos de lista. Pero esto debería ser posible con Perl, que fue creado para este propósito.

Fondo 2 (casi obsoleto ahora): El objetivo es crear un solo archivo HTML grande, que pueda descomponer según sea necesario Sigil, que se encarga de todo el material epub.

Fondo 3 (casi obsoleto ahora): Creo mi documento Latex usando Scrivener, una herramienta de escritura, insertando solo código Latex relevante Y compilándolo como texto sin formato en Texmaker. Esto me da control total y fácil de qué incluir, excluir o modificar cosas.

Captura de pantalla, mostrando una página abierta en Sigil, mostrando información adicional, que no es necesaria, y etiquetas faltantes, que deben insertarse, por ejemplo, a través de mi script Perl. Arriba a la derecha: tex4ebookprocesamiento. // Este es un breve ejemplo en el que se crea demasiada salida para el archivo epub. Menos es más, más o menos.

ingrese la descripción de la imagen aquí

Respuesta1

Honestamente, no creo que lo que quieres lograr sea demasiado útil. Las etiquetas y atributos HTML adicionales contienen información semántica útil que luego puede usarse para estilos CSS, etc.

Por ejemplo este código:

<h3 class='sectionHead'><span class='titlemark'>1.1   </span> <a id='x2-20001.1'></a>Nam amet</h3>
<!-- l. 12 --><p class='noindent'>Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum amet.
</p>

<h3 class='sectionHead'>significa que este título fue generado por el \sectioncomando, <span class='titlemark'>se puede usar para un formato especial del número de sección. <a id='x2-20001.1'></a>es un destino para enlaces de \refcomandos que apuntan a esta sección, y también desde TOC. Si elimina esta etiqueta, las referencias cruzadas dejarán de funcionar. <!-- l. 12 -->es el número de línea del archivo TeX original, esto puede ser útil para depurar, pero estoy de acuerdo en que no es tan útil como las otras etiquetas. <p class='noindent'>significa que este párrafo no estaba previsto en el documento original. Como los archivos HTML están destinados al consumo de máquinas, a las que no les importa la información adicional, no se gana nada eliminando las etiquetas, pero se pierde bastante.

Dicho esto, si realmente deseas eliminar toda esta información, puedes hacerlo. Hay dos formas posibles. Una es usar el archivo de configuración TeX4th para cambiar las etiquetas generadas, la otra es usar filtros DOM LuaXML para eliminar etiquetas mediante programación. También puedes combinar estos enfoques, para usar el archivo de configuración para las cosas más fáciles y el archivo de compilación para eliminar los elementos restantes que son difíciles de eliminar del lado de TeX.

Su ejemplo particular se puede resolver usando solo el archivo de configuración. Guarde el siguiente código como mycfg.cfg:

\Preamble{xhtml}
\def\blocktag#1{\ifvmode\IgnorePar\fi\EndP\HCode{#1}}
\Configure{chapter}{}{}{\blocktag{<h2>}\chaptername\ \TitleMark\HCode{<br />\Hnewline}}{\blocktag{</h2>}}
\Configure{section}{}{}{\blocktag{<h3>}\TitleMark}{\blocktag{</h3>}}
\Configure{subsection}{}{}{\blocktag{<h4>}\TitleMark}{\blocktag{</h4>}}
\Configure{subsubsection}{}{}{\blocktag{<h5>}\TitleMark}{\blocktag{</h5>}}
\ConfigureMark{chapter}{\thechapter}
\ConfigureMark{section}{\thesection\ }
\ConfigureMark{subsection}{\thesubsection\ }
% subsubsection doesn't need mark configuration, as it doesn't produce a number
% handle paragraphs
\Configure{HtmlPar}{\EndP\HCode{<p>}}{\EndP\HCode{<p>}}{\HCode{</p>}}{\HCode{</p>}}
\Configure{textbf}{\HCode{<b>}\NoFonts}{\EndNoFonts\HCode{</b>}}
\Configure{textit}{\HCode{<i>}\NoFonts}{\EndNoFonts\HCode{</i>}}
\Configure{emph}{\HCode{<em>}\NoFonts}{\EndNoFonts\HCode{</em>}}
% handle the <a> tag inside sections

\catcode`\:=11

\def\Title:Link#1#2{}
\def\EndTitle:Link#1{}
% uncomment the following lines to get correct cross-references
%\LinkCommand\SectionLink{span,\noexpand\:gobble,id}
%\def\Title:Link{\SectionLink}
%\def\EndTitle:Link#1{\EndSectionLink}
\catcode`\:=12


\begin{document}
\EndPreamble

Para manejar los títulos de las secciones, debemos proporcionar dos comandos de configuración para cada tipo de sección:

 \Configure{sectionname}{at start of section}{at end of section}{section title}{end section title}
 \ConfigureMark{sectionname}{code that prints section number}

Entonces, para configurar la sección, necesitamos usar:

\Configure{section}{}{}{\blocktag{<h3>}\TitleMark}{\blocktag{</h3>}}
\ConfigureMark{section}{\thesection\ }

Esto elimina todo el formato innecesario producido por TeX4ht.

Entonces podemos arreglar párrafos:

\Configure{HtmlPar}{\EndP\HCode{<p>}}{\EndP\HCode{<p>}}{\HCode{</p>}}{\HCode{</p>}}

Esto elimina el comentario con números de línea e información sobre sangría. El \EndPcomando inserta la etiqueta de cierre del párrafo anterior.

También proporcioné un formato más agradable \textbfy comandos similares usando:

\Configure{textbf}{\HCode{<b>}\NoFonts}{\EndNoFonts\HCode{</b>}}

El \NoFontscomando evitará la inserción de <span class="cmbex">etc. Estas etiquetas se insertan cada vez que utiliza una fuente no predeterminada. \NoFontsimpedirá eso. Debes usar \EndNoFontspara encenderlo nuevamente. Si no desea utilizar información de fuente en absoluto, puede desactivarla agregando NoFontsuna opción al \Preamblecomando, como:

 \Preamble{xhtml,NoFonts}

La última parte es la más controvertida. El <a>elemento en los títulos de las secciones se inserta usando el \Title:Linkcomando. Puede redefinirlo para descartar el enlace. Debido a que usa el :en su nombre, también es necesario cambiar \catcodeeste carácter:

\catcode`\:=11
\def\Title:Link#1#2{}
\def\EndTitle:Link#1{}
\catcode`\:=12

Con esta configuración, obtendrá el siguiente resultado con

tex4ebook -c mycfg.cfg sample.tex
 <h2>Chapter 1<br /> 
Lorem ipsum</h2>
<p>   Dolor sit amet consectetuer eros sit quis mauris pretium. Phasellus penatibus
interdum dolor Ut nisl.
   </p>
   <h3>1.1 Nam amet</h3>
<p>   Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum
amet.
</p><p>   Facilisi Nulla ultrices malesuada orci nibh eget ac Aliquam eros ut.
</p><p>
   </p>
   <h3>1.2 Lorem gravida</h3>
<p>   Oorci sociis Nunc id hendrerit at ac amet Pellentesque. Eleifend risus orci sem
Sed ac.
</p><p>   A nec pellentesque Pellentesque Morbi fringilla accumsan et metus at
enim.
</p><p>   Eu felis Curabitur quis nibh tellus.
   </p> 

Si desea que las referencias cruzadas y el TOC funcionen correctamente, le sugeriría utilizar la siguiente configuración para `\Title:Link:

\LinkCommand\SectionLink{span,\noexpand\:gobble,id}
\def\Title:Link{\SectionLink}
\def\EndTitle:Link#1{\EndSectionLink}

El \LinkCommanddefine un nuevo comando que utiliza el mecanismo de referencia cruzada TeX4ht para producir enlaces. En lugar del <a>elemento, esta versión produce <span>, \noexpand\:gobbleelimina el posible enlace de salida y idmantiene el destino de los enlaces que apuntan a la sección.

Con este cambio obtendrás el siguiente resultado:

  <h2 id='lorem-ipsum'>Chapter 1<br /> 
<span id='x2-10001'>Lorem ipsum</span></h2>
<p>   Dolor sit amet consectetuer eros sit quis mauris pretium. Phasellus penatibus
interdum dolor Ut nisl.
   </p>
   <h3 id='nam-amet'>1.1 <span id='x2-20001.1'>Nam amet</span></h3>
<p>   Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum
amet.
</p><p>   Facilisi Nulla ultrices malesuada orci nibh eget ac Aliquam eros ut.
</p><p>
   </p>
   <h3 id='lorem-gravida'>1.2 <span id='x2-30001.2'>Lorem gravida</span></h3>
<p>   Oorci sociis Nunc id hendrerit at ac amet Pellentesque. Eleifend risus orci sem
Sed ac.
</p><p>   A nec pellentesque Pellentesque Morbi fringilla accumsan et metus at
enim.
</p><p>   Eu felis Curabitur quis nibh tellus.
   </p>   

Tenga en cuenta que la sección ahora se ve así:

  <h3 id='nam-amet'>1.1 <span id='x2-20001.1'>Nam amet</span></h3>

Fue <span id='x2-20001.1'>Nam amet</span>agregado por la configuración modificada y id='nam-amet'fue agregado por tex4ebook, para proporcionar un destino de enlace estable basado en el título de la sección, en lugar de la posición de la sección, que es más probable que cambie.

También hay algunos espacios en blanco adicionales en los párrafos, que se generan a partir de los espacios en blanco del archivo DVI. Para deshacerme de esto, usaría los filtros DOM.

El filtro DOM simple para esta tarea podría verse así:

local domfilter = require "make4ht-domfilter"

local function remove_space(node, regex)
  -- remove whitespace only from the text nodes
  if node and node:is_text() then
    node._text = node._text:gsub(regex, "")
  end
end

local filter = domfilter {
  function(dom)
    -- loop over <p> elements
    for _, p in ipairs(dom:query_selector("p")) do
      -- remove <p> elements without text
      local children = p:get_children()
      if #children < 2 and p:get_text():match("^%s*$") then
        p:remove_node()
      else
        local first = children[1]
        local last  = children[#children]
        remove_space(first, "^%s+") -- remove whitespace at the beginning
        remove_space(last, "%s+$") -- remove whitespace at the end of paragraph
      end
    end
    return dom
  end
}

Make:match("html$", filter)

Puedes solicitarlo usando la -eopción:

$ tex4ebook -c mycfg.cfg -e build.lua sample.tex

Este es el resultado:

   <h2 id='lorem-ipsum'>Chapter 1<br /> 
<span id='x2-10001'>Lorem ipsum</span></h2>
<p>Dolor sit amet consectetuer eros sit quis mauris pretium. Phasellus penatibus
interdum dolor Ut nisl.</p>
   <h3 id='nam-amet'>1.1 <span id='x2-20001.1'>Nam amet</span></h3>
<p>Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum
amet.</p><p>Facilisi Nulla ultrices malesuada orci nibh eget ac Aliquam eros ut.</p>
   <h3 id='lorem-gravida'>1.2 <span id='x2-30001.2'>Lorem gravida</span></h3>
<p>Oorci sociis Nunc id hendrerit at ac amet Pellentesque. Eleifend risus orci sem
Sed ac.</p><p>A nec pellentesque Pellentesque Morbi fringilla accumsan et metus at
enim.</p><p>Eu felis Curabitur quis nibh tellus.</p>  

información relacionada