使用 Tex4ht 构建带有框架的网站时遇到问题

使用 Tex4ht 构建带有框架的网站时遇到问题

通过带框架的 Tex4ht,使用配置文件 cc.cfg

\Preamble{xhtml,mathml,sections+,ext=htm,charset="utf-8",2,frames}

\Configure{@HEAD}{\HCode{<title>Good Morning</title>\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="profile" href="http://gmpg.org/xfn/11" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="shortcut icon"  href="css/images/favicon.ico" />\Hnewline}}


\Configure{BODY}
{%
  \HorFrames{*,3*}\Frame{s1}\Frame[ name="f2"]{s2}
  \NoFrames
  \PushStack\eBody{}
  \SubConfig

  \HPage[p1]{hello}\Link{}{s1}\EndLink
  \bgroup
  \Configure{Link}{a}{target="f2" href=}{name=}{}
  \tableofcontents
  \egroup
  \EndHPage{p1} \Tg<br />

  \HPage[p2]{text2222}\Link{}{s2}\EndLink
    }
    {  \EndHPage{p2}}
    \Configure{DOCTYPE}
    {\HCode{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
\Hnewline  "http://Hello1">\Hnewline}}

  \def\SubConfig{%
  \Configure{BODY}
   {\PushStack\eBody{x}\Tg<body>}
   {\PopStack\eBody\temp
 \ifx \temp\empty \EndFrames \else\Tg</body>\fi}

  \Configure{DOCTYPE}
   {\HCode{%
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     \Hnewline "http://Hello2"> \Hnewline}}

   }
    \begin{document}  


    \EndPreamble

我正在尝试编译以下 tex 文件 site_test.tex

\documentclass{book}
%\usepackage[latin1]{inputenc}
\usepackage{inputenc}
\usepackage[english]{babel}
\pdfcompresslevel=9
\usepackage{minitoc}  

\begin{document}

\dominitoc

\title{This is a title}
\date{Today is today}
\author{Joe}

\maketitle
\tableofcontents

\chapter{Chapter alpha}
\section{Alpha prime}
\section{Alpha secundus}
\subsection{Hello}
\subsection{Ciao}

\chapter{Chapter beta}
\section{bye}
\section{Here you are}

\end{document}

通过命令(在 MikteX Windows 8 上)

 htlatex site_test.tex "cc.cfg"

我得到以下输出在此处输入图片描述

我遇到了一些问题,想解决一下

  1. 该页面应名为“早上好”,网址:

    \Configure{@HEAD}{\HCode{<title>Good Morning</title>\Hnewline}}
    

    但它采用文档的标题“这是一个标题”(图标有效)

  2. 我试图将标题、日期和作者放在目录上方,但迄今为止没有成功。

  3. 在目录中,有 2 个“内容”。如何删除至少一个?

  4. (有人知道通过修改 css 文件来改进网站的方法吗?)

我理解代码的整体结构,但还不够。如有必要,我可以发布 HTML 输出。有人有实际示例吗?欢迎提供任何帮助 :)

答案1

我认为这可能会有所帮助。TeX\tableofcontents文件中使用的现在被注释,因为这会导致内容标题在框架中。修改后的 TeX 文件如下所示:

\documentclass{book}
%\usepackage[latin1]{inputenc}
\usepackage{inputenc}
\usepackage[english]{babel}
\pdfcompresslevel=9
\usepackage{minitoc}  

\begin{document}

\dominitoc

\title{This is a title}
\date{Today is today}
\author{Joe}

\maketitle
%\tableofcontents

\chapter{Chapter alpha}
\section{Alpha prime}
\section{Alpha secundus}
\subsection{Hello}
\subsection{Ciao}

\chapter{Chapter beta}
\section{bye}
\section{Here you are}

\end{document}

我现在将尝试回答您的问题:

  1. 作为命令参数提供的内容\title将出现在<title>...</title>HTML 中。如果您想删除默认文本,有一个简单的方法肮脏的实现方法:

     \Configure{TITLE}{\HCode{<title>}\special{t4ht@[}}{\special{t4ht@]}Good Morning\HCode{</title>\Hnewline}}
    

