我们能否简化 tex4ht 中 CFG 文件中的 \Configure 编码

我们能否简化 tex4ht 中 CFG 文件中的 \Configure 编码

我是 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 LearnersTitle被包裹在具有预期类的段落标签中。另外,我认为 4ht 文件不是必需的。

顺便说一句,我建议使用,而不是直接使用 htlatex制作4小时包。为了生成上面的 html 文件,我使用了以下命令:

make4ht  -c epub.cfg sample.tex  

相关内容