如何仅在一个地方修改 tex4ht 的现有环境?

如何仅在一个地方修改 tex4ht 的现有环境?

对于 tex4ht,我需要修改枚举列表环境,但只在一个地方修改,而不是全局修改。

我有理由认为这个特定的枚举列表不换行。即每个都不\item应该换行。

我知道如何做到,但要全局性地做到。也就是说,现在我的所有枚举列表都受到影响,这不是我想要的。下面是一个如何全局更改的示例

\documentclass[12pt,notitlepage]{article}
\begin{document} 
\ifdefined\HCode
\Css{body{
      margin:  0 auto;  /* center */
      outline: 1px solid \#D3D3D3;
      max-width:500px;
      }}
\fi 

\begin{enumerate}
\item some long text here, some long text here, some long text here, some long text here, some long text here, some long text here
\item some long text here
\end{enumerate}

\end{document}

然后创建这个 my.cfg 文件

\Preamble{xhtml,p-width}
\ConfigureEnv{enumerate}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="nowaprEnumerate">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}
{}
{}

\Css{.nowaprEnumerate {white-space: nowrap;}}
\begin{document}

\EndPreamble

现在我使用

 make4ht -ulm default -a debug -c my.cfg main.tex "mathjax,htm,nostyle"

它给

在此处输入图片描述

这正是我想要的。但正如我所说,这现在影响了我文档中的每个枚举列表。我不知道如何让它影响特定的枚举列表而不影响其他枚举列表。

我认为我需要创建新的环境。所以我将上面的代码改为以下内容

\documentclass[12pt,notitlepage]{article}
\begin{document} 
\ifdefined\HCode
\Css{body{
      margin:  0 auto;  /* center */
      outline: 1px solid \#D3D3D3;
      max-width:500px;
      }}
\fi 

%I only want this enumeration to not wrap
\ifdefined\HCode 
\begin{nowaprEnumerate}
\else 
\begin{enumerate}
\fi 
\item some long text here, some long text here, some long text here, some long text here, some long text here, some long text here
\item some long text here
\ifdefined\HCode 
\end{nowaprEnumerate}
\else 
\end{enumerate}

\end{document}

并将.cfg 更改为以下内容

\Preamble{xhtml,p-width}
\ConfigureEnv{nowaprEnumerate} %CHANGED THIS LINE
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="nowaprEnumerate">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}
{}
{}

\Css{.nowaprEnumerate {white-space: nowrap;}}
\begin{document}

\EndPreamble

再次编译时,tex4ht 给出错误

 LaTeX Error: Environment nowaprEnumerate undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.60 \begin{nowaprEnumerate}

我理解错误。没有nowaprEnumerate

但我现在不知道该怎么做。我想我需要一些其他技巧来像上面那样修改枚举环境,但同时给它一个新名字,并在文档中需要修改枚举的地方使用这个新名字,而不是在我想要正常枚举时使用。

但不知道如何做到这一点。

有什么建议如何实现上述功能?即更改枚举列表环境,仅适用于特定位置的 tex4ht?显然我需要为 tex4ht 提供新的环境才能做到这一点。

TL 2023

答案1

您只需要声明您的nowrapEnumerate使用\newenvironment。由于 LaTeX 无法识别它,否则您将收到错误。这样,您也消除了文档中条件语句的必要性。

您的文档可能如下所示:

\documentclass[12pt,notitlepage]{article}
\newenvironment{nowaprEnumerate}{\begin{enumerate}}{\end{enumerate}}
\begin{document} 
%I only want this enumeration to not wrap
\begin{nowaprEnumerate}
\item some long text here, some long text here, some long text here, some long text here, some long text here, some long text here
\item some long text here
\end{nowaprEnumerate}

\end{document}

这是配置文件:

\Preamble{xhtml,p-width}
\ConfigureEnv{nowaprEnumerate} %CHANGED THIS LINE
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="nowaprEnumerate">}}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}
{}
{}


\Css{.nowaprEnumerate {white-space: nowrap;}}

\Css{body{
      margin:  0 auto;  /* center */
      outline: 1px solid \#D3D3D3;
      max-width:500px;
      }}

\begin{document}

\EndPreamble

结果:

在此处输入图片描述

相关内容