使用子文件将 LaTeX 编译为 HTML

使用子文件将 LaTeX 编译为 HTML

我有一个相当大的 tex 项目,我想将其转换为一个或多个链接的 html 文件。但是我常用的转换器 pandoc 和 latex2html 似乎都不支持递归编译。

其中一个是否有我遗漏的编译器标志?如果没有,是否有转换器支持我尝试执行的操作,或者我是否只需将所有内容复制并粘贴到一个非常长的文档中?

编辑:

需要说明的是,我有一个main.tex包含该subfiles包的文件。我还有其他几个文件,i.tex格式如下:

\documentclass[/path/to/files]{subfiles}
\begin{document}
Some words
\end{document}

我如何将它们全部包含到我的最终文档中(作为某些文件的内容main.htmli.html链接到的单独文件)main.html,而无需手动进行艰苦的工作?

答案1

tex4ht支持这一点。它需要一个简单的配置文件,subfiles.4ht以支持多个子文件:

\def\:tempa#1{%
  \ifcsname subfiles@end\endcsname
  \else
    \subfiles@saveEndTo\subfiles@end
  \fi
  \let\choose:begin\@secondoftwo
  \expandafter\def\csname end \endcsname##1{%
    \romannumeral
    \subfiles@StrIfEqTF{##1}{document}{%
      \z@
      \subfiles@restoreEndFrom\subfiles@end
      #1%
    }{%
      \expandafter\expandafter\expandafter\z@\subfiles@end{##1}%
    }%
  }%
}

\HLet\subfiles@renewEndDocument\:tempa
\Hinput{subfiles}
\endinput

它在包含的子文件中禁用\end{document},因为否则它会关闭文档。

简单的例子。

主文件sample.tex

\documentclass{article}

\usepackage{subfiles}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}
\title{Subfile example}
\maketitle
\tableofcontents
\subfile{subfile1.tex}
\end{document}

包含的文件subfile1.tex

\documentclass[sample.tex]{subfiles}
\begin{document}
\section{Hello world}
Some words

Příliš žluťoučký kůň
\end{document}

您可以使用命令编译该文档

make4ht -u sample.tex

结果如下:

在此处输入图片描述

答案2

latexml 能满足您的要求吗?我不太清楚您的具体需求,但它可以接收大型 LaTeX 文件,并按章节或部分(等等)将其拆分为多个 HTML 文件。

我不是专家,但我用来执行此操作的命令(假设文档tex/mydocument.tex并保存到html/目录)是:

latexml tex/mydocument.tex | latexmlpost - \
  --sourcedirectory=tex \
  --format=html5 \
  --destination=html/mydocument.html \
  --splitat=chapter \
  --splitnaming=label

这里是按章节进行拆分的,每个章节都需要一个\label才能使拆分命名生效。如果删除--splitnaming=label,它将简单地将每个 HTML 文件命名为Ch1.html.. ChN.html

它不包含在 TeX Live 中,但我在 macOS 上直接从LaTeXML Github 存储库

相关内容