使用 tex4ht 编译的章节标题手动创建的后缀

使用 tex4ht 编译的章节标题手动创建的后缀

xelatex我正在建立一个看起来是这个样子的文档纯文本文件外观使用tex4ht。我制作了一个html文档,然后生成了一个可以复制到记事本中的很棒的文档。

为此,我手动创建了一些格式结构,如伪下划线标题:

TITLE HERE AND UNDERLINED WITH REPEATED SYMBOLS
-----------------------------------------------
Text of the document goes here
No bold formatting or anything is preserved from the html file
So I am not to concerned with customizing the formatting of the html output

如下例所示,我使用HCode检测块在版本之间切换。

我非常确定我应该接近使用复制宏/新命令插入符号,但我无法htlatex保留后缀。我不太了解 CSS 文件何时接管或为什么这会成为一个问题,但我尝试了几种不同的方法,但在下面的 MWE 中,我只保留(并注释掉)了我认为最接近的那些。

\documentclass[10pt]{article}

\usepackage{stringstrings}
\usepackage{xparse}
\usepackage{titlesec}                   %custom \section

    \ifdefined\HCode
        % appearance of sectioning commands should be taken care of in a custom cfg file for the tex4ht compile process
        %http://tex.stackexchange.com/questions/147370/change-chapter-formatting-with-tex4ht-and-memoir
        \makeatletter
            \renewcommand\section{\@startsection {section}{1}{\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {-1em}%
                {\normalfont\scshape\raggedright}%
                %\newline\TextUnderline{section}%
                }
        \makeatother
        %\titleformat{\section}{\normalfont\bfseries\raggedright}{Section \thesection, suffix }{0em}{}

    \else
        \titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]%
        \titlespacing{\section}{0pt}{3pt}{3pt}% 
    \fi


\ExplSyntaxOn
    \cs_new_eq:NN \EngBIRDreplication \prg_replicate:nn
\ExplSyntaxOff

    \NewDocumentCommand\TextUnderline{ O{1} }%
    {%
        %http://tex.stackexchange.com/questions/276083/is-int-step-inlinennnn-inserting-something-after-it-finished
        \EngBIRDreplication{\stringlength{#1}}{-}%\hspace*{0.5em}}%
    }
    \NewDocumentCommand\spacers{ O{1} }%
    {%
        %http://tex.stackexchange.com/questions/276083/is-int-step-inlinennnn-inserting-something-after-it-finished
        \EngBIRDreplication{#1}{~}%\hspace*{0.5em}}%
    }   

%--------------------BEGIN DOCUMENT----------------------
\begin{document}

\pagestyle{empty} % non-numbered pages

\section{Hello World}


\clearpage      
\end{document}

答案1

LaTeX 命令在序言之后重新定义,因此如果你\section在序言中重新定义,它将被覆盖。tex4ht无论如何,你应该使用配置来处理这些内容。看看这个较旧的答案如何配置它以生成类似 wiki 的标记。

对于您的特定请求,它有点复杂,因为您必须计算部分中的字符,包括编号。我毫不怀疑它可以从 TeX 中处理,但在我看来,使用一些更高级的工具来修改 HTML 更有效。简单的解决方案是使用 JavaScript 和 HTML DOM。

将此文件另存为underlinesec.js

var undersecns = (function(){
  var getLength = function(el){
    // get text content of the element
    var text = el.textContent;
    // collapse spaces
    text = text.replace(/[ ]+/g," ");
    return text.length;
  };
  var repeat = function(str, count){
    var t = "";
    for(i=0;i<count;++i) t = t + str;
    return t
  };
  var makeEl = function(text){
    var div = document.createElement("div");
    div.setAttribute("class","under");
    var t = document.createTextNode(text);
    div.appendChild(t);
    return div
  };
  var addUnder =  function(selector, ch){
    var el = document.querySelectorAll(selector);
    for(var i=0;i< el.length; ++i){
      var item = el[i];
      var length = getLength(item);
      // make string with repeated hyphen
      var newstr = repeat(ch, length);
      var div = makeEl(newstr);
      item.appendChild(div);
    }

  };
  document.addEventListener("DOMContentLoaded", function(event) {
    // add commands for all section levels
    addUnder(".sectionHead", "-");
  });
})();

它将处理所有部分(它们具有sectionHead" class), count characters of the section title and add string of相同的长度)。

您必须将其插入到您的文档中,您可以使用此.cfg文件执行此操作:

\Preamble{xhtml}
\Configure{@HEAD}{%
\HCode{<script type="text/javascript" src="underlinesec.js"></script>\Hnewline}
}
\begin{document}
\EndPreamble

浏览器中的结果:

enter image description here

由于使用了比例字体,所以不适合,但下划线长度是正确的

相关内容