
Ich verwende Texmaker aus der MikTex-Distribution.
Was ich tun möchte, ist
- Latex-Code erstellen
- Führen Sie Texmaker aus, um alle Ersetzungen vorzunehmen, z. B. von
\newcommand
- Erstellen Sie es als reinen ASCII-Code und nicht als PDF
Frage: Wie geht das, wie konfiguriert man Texmaker, sofern es möglich ist?
Vorschläge aus Ihren Kommentaren: In chronologischer Reihenfolge:
verwenden oder kombinieren mit
pdftotext
benutzen
tex4ebook
mitDOM-filters
Verwenden Sie das
lwarp
Paketverwenden
pandoc
verwenden
markup
Meine vorläufige Einschätzungdieser Vorschläge:
pdftotext
funktioniert natürlich und könnte als Fallback-Lösung nützlich sein, wenn ich die ePub-Datei zu 100 % (oder in Teilen) manuell mit neu erstellen müssteSigil
, siehe Ablauf unten.lwarp
undpandoc
sindmarkup
von dieser Bewertung ausgeschlossen.Ich bin zuversichtlich, mein Ziel zu erreichen, indem ich a)
tex4ebook
mit einer Konfigurationsdatei arbeite, wie von michal.h21 vorgeschlagen, b)Scrivener
vorher einige Ersetzungen einführe, um z. B. die an geleistete Arbeit zu bewahren\index{}
, und c) esSigil
seine Magie wirken lasse (Neuformatierung, Inhaltsverzeichnis, Metadaten usw.). // Ja, es wird ein halbautomatischer Prozess bleiben.Wenn ich nur 2a) verwende, scheint die erstellte epub-Datei mit dem eBook-Reader von Calibre (Software) einwandfrei zu funktionieren, verhält sich aber auf meinem iPad (Hardware) seltsam. Ich habe es nicht näher untersucht, aber wahrscheinlich fehlen in dem
<guide>
Abschnitt darincontent.opf
aus irgendeinem Grund einige Informationen. So etwas in der Art. // Nur ein weiterer Grund, eine Strategie mit minimaler Codierung zu verfolgen, d. h. so viel Schnickschnack wie möglich in der Ausgabe zu vermeiden.Die Verwendung
make4ht
mit derselben Konfigurationsdatei und die Verarbeitung dieser HTML-Datei mitSigil
einem neuen EPUB scheint problemlos zu funktionieren, sogar auf meinem iPad.
Prozess im Auge: Finden Sie aus Ihren Kommentaren dieGrundprozessIch habe unten im Sinn. Im Moment ist es nicht klar, ob ich es realisieren kann oder nicht und wie zuverlässig es bei Wiederholung sein wird. Der PDF-Teil ist zuverlässig, während die epub-Erstellung zufragiler Epub-Code(funktioniert auf einigen Readern, aber nicht auf anderen). // Ansatz: einzelne Quelle, einmal eingefroren, PDF- UND EPUB-Ausgabe. // DieBeispielist natürlich vereinfacht. // epub kann kein gültiger epub-Inhalt sein,um Probleme zu vermeidenauf jedem eBook-Reader. // "Minimales epub" bedeutet: keine ausgefallenen Dinge in die Ausgabedatei aufnehmen. // EinBeispielkönnen HTML-Kommentare sein, die zwar erlaubt sind, aber im schlimmsten Fall manchen eBook-Reader irritieren (dauert ewig, bis sie überhaupt geladen sind). //Dekorationmit <p> </p>
-Tags wird von erledigt Sigil
, wenn ich mich richtig erinnere. Dasselbe gilt für Partitionierung, Inhaltsverzeichniserstellung, Stylesheeting usw. Viele Dinge, die pdflatex
bereitgestellt werden, sind also irgendwie redundant.
Einzelne eingefrorene Quelle, daraus abgeleitetes PDF UND EPUB (läuft auf jedem eBook-Reader).
Kurz gesagt, ich muss weniger nützliche Bytes loswerden und mehr Kontrolle über das Einfügen von Klassen, Div-Tags usw. haben. Vertrauen Sie mir: Dies lässt sich Scrivener
bei Bedarf teilweise problemlos mit erledigen. (Wenn Sie dieses Programm nicht kennen, denken Sie an ein Tool zum Erstellen, Organisieren, Ändern und Sammeln einer großen Menge von Notizen unterschiedlicher Länge.)
Das Problem besteht darin, dass Programme/Tools dazu neigen, zu viel in eine EPUB-Datei zu packen ... was ein wirklich schwaches Format ist (funktioniert möglicherweise auf einem Reader schnell und gut, verursacht aber auf einem anderen Probleme).
Beispiel (mittlerweile fast veraltet): Leider habe ich Raum für Verwirrung darüber gelassen, was meine „ASCII“-Anforderung bedeuten könnte und was nicht.Ich hoffe, dass die Reader nicht mehr auf 'ascii' oder 'pdf' reagieren,und beginnend mit diesem einfachen Latex-Dokument ...
\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}
... es wäre ok, wenn der markierte Teil sich in ... verwandelt.
<h3 class='myOne'>1.1 Nam amet</h3>
<p>Adipiscing est leo convallis nunc interdum Lorem hendrerit Vestibulum amet.
</p>
... aber sicher nicht in ...
<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>
Alles andere, was Sie beim Anzeigen einer PDF-Datei in einem ASCII-Editor sehen könnten, ist hier nicht erwünscht.
Hintergrund 1 (mittlerweile fast veraltet): Dies ist ein alternativer Versuch, möglichst reines, d. h. minimales HTML zu erstellen. Ich habe es versucht tex4ebook
, was ein großartiges Tool ist, aber leider fügt es alle möglichen zusätzlichen Informationen und Stile ein und imitiert das Erscheinungsbild von Latex, was ich nicht möchte, selbst mit der Aufräumoption. (Vielleicht fehlt mir eine Option, um es loszuwerden?)
Ich denke an einen zweistufigen Prozess:
- ASCII-Erstellung wie oben beschrieben
- Führen Sie ein Perl-Skript aus, um verbleibende Probleme zu beheben
Die Erweiterungsfunktion von Latex/Texmaker wäre nett, z. B. um Abkürzungen (über \newcommand
) und Referenzen zu erweitern, indem ich sie verwende \ref
oder \vref
so, wie ich sie als HTML brauche. Ich kann dies bis zu einem gewissen Grad tun, indem ich ein PDF erstelle UND relevanten Text daraus kopiere (d. h. Typset-Text mit HTML-Tags „verunstalte“) – aber das ist keine schöne Lösung.
Es bleiben noch Probleme wie das Extrahieren und Transformieren von Listenumgebungen. Aber das sollte mit Perl machbar sein, das für diesen Zweck entwickelt wurde.
Hintergrund 2 (mittlerweile fast veraltet): Das Ziel besteht darin, nur eine große HTML-Datei zu erstellen, die ich nach Bedarf aufteilen kann und Sigil
die sich um alle EPUB-Sachen kümmert.
Hintergrund 3 (mittlerweile fast veraltet): Ich erstelle mein Latex-Dokument mit Scrivener
, einem Schreibtool, indem ich nur relevanten Latex-Code einfüge UND ihn als reinen Text in Texmaker kompiliere. Dadurch habe ich die volle und einfache Kontrolle darüber, was ich einschließen, ausschließen oder ändern möchte.
Bildschirmfoto, zeigt eine in geöffnete Seite Sigil
, weist auf Zusatzinformationen hin, die nicht benötigt werden, und fehlende Tags, die eingefügt werden müssen, z. B. über mein Perl-Skript. Oben rechts: tex4ebook
Verarbeitung. // Dies ist ein kurzes Beispiel, bei dem zu viel Ausgabe für die epub-Datei erstellt wird. Weniger ist mehr, mehr oder weniger.
Antwort1
Ehrlich gesagt glaube ich nicht, dass das, was Sie erreichen möchten, besonders nützlich ist. Die zusätzlichen HTML-Tags und -Attribute enthalten nützliche semantische Informationen, die dann für CSS-Styling usw. verwendet werden können.
Zum Beispiel dieser Code:
<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'>
\section
bedeutet, dass dieser Titel durch den Befehl erzeugt wurde , <span class='titlemark'>
kann für die spezielle Formatierung der Abschnittsnummer verwendet werden. <a id='x2-20001.1'></a>
ist ein Ziel für Links von \ref
Befehlen, die auf diesen Abschnitt verweisen, und auch vom Inhaltsverzeichnis. Wenn Sie dieses Tag entfernen, funktionieren Querverweise nicht mehr. <!-- l. 12 -->
ist die Zeilennummer der ursprünglichen TeX-Datei, dies kann beim Debuggen nützlich sein, aber ich stimme zu, dass es nicht so nützlich ist wie die anderen Tags. <p class='noindent'>
bedeutet, dass dieser Absatz im Originaldokument nicht vorgesehen war. Da HTML-Dateien für die Verarbeitung durch Maschinen gedacht sind, denen zusätzliche Informationen nichts ausmachen, gewinnen Sie durch das Entfernen der Tags nichts, verlieren aber ziemlich viel.
Wenn Sie diese Informationen wirklich entfernen möchten, können Sie das tun. Es gibt zwei Möglichkeiten. Eine besteht darin, die TeX4th-Konfigurationsdatei zu verwenden, um generierte Tags zu ändern, die andere darin, LuaXML-DOM-Filter zu verwenden, um Tags programmgesteuert zu entfernen. Sie können diese Ansätze auch mischen, um die Konfigurationsdatei für die einfacheren Dinge zu verwenden und die Build-Datei, um verbleibende Elemente zu entfernen, die von der TeX-Seite aus schwer zu entfernen sind.
Ihr spezielles Beispiel kann nur mit der Konfigurationsdatei gelöst werden. Speichern Sie den folgenden Code als 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
Um Abschnittstitel zu verwalten, müssen wir für jeden Abschnittstyp zwei Konfigurationsbefehle bereitstellen:
\Configure{sectionname}{at start of section}{at end of section}{section title}{end section title}
\ConfigureMark{sectionname}{code that prints section number}
Um den Abschnitt zu konfigurieren, müssen wir also Folgendes verwenden:
\Configure{section}{}{}{\blocktag{<h3>}\TitleMark}{\blocktag{</h3>}}
\ConfigureMark{section}{\thesection\ }
Dadurch werden alle unnötigen Formatierungen entfernt, die von TeX4ht erzeugt werden.
Dann können wir Absätze korrigieren:
\Configure{HtmlPar}{\EndP\HCode{<p>}}{\EndP\HCode{<p>}}{\HCode{</p>}}{\HCode{</p>}}
Dadurch wird der Kommentar mit Zeilennummern und Angaben zur Einrückung entfernt. Der \EndP
Befehl fügt das schließende Tag für den vorherigen Absatz ein.
Ich habe auch eine schönere Formatierung für \textbf
und ähnliche Befehle bereitgestellt, indem ich Folgendes verwendet habe:
\Configure{textbf}{\HCode{<b>}\NoFonts}{\EndNoFonts\HCode{</b>}}
Der \NoFonts
Befehl verhindert das Einfügen von <span class="cmbex">
usw. Diese Tags werden jedes Mal eingefügt, wenn Sie eine nicht standardmäßige Schriftart verwenden. \NoFonts
verhindert das. Sie müssen verwenden, um es wieder einzuschalten. Wenn Sie überhaupt keine Schriftartinformationen verwenden möchten, können Sie es deaktivieren, indem Sie dem Befehl eine Option \EndNoFonts
hinzufügen , wie:NoFonts
\Preamble
\Preamble{xhtml,NoFonts}
Der letzte Teil ist der umstrittenste. Das <a>
Element in Abschnittstiteln wird mit dem \Title:Link
Befehl eingefügt. Sie können es neu definieren, um den Link zu verwerfen. Da es :
in seinem Namen das verwendet, ist es auch notwendig, \catcode
dieses Zeichen zu ändern:
\catcode`\:=11
\def\Title:Link#1#2{}
\def\EndTitle:Link#1{}
\catcode`\:=12
Mit dieser Konfiguration erhalten Sie das folgende Ergebnis mit
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>
Wenn Querverweise und Inhaltsverzeichnis richtig funktionieren sollen, empfehle ich die Verwendung der folgenden Konfiguration für `\Title:Link:
\LinkCommand\SectionLink{span,\noexpand\:gobble,id}
\def\Title:Link{\SectionLink}
\def\EndTitle:Link#1{\EndSectionLink}
Der \LinkCommand
neue Befehl definiert den Querverweismechanismus von TeX4ht, um Links zu erstellen. Anstelle des <a>
Elements erstellt diese Version <span>
, \noexpand\:gobble
entfernt den möglichen ausgehenden Link und id
speichert das Ziel für Links, die auf den Abschnitt verweisen.
Mit dieser Änderung erhalten Sie folgendes Ergebnis:
<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>
Beachten Sie, dass der Abschnitt jetzt folgendermaßen aussieht:
<h3 id='nam-amet'>1.1 <span id='x2-20001.1'>Nam amet</span></h3>
Das <span id='x2-20001.1'>Nam amet</span>
wurde durch die geänderte Konfiguration hinzugefügt und id='nam-amet'
wurde von hinzugefügt tex4ebook
, um ein stabiles Linkziel basierend auf dem Abschnittstitel anstelle der Abschnittsposition bereitzustellen, die sich eher ändert.
Es gibt auch einige zusätzliche Leerzeichen in Absätzen, die aus den Leerzeichen in der DVI-Datei generiert werden. Um diese zu entfernen, würde ich die DOM-Filter verwenden.
Ein einfacher DOM-Filter für diese Aufgabe könnte so aussehen:
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)
Sie können dies mit der folgenden Option anfordern -e
:
$ tex4ebook -c mycfg.cfg -e build.lua sample.tex
Dies ist das Ergebnis:
<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>