我是 tex 新手,使用 tex4ht 转换“.cfg”文件。我需要配置 600 多个元素。因此我需要在 cfg 中添加所有 600 个元素。
例子:
样本.tex:
\documentclass{article}
\usepackage[english,czech]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{epub}
\begin{document}
\HalfTitle{Machine Learners}
\Title{Title}
\end{document}
电子书
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{epub}%
\usepackage{amsmath,amssymb}
\usepackage{endnotes}
\usepackage{epsfig}
\usepackage{graphicx}
\usepackage{latexsym}
\usepackage{multicol}
\usepackage{framed}%
\usepackage{glossaries}%
\usepackage[tex4ht]{hyperref}%
\def\toprule{\hline}%
\def\botrule{\hline}%
\def\midrule{\hline}%
\usepackage{listings}%
\usepackage{pgffor}% for the \foreach command
\newcommand{\HalfTitle}[1]{%
\Large#1%
}%
\newcommand{\Title}[1]{\Large#1}%
\endinput
epub配置文件
\Preamble{xhtml,fn-in,epub}
\RequirePackage{pgffor}% for the \foreach command
\renewcommand\ConfigurePar[1]{
\foreach \para/\cls in {#1}{
\Configure{\para}{\HCode{<p class="\cls">}}{\HCode{</p>\Hnewline}}%
}
}
\begin{document}
\ConfigurePar{
HalfTitle/TPHT,
booktitle/TPT,
}
\EndPreamble
电子书
\newcommand\ConfigurePar[1]{
\foreach \paa/\cls in {#1}{
\NewConfigure{\paa}{2}
\let\tmp:\paa\\paa
\renewcommand\\paa[1]{\a:\paa\tmp:\paa#1\b:\paa}
\Configure{\paa}{\HCode{<p class="\cls">}}{\HCode{</p>\Hnewline}}%
}
}
我使用以下命令进行转换
htlatex sample "epub,xhtml" " -cunihft" "-cvalidate -p"
是否可以通过将(“halftitle”、“TPHT”)和(“booktitle”、“TPT”)作为参数传递到任何外部文件中并在 CFG 文件中使用参数值来最小化配置代码。例如:
\Configure{ARG1}{\IgnorePar \EndP\HCode{<p class="ARG2">}}{\HCode{</p>\Hnewline}}%
征求您的建议。
提前感谢 Christober
答案1
编辑
我会以不同的方式执行此操作。我不会使用,而是\Configure
简单地重新定义 cfg 文件中的命令。以前,我使用\foreach
来自前列腺素但相反,似乎最好\forcsvlist
使用电子工具箱包。然后你可以做你想做的事(我认为)
\newcommand\ConfigurePar[1]{\realConfigurePar#1!}
\def\realConfigurePar#1/#2!{% extract #1 up to / and then #2 up to !
\csdef{#1}##1{\HCode{<p class="#2">}##1\HCode{</p>\Hnewline}}%
}
\forcsvlist\ConfigurePar{
HalfTitle/TPHT,
Title/TPT
}
因此,\forcsvlist
将逗号分隔列表的每个元素传递给\ConfigurePar
。为了分离命令名称和类名称,\ConfigurePar
将所有内容提供给\realConfigurePar
,然后重新定义相应的 LaTeX 命令,以便它生成所需的 html。
详细信息:使用 cfg 文件:
\Preamble{xhtml,fn-in,epub}
\RequirePackage{etoolbox}% for the \forsvlist command
\newcommand\ConfigurePar[1]{\realConfigurePar#1!}
\def\realConfigurePar#1/#2!{%
\csdef{#1}##1{\HCode{<p class="#2">}##1\HCode{</p>\Hnewline}}%
}
\begin{document}
\forcsvlist\ConfigurePar{
HalfTitle/TPHT,
Title/TPT
}
\EndPreamble
和 latex 文件一起
\documentclass{article}
\usepackage[english,czech]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\ProvidesPackage{epub}%
\usepackage{amsmath,amssymb}
\usepackage{endnotes}
\usepackage{epsfig}
\usepackage{graphicx}
\usepackage{latexsym}
\usepackage{multicol}
\usepackage{framed}%
\usepackage{glossaries}%
\usepackage[tex4ht]{hyperref}%
\def\toprule{\hline}%
\def\botrule{\hline}%
\def\midrule{\hline}%
\usepackage{listings}%
\usepackage{pgffor}% for the \foreach command
\newcommand{\HalfTitle}[1]{%
\Large#1%
}%
\newcommand{\Title}[1]{\Large#1}%
\begin{document}
\HalfTitle{Machine Learners}
\Title{Title}
\end{document}
生成 html 文件:
<?xml version="1.0" encoding="iso-8859-2" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
<html xml:lang="cs" xmlns="http://www.w3.org/1999/xhtml"
>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<!-- html,xhtml,fn-in,epub -->
<meta name="src" content="s.tex" />
<link rel="stylesheet" type="text/css" href="s.css" />
</head><body
>
<!--l. 26--><p class="noindent" ><p class="TPHT">Machine Learners</p>
<p class="TPT ">Title</p>
</p>
</body></html>
特别是,Machine Learners
和Title
被包裹在具有预期类的段落标签中。另外,我认为 4ht 文件不是必需的。
顺便说一句,我建议使用,而不是直接使用 htlatex制作4小时包。为了生成上面的 html 文件,我使用了以下命令:
make4ht -c epub.cfg sample.tex