Konvertieren von LaTex in HTML, wobei Gleichungen bis auf die Beschriftungen als LaTeX beibehalten werden

Konvertieren von LaTex in HTML, wobei Gleichungen bis auf die Beschriftungen als LaTeX beibehalten werden

Konvertieren von LaTeX in HTML, wobei Gleichungen als LaTeX beibehalten werdenerklärt, wie man \VerbMath in tex4ht verwendet, um LaTeX in HTML umzuwandeln und dabei die Gleichungen beizubehalten. Als Referenz füge ich hinzu, dass man für mehrere Zeilen die Umgebung aligniert verwenden kann, wie erklärtHier.

Diese Lösungen funktionieren jedoch nicht mit Etiketten. Ich hätte also gerne eine Möglichkeit,

\begin{equation}
1=1 \label{eq}
\end{equation}

Equation \ref{eq}

hinein

\begin{equation}
1=1~~~(7)
\end{equation}

Equation (7)

wobei (7) die korrekte Nummerierung der Gleichung ist. Kann dies mit tex4ht gemacht werden, oder gibt es ein anderes Skript, das das kann?

Hinweis: Mathjax kann Beschriftungen/Referenzen auflösen, aber ich möchte Mathjax nicht verwenden.

Antwort1

Bearbeiten:

Da Sie MathJax nicht verwenden möchten, müssen Sie Ihren Text nachbearbeiten, um Beschriftungen und Querverweise zu ersetzen und Gleichungsnummern einzufügen. Glücklicherweise können wir make4htdafür Build-Dateien verwenden.

Beispieldatei:

\documentclass{article}
% \usepackage[T1]{fontenc}
\usepackage{amsmath}