\special{t4ht@[}和之间的所有字符都\special{t4ht@]}将被忽略,标题的实际内容现在将被剥离,您的自定义标题Good Morning现在将显示为标题。之前在您的例子中,浏览器使用第一个<title>...</title>元素来显示标题。

  1. \title在第一次编译时将、\author和的值放入 toc 并不容易。因此,我重新定义了标准命令,以便其参数在第一次编译时分别作为、和\date写入辅助文件。请注意,现在我还没有考虑处理默认可用的可选参数。\Title\Author\Date

    \let\Title\@empty
    \let\Author\@empty
    \let\Date\@empty
    \def\title#1{\gdef\@title{#1}
    \immediate\write\@auxout{\string\gdef\string\Title{#1}}}
    \def\author#1{\gdef\@author{#1}
    \immediate\write\@auxout{\string\gdef\string\Author{#1}}}
    \def\date#1{\gdef\@date{#1}
    \immediate\write\@auxout{\string\gdef\string\Date{#1}}}
    

这些命令现已添加到目录中,位于\tableofcontents命令之前,如下所示:

\HPage[p1]{hello}\Link{}{s1}\EndLink
\bgroup
\Tg<span class="likechapterToc" >
\Tg<a target="f2" href="\jobname4.html\#s2" name="">\Title\Tg</a>
\Tg</span>\Tg<br />
\Tg<span class="likechapterToc" >
\Tg<a target="f2" href="\jobname4.html\#s2" name="">\Author\Tg</a>
\Tg</span>\Tg<br />
\Tg<span class="likechapterToc" >
\Tg<a target="f2" href="\jobname4.html\#s2" name="">\Date\Tg</a>
\Tg</span>\Tg<br />
\Configure{Link}{a}{target="f2" href=}{name=}{}
\tableofcontents
\egroup
\EndHPage{p1} \Tg<br />
  1. 当我们\tableofcontents从 TeX 文件中删除命令时,来自 toc 框架的重复条目现在消失了。

  2. 这可能有点题外。但有人可以提出一个好建议。

因此,更新后的 cfg 如下所示:

\Preamble{xhtml,mathml,sections+,ext=htm,charset="utf-8",2,frames}

\Configure{TITLE}{\HCode{<title>}\special{t4ht@[}}{\special{t4ht@]}Good Morning\HCode{</title>\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="profile" href="http://gmpg.org/xfn/11" />\Hnewline}}
\Configure{@HEAD}{\HCode{<link rel="shortcut icon"  href="css/images/favicon.ico" />\Hnewline}}

\makeatletter
\let\Title\@empty
\let\Author\@empty
\let\Date\@empty
\def\title#1{\gdef\@title{#1}
\immediate\write\@auxout{\string\gdef\string\Title{#1}}}
\def\author#1{\gdef\@author{#1}
\immediate\write\@auxout{\string\gdef\string\Author{#1}}}
\def\date#1{\gdef\@date{#1}
\immediate\write\@auxout{\string\gdef\string\Date{#1}}}
\Configure{BODY}
{\Tg<a id="title"/>%
  \HorFrames{*,3*}\Frame{s1}\Frame[ name="f2"]{s2}
  \NoFrames
  \PushStack\eBody{}
  \SubConfig

    \HPage[p1]{hello}\Link{}{s1}\EndLink
    \bgroup
    \Tg<span class="likechapterToc" >
    \Tg<a target="f2" href="\jobname4.html\#s2" name="">\Title\Tg</a>
    \Tg</span>\Tg<br />
    \Tg<span class="likechapterToc" >
    \Tg<a target="f2" href="\jobname4.html\#s2" name="">\Author\Tg</a>
    \Tg</span>\Tg<br />
    \Tg<span class="likechapterToc" >
    \Tg<a target="f2" href="\jobname4.html\#s2" name="">\Date\Tg</a>
    \Tg</span>\Tg<br />
    \Configure{Link}{a}{target="f2" href=}{name=}{}
    \tableofcontents
    \egroup
    \EndHPage{p1} \Tg<br />

  \HPage[p2]{text2222}\Link{}{s2}\EndLink
    }
    {  \EndHPage{p2}}
    \Configure{DOCTYPE}
    {\HCode{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
\Hnewline  "http://Hello1">\Hnewline}}

  \def\SubConfig{%
  \Configure{BODY}
   {\PushStack\eBody{x}\Tg<body>}
   {\PopStack\eBody\temp
 \ifx \temp\empty \EndFrames \else\Tg</body>\fi}

  \Configure{DOCTYPE}
   {\HCode{%
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     \Hnewline "http://Hello2"> \Hnewline}}

   }
\makeatother
    \begin{document}  


    \EndPreamble

相关内容