如何在 latex 中生成具有以下格式的 latex?我知道关于tex4ht
,我知道关于,latex4html
但无法获得类似的输出。
源网站在这里下面是页面快照
示例 Tex 文件(请注意上面链接中的表格)
\documentclass[ebook,10pt,oneside,openany,final]{memoir}
\usepackage[american]
{babel} % needed for iso dates
\usepackage[iso,american]
{isodate} % use iso format for dates
\usepackage[final]
{listings} % code listings
\setcounter{totalnumber}{10}
% Base definitions for tables
\newenvironment{TableBase}
{
\renewcommand{\tcode}[1]{{\CodeStylex{##1}}}
\newcommand{\topline}{}
\newcommand{\capsep}{}
\newcommand{\rowsep}{}
\newcommand{\bottomline}{}
%% vertical alignment
\newcommand{\rb}[1]{\raisebox{1.5ex}[0pt]{##1}} % move argument up half a row
%% header helpers
\newcommand{\hdstyle}[1]{\textbf{##1}} % set header style
\newcommand{\Head}[3]{\multicolumn{##1}{##2}{\hdstyle{##3}}} % add title spanning multiple columns
\newcommand{\lhdrx}[2]{\Head{##1}{|c}{##2}} % set header for left column spanning #1 columns
\newcommand{\chdrx}[2]{\Head{##1}{c}{##2}} % set header for center column spanning #1 columns
\newcommand{\rhdrx}[2]{\Head{##1}{c|}{##2}} % set header for right column spanning #1 columns
\newcommand{\ohdrx}[2]{\Head{##1}{|c|}{##2}} % set header for only column spanning #1 columns
\newcommand{\lhdr}[1]{\lhdrx{1}{##1}} % set header for single left column
\newcommand{\chdr}[1]{\chdrx{1}{##1}} % set header for single center column
\newcommand{\rhdr}[1]{\rhdrx{1}{##1}} % set header for single right column
\newcommand{\ohdr}[1]{\ohdrx{1}{##1}}
\newcommand{\br}{\hfill\break} % force newline within table entry
%% column styles
\newcolumntype{x}[1]{>{\raggedright\let\\=\tabularnewline}p{##1}} % word-wrapped ragged-right
% column, width specified by #1
% \newcolumntype{m}[1]{>{\CodeStyle}l{##1}} % variable width column, all entries in CodeStyle
\newcolumntype{m}[1]{l{##1}} % variable width column, all entries in CodeStyle
}
{
}
% General Usage: TITLE is the title of the table, XREF is the
% cross-reference for the table. LAYOUT is a sequence of column
% type specifiers (e.g. cp{1.0}c), without '|' for the left edge
% or right edge.
% usage: \begin{floattablebase}{TITLE}{XREF}{COLUMNS}{PLACEMENT}
% produces floating table, location determined within limits
% by LaTeX.
\newenvironment{floattablebase}[4]
{
\begin{TableBase}
\begin{table}[#4]
\caption{\label{#2}#1}
\begin{center}
\begin{tabular}{|#3|}
}
{
\bottomline
\end{tabular}
\end{center}
\end{table}
\end{TableBase}
}
% usage: \begin{floattable}{TITLE}{XREF}{COLUMNS}
% produces floating table, location determined within limits
% by LaTeX.
\newenvironment{floattable}[3]
{
\begin{floattablebase}{#1}{#2}{#3}{htbp}
}
{
\end{floattablebase}
}
\newcommand{\CodeStylex}[1]{\texttt{#1}}
\newcommand{\tcode}[1]{\CodeStylex{#1}}
\begin{document}
\begin{floattable}
{Potential \tcode{setlocale} data races}
{tab:setlocale.data.races}
{lllll}
\topline
\tcode{fprintf} &
\tcode{isprint} &
\tcode{iswdigit} &
\tcode{localeconv} &
\tcode{tolower} \\
\end{floattable}
\end{document}
答案1
此代码涉及项目OP 在评论中提到了这一点。
我会将带有宏定义的文件转换为sty
文件。因此将文件macros.tex
、layout.tex
等重命名为macros.sty
等。在主文件中,然后使用 调用它们\usepackage
。这样,您就可以为 提供配置文件了tex4ht
。
您应该重写一些宏,以便于修改。例如,您在macros.tex
这个宏中有:
\def\Sec#1[#2]#3{{%
\ifcase#1\let\s=\chapter
\or\let\s=\section
\or\let\s=\subsection
\or\let\s=\subsubsection
\or\let\s=\paragraph
\or\let\s=\subparagraph
\fi%
\s[#3]{#3\hfill[#2]}\label{#2}}}
由于tex4ht
您需要在其中插入一些 html 标签,因此最好对其进行一些修改:
\def\Sec#1[#2]#3{{%
\ifcase#1\let\s=\chapter
\or\let\s=\section
\or\let\s=\subsection
\or\let\s=\subsubsection
\or\let\s=\paragraph
\or\let\s=\subparagraph
\fi%
\s[#3]{\SecParts{#3}{#2}}\edef\@currentlabel{_#2_}\label{#2}}}
\newcommand\SecParts[2]{#1\hfill[#2]}
现在您只需要\SecParts
在配置文件中重新定义宏tex4ht
来插入一些 html 标签。\edef\@currentlabel{_#2_}
是因为您想要使用标签和下划线而不是章节编号进行交叉引用。
我创建了配置文件macros.4ht
,其中放了一些重新定义:
% hooks definitions
\NewConfigure{SecParts}{3}
\renewcommand\SecParts[2]{\a:SecParts#1\b:SecParts#2\c:SecParts}
\NewConfigure{Pnum}{2}
\def\pnum{\addtocounter{Paras}{1}\noindent\a:Pnum\arabic{Paras}\b:Pnum}
\Configure{SecParts}{}{\HCode{<span class="SecLabel">[}}{\HCode{]</span>}}
\Configure{Pnum}{\HCode{<span class="pnum">}}{\HCode{</span>}}
\Css{
body{
width:60em;
margin-left:4em;
font-family:monospace;
}}
\Css{
h1, h2, h3{font-size:1em;font-weight:normal;}
}
\Css{h2 br{display:none}}
\Css{
.titlemark{display:inline-block;margin-right:.5em;margin-left:0;}
}
\Css{
p{
text-align:justify;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
}
\Css{.pnum{
display:block; width: 2em; margin-left:-2em; float:left;
}}
\Css{.SecLabel{
display:block;
float:right;
}
}
\Hinput{macros.sty}
我使用\NewConfigure
命令创建了可配置的钩子,然后使用\renewcommand
命令重新定义了需要放置这些钩子的位置。我认为您有许多宏,您应该使用类似的重新定义来插入 html 标记,因此您可以这样做。
该文件的主要部分是影响外观的 CSS 定义。