\newcommand\mjref[1]{\ref{#1}}
\begin{document}
\begin{equation}
1=1 \label{eq}
\end{equation}

\begin{align}
  1 + a = 2\\
  2 - a = 1
\end{align}

Equation \mjref{eq} 
\end{document}

Details dazu \mjreffinden Sie in der ursprünglichen Antwort, diese Details gelten weiterhin. Wir werden ein modifiziertes Paket verwenden, um die LaTeX-Mathematik unverändert zu lassen latex-unchanged.sty:

\RequirePackage{verbatim,etoolbox}
\AtBeginDocument{%
  \def\AltMathOne#1${\HCode{\detokenize{\(#1\)}}$}
  \Configure{$}{}{}{\expandafter\AltMathOne} 
  \def\AltlMath#1\){\HCode{\detokenize{\(#1\)}}\)}
  \Configure{()}{\AltlMath}{}
  \def\AltlDisplay#1\]{\HCode{\detokenize{\[#1\]}}\]}
  \Configure{[]}{\AltlDisplay}{}
% 
\newcommand\VerbMath[1]{%
\ifcsdef{#1}{%
  \renewenvironment{#1}{%
    \NoFonts%
    \Configure{verbatim}{}{}
    \HChar{92}begin\{#1\}%
    \verbatim}{\endverbatim\HChar{92}end\{#1\}\EndNoFonts}%
}{}%
}

\VerbMath{align}
\VerbMath{equation}
\VerbMath{equation*}
  }

Leicht veränderte .cfgDatei:

\RequirePackage{latex-unchanged} 
\Preamble{xhtml,html5}
\begin{document}
\renewcommand\mjref[1]{\NoFonts\HChar{92}eqref\{#1\}\EndNoFonts}
\EndPreamble

Und jetzt das Interessante:

Die Build-Datei mit dem Namen youfilename.mk4:

local filter = require "make4ht-filter"
local crossref = require "crossref"
local process = filter { crossref }

Make:match(".html$", process)

Dies erklärt, dass alle HTML-Dateien mit einer Bibliothek verarbeitet werden sollen crossref, die die ganze harte Arbeit übernimmt. Speichern Sie den folgenden Code als crossref.lua:

-- counter values for particular counters will be saved here
local eqcounter = 0
-- pattern which will be inserted as equation number
local counter_pattern = "~~~(%i)"

-- list of environments to insert counters
local processed = {"equation", "align"}
local labels = {}


-- this function takes pattern for ending text (it is end environment or
-- \\ as line breaks in aligns) and insert counter numbers before the matched text
-- it also removes \labels and store them for future use
local function insert_counter(text, pattern, counter)
  local counter_pat = string.format(counter_pattern, counter)
  -- remove labels
  local removed_labels = text:gsub('%s*\\label{(.-)}', function(name)
    -- save counter under label name
    print("save label", name, counter)
    labels[name] = counter
    return ''
  end)
  local inserted = removed_labels:gsub(pattern, counter_pat .. '%0')
  print("inserted", inserted)
  return inserted
end

local function handle_counter(env, name)
  eqcounter = eqcounter + 1
  -- we need to support align environments, which will have multiple counters
  if env:match('\\\\') then
    local parts = {}
    local ending = env:gsub('(.-)\\\\', function(part)
      table.insert(parts, part)
      return ''
    end)
    local results = {}
    -- we first process lines ending with \\, the last line without this will be processd
    -- with usual code for end environment
    for _, part in ipairs(parts) do
      print("part", part)
      table.insert(results, insert_counter(part, '(%s*)$',eqcounter))
      eqcounter = eqcounter + 1
    end
    env  = table.concat(results, '\\\\') .. '\\\\' ..ending
  end
  -- now insert counter for the whole environment
  return insert_counter(env, '(%s*\\end{'.. name ..'}', eqcounter)
end

local function handle_refs(text)
  -- modify the pattern to match the referencing macro you use
  return text:gsub('\\eqref{(.-)}', function(label)
    local counter = labels[label]
    if not counter then return '??' end
    return string.format("(%i)", counter)
  end)
end

return function(s)
  -- process math environments defined in processed table
  for _, name in ipairs(processed) do
    -- match the whole environments and replace them with modified version
    s = s:gsub('(\\begin{' ..name .. '}.-\\end{'.. name ..'})', function(environment)
      return handle_counter(environment, name)
    end)
  end
  -- handle ref commands in text
  s = handle_refs(s)
  return s
end

Details stehen in den Kommentaren im Quellcode.

Kompilieren mit:

make4ht -uc myconfig4.cfg -e youfilename.mk4 sample.tex

Dies ist das Ergebnis:

<!--l. 7--><p class="noindent" >\begin{equation}
1=1~~~(1)
\end{equation}

</p><!--l. 11--><p class="noindent" >\begin{align}
1+a=2~~~(2)\\
2-a=1~~~(3)
\end{align}
</p><!--l. 16--><p class="noindent" >Equation (1)</p> 

Ursprüngliche Antwort:

MathJax unterstützt selbst Beschriftungen und Querverweise, daher ist es vielleicht realistischer, es nicht nur \label, sondern auch verarbeiten zu lassen \ref. Ich würde ein benutzerdefiniertes Makro zum Verweisen auf mathematische Umgebungen definieren, das neu definiert werden kann, um es einzufügen, \ref{labelname}wenn das Dokument mit kompiliert wird tex4ht. Ich würde es nicht \refselbst neu definieren, da Sie wahrscheinlich nicht die Möglichkeit verlieren möchten, auf Abschnitte oder Abbildungen zu verweisen.

Etwas wie das:

\documentclass{article}
\usepackage{amsmath}

\newcommand\mjref[1]{\ref{#1}}
\begin{document}
\begin{equation}
1=1 \label{eq}
\end{equation}

Equation \mjref{eq} 
\end{document}

Die aktuelle Version des Codes für MathJax mit LaTeX-Makros finden Siehelpers4ht-Paket. Es ist nicht auf CTAN, Sie können einfachmathjax-latex4ht.styPaket.

Die Konfigurationsdatei kann etwas vereinfacht werden:

\RequirePackage{mathjax-latex-4ht} 
\Preamble{xhtml}
\begin{document}
\renewcommand\mjref[1]{\NoFonts\HChar{92}eqref\{#1\}\EndNoFonts}
\EndPreamble

Das einzig Interessante ist die Neudefinition des \mjrefBefehls, die das Einfügen von HTML-Tags für Schriftarten vorübergehend deaktiviert und das Zeichen stattdessen über seinen ASCII-Code \HChar{92}einfügt .\

Der resultierende HTML-Code lautet wie folgt:

<!--l. 7--><p class="noindent" >\begin{equation}
1=1\label{eq}
\end{equation}
</p><!--l. 11--><p class="noindent" >Equation \eqref{eq}</p> 

Es wird von MathJax folgendermaßen gerendert:

Bildbeschreibung hier eingeben

verwandte Informationen