在 Tex4HT 配置中设置计数器以在 html 中使用

在 Tex4HT 配置中设置计数器以在 html 中使用

我想在某些文本中添加可折叠面板标题,为此我需要定义一些 ID,但我无法使用,\thesubsubsection因为它带有点(例如 2.0.1)。所以我想使用一个简单的计数器,例如:

\newcounter{index}
\setcounter{index}{1}
\newcommand{\ppindex}{\arabic{index}\stepcounter{index}} 

我想在我的 htlatex 配置文件中使用类似的行为,因此\Index扩展到这个计数器:

\ConfigureEnv{lstlisting}{\HCode{\Hnewline
<div class="panel-group" id="accordion\Index">\Hnewline
  <div class="panel panel-default">\Hnewline
    <div class="panel-heading">\Hnewline
      <h4 class="panel-title">\Hnewline
        <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion\Index" href="#collapse\Index">\Hnewline
          Click to expand\Hnewline
        </a>\Hnewline
      </h4>\Hnewline
    </div>\Hnewline
    <div id="collapse\Index" class="panel-collapse collapse">\Hnewline
      <div class="panel-body">\Hnewline
                <pre class="prettyprint"><p>\Hnewline}}
{\HCode{</p></pre>\Hnewline
      </div>\Hnewline
    </div>\Hnewline
  </div>\Hnewline
</div>\Hnewline}}{}{}

我原本想使用\thesection,或者\thesubsubsection,但我在生成的 html 中得到了错误的数字。即使将其重新定义为 \arabic{subsubsection} ,\thesubsubsection 也给出零。

感谢@michal.h21,我想让我的代码片段可折叠。

折叠代码

单击时展开

扩展代码

感谢您和\CurSecHaddr宏,我能够将我的对象更改id为以下内容:

id="accordionx1-80001",所以现在 laTeX 会为lstlisting我添加的每一部分生成有效的 id。

这是我的环境配置lstlisting

\ConfigureEnv{lstlisting}{\HCode{
<div class="panel-group" id="accordion\CurSecHaddr">\Hnewline
  <div class="panel panel-default">\Hnewline
    <a class="accordion-toggle" data-toggle="collapse" data-parent="\#accordion\CurSecHaddr" href="\#collapse\CurSecHaddr">\Hnewline
     <div class="panel-heading">\Hnewline
      <h4 class="panel-title">\Hnewline
                    <FONT style="font-size:15px" COLOR="\#FE2E2E">View Code</FONT> <span class="pull-right clickable"><i class="glyphicon glyphicon-chevron-up"></i></span>\Hnewline
                    </h4>\Hnewline
    </div>\Hnewline
        </a>\Hnewline
    <div id="collapse\CurSecHaddr" class="panel-collapse collapse">\Hnewline
      <div class="panel-body">\Hnewline
                <pre class="prettyprint"><p>\Hnewline}}
{\HCode{</p></pre>\Hnewline
      </div>\Hnewline
    </div>\Hnewline
  </div>\Hnewline
</div>\Hnewline}}{}{}

它仍然需要完成一些工作,但我打算使用后编译脚本来完成这项工作,因为我需要删除一些生成的部分。

当然,不仅仅是这些代码,您还需要添加一些JS代码才能使其glyphicon工作。

网站已建好http://claudiordgz.github.io/GoodrichTamassiaGoldwasser/,代码也已上传,https://github.com/claudiordgz/GoodrichTamassiaGoldwasser/tree/gh-pages以防有人想看。它仍处于非常丑陋的 alpha 状态,但至少我可以开始推送热门内容了。

答案1

id当前切片命令存储在\CurSecHaddr宏中,它可能以以下方式显示:

x1-130006.7

这看起来很神秘,但实际上x只是前缀,1是当前文件的编号(因为运行中可能会生成多个文件tex4ht),13000意味着这是第 13 个分段命令,6.7是小节编号。

我认为你不应该使用当前部分 ID 来构造一个新的部分 ID,每次listings使用时更新自定义计数器会更好,我认为:

\newcount\ppindex
\def\theppindex{\the\ppindex}
\def\steppindex{\global\advance\ppindex by 1\relax}

对于处理链接和 ID 的内容,最好使用\Link命令而不是直接使用<a>元素。对于你的情况来说,这并不重要,因为你正在链接到父元素,但我还是会展示它。

该命令的使用方法如下:

\Link[baseurl attributes]{target id}{current id}link text\EndLink

baseurl 仅对于链接到外部页面有用,它是为来自同一文档的页面自动创建的。

可以创建新的命令,该命令将使用交叉引用机制,但会产生与以下不同的元素<a>

\LinkCommand\Accordion{div,href,id}

现在我们可以使用

\Accordion[ class="panel-group"]{}{accordion\theppindex}...\EndAccordion

 <div 
  id="accordion1" class="panel-group"  >...</div>

生成。同样,对于第二个链接,使用:

\Link[ class="accordion-toggle" data-toggle="collapse" data-parent="\#accordion\theppindex"]{collapse\theppindex}{}

<a 
href="#collapse1" class="accordion-toggle" data-toggle="collapse" data-parent="#accordion1" > 

被生产。

完整示例:

\Preamble{xhtml,info}
\newcount\ppindex
\LinkCommand\Accordion{div,href,id}
\def\theppindex{\the\ppindex}
\def\steppindex{\global\advance\ppindex by 1\relax}
\ConfigureEnv{lstlisting}{%
\ifvmode\IgnorePar\fi\EndP%
\steppindex%
%<div class="panel-group" id="accordion\CurSecHaddr">\Hnewline
\Accordion[ class="panel-group"]{}{accordion\theppindex}%
\HCode{%
  <div class="panel panel-default">\Hnewline}
    %<a class="accordion-toggle" data-toggle="collapse" data-parent="\#accordion\the\ppindex" href="\#collapse\CurSecHaddr">\Hnewline}
    \Link[ class="accordion-toggle" data-toggle="collapse" data-parent="\#accordion\theppindex"]{collapse\theppindex}{}\HCode{\Hnewline
     <div class="panel-heading">\Hnewline
      <h4 class="panel-title">\Hnewline%
    <FONT style="font-size:15px" COLOR="\#FE2E2E">View Code</FONT> <span class="pull-right clickable"><i class="glyphicon glyphicon-chevron-up"></i></span>%                    
    </h4>\Hnewline%
    </div>\Hnewline}%
    \EndLink\HCode{\Hnewline%
    <div id="collapse\CurSecHaddr" class="panel-collapse collapse">\Hnewline
      <div class="panel-body">%
  %<pre class="prettyprint"><p>}}%
  }}
{\IgnorePar\HCode{%
      </div>\Hnewline
    </div>\Hnewline
  </div>\Hnewline}
\EndAccordion%
%</div>
}{}{}
\begin{document}
\EndPreamble

请注意,链接命令必须在 之外使用\HCode。我还对段落进行了一些修改,删除了多余的<pre>元素和一些\Hnewlines,以减少垂直空白。

相关内容