4

So, I'm trying to write lines of code explaining to new students where to find different files and directories. Because the classname changes on a yearly basis I set up a \newcommand to make changing every class-name in the document at the same time possible. This is what my document looks like:

\documentclass[11pt]{paper}

\usepackage[formats]{listings}
\usepackage{hyperref, xcolor, graphicx}

\lstnewenvironment{lst}                             %Code-environment
{\lstset{basicstyle=\ttfamily\color{magenta},escapechar={§}}}{}

\newcommand{\class}{g2014048}                       %Classname

\begin{document}

\begin{lst}
$ cd /proj/§\class§
\end{lst}

\end{document}

When rendered into a .pdf it looks good, everything on one line:

$ cd /proj/g2014048

But when I later use the htlatex-command in terminal to create a .html every "\class" gets a linebreak ahead if it:

$ cd /proj/

g2014048

Because it is a single line of code, I would like it to be that in the .html as well. How can I do this?

5

This is clearly a bug in tex4ht support for listings. When you look at generated code, you can see:

 <!--l. 13--><pre class="listings"><span 
class="cmtt-10x-x-109"> </span><br /><span class="label"><a 
 id="x1-2r1"></a></span><span 
class="cmtt-10x-x-109">$</span><span 
class="cmtt-10x-x-109"> </span><span 
class="cmtt-10x-x-109">cd</span><span 
class="cmtt-10x-x-109"> </span><span 
class="cmtt-10x-x-109">/</span><span 
class="cmtt-10x-x-109">proj</span><span 
class="cmtt-10x-x-109">/</span></pre><!--l. 14--><pre class="listings"><span 
class="cmtt-10x-x-109">g2014048</span></pre><!--l. 14--><pre class="listings">
   <span 
class="cmtt-10x-x-109"> </span><br /><span class="label"><a 
 id="x1-3r2"></a></span></pre>

from this code it is obvious that escape to LaTeX caused end tag insertion and starting of new <pre> element. Same situation happened after escaped code, so now three <pre> elements instead of one were used, and visual result is broken line.

From inspection of listings source code and tex4ht configuration for it, it seems that macros redefined by tex4ht for insertion of tags is used not only at start and end of listings environment, but also sometimes inside the environment, like in the case of escaped LaTeX code.

I modified tex4ht configuration file for listings, listings.4ht, so the tags should be inserted only at the real beginning and end of listings environment. This needs some testing with real world samples and then we should report this at tex4ht bug database:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% listings.4ht                          2014-06-16-21:04 %
% Copyright (C) 2001--2009       Eitan M. Gurari         %
%               2009--2014       TeX Users Group         %
%                                                        %
% This work may be distributed and/or modified under the %
% conditions of the LaTeX Project Public License, either %
% version 1.3c of this license or (at your option) any   %
% later version. The latest version of this license is   %
% in                                                     %
%   http://www.latex-project.org/lppl.txt                %
% and version 1.3c or later is part of all distributions %
% of LaTeX version 2005/12/01 or later.                  %
%                                                        %
% This work has the LPPL maintenance status "maintained".%
%                                                        %
% This Current Maintainer of this work                   %
% is the TeX4ht Project <tex4ht@tug.org>.                %
%                                                        %
% If you modify this program your changing its signature %
% with a directive of the following form will be         %
% appreciated.                                           %
%            \message{signature}                         %
%                                                        %
%                                        tex4ht@tug.org  %
%                             http://www.tug.org/tex4ht  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\immediate\write-1{version 2014-06-16-21:04}
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.

\newif\iflstnest
\append:defII\lst@EnterMode{%
  \iflstnest\typeout{lstnest true}\else\typeout{lstnest false}
  \ifx \lsthk:EveryLine\:UnDef
     \let\lsthk:EveryLine\lsthk@EveryLine
  \fi
  \ifx \lsthk:EveryLine\lsthk@EveryLine
      \pend:def\lsthk@EveryLine{\c:listings
             \def\dd:listings{\d:listings\let\dd:listings\empty}}%
  \fi
  \append:def\lsthk@EveryPar{\dd:listings}%
    \edef\:xtemp{Listing mode:\the\lst@mode}
    \expandafter\typeout\expandafter{\:xtemp}%
  \a:listings\fi\bgroup
  \Configure{$}{}{}{}%
  \aftergroup\lst:EnterMode}
\def\lst:EnterMode{\iflstnest\else\b:listings\fi\egroup\typeout{linsings end}}
\NewConfigure{listings}{4}
\let\dd:listings=\empty
\append:defI\lst@Init{\csname a:listings-init\endcsname\typeout{listings init}\global\lstnesttrue}
\pend:def\lst@DeInit{\csname b:listings-init\endcsname\typeout{listings init end}\global\lstnestfalse}
\NewConfigure{listings-init}{2}
\lst@AddToHook{TextStyle}{%
   \Configure{listings}{}{}{}{}%
   \a:lstinline \bgroup \aftergroup\b:lstinline\aftergroup\egroup
  }
\NewConfigure{lstinline}{2}
\pend:defI\lst@MakeCaption{%
  \let\lst:addcontentsline\addcontentsline
  \def\addcontentsline{\gHAdvance\TitleCount by 1
                       \lst:addcontentsline}%
}
\append:defI\lst@MakeCaption{%
  \let\addcontentsline\lst:addcontentsline
}
\def\lst@NewLine{%
   \ifx\lst@OutputBox\@gobble\else \the\everypar \fi
   \global\advance\lst@newlines\m@ne
   \lst@newlinetrue
}%
\def\lst@InputListing#1{%
    \begingroup
      \lsthk@PreSet \gdef\lst@intname{#1}%
      \expandafter\lstset\expandafter{\lst@set}%
      \lsthk@DisplayStyle
      \catcode\active=\active
      \a:lstinputlisting \lst@Init\relax \let\lst@gobble\z@
      \lst@SkipToFirst
      \lst@ifprint \def\lst@next{\input{#1}}%
             \else \let\lst@next\@empty \fi
      \lst@next \lst@DeInit
      \b:lstinputlisting
    \endgroup}
\NewConfigure{lstinputlisting}{2}
\def\lst@Kern#1{%
   \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
   \global\advance\lst@currlwidth \wd\z@
   \tmp:dim=#1 \let\:tempc=\empty
   \loop \ifdim \tmp:dim>\a:lst@Kern
      \advance \tmp:dim by -\a:lst@Kern
      \advance \tmp:dim by -\b:lst@Kern
      \append:def\:tempc{\:nbsp}%
   \repeat
   \setbox\z@\hbox{{\lst@currstyle{\:tempc}}}%
   \lst@OutputBox\z@}
\NewConfigure{lst@Kern}{2}
\Configure{lst@Kern}{0.499em}{0.1em}
\def\lst@outputspace{\:nbsp}

\HLet\lst@frameInit=\empty
\HLet\lst@frameExit=\empty

\Hinput{listings}
\endinput

Your example now looks fine:

  <!--l. 13--><pre class="listings"><span 
class="cmtt-10x-x-109"> </span><br /><span class="label"><a 
 id="x1-2r1"></a></span><span 
class="cmtt-10x-x-109">$</span><span 
class="cmtt-10x-x-109"> </span><span 
class="cmtt-10x-x-109">cd</span><span 
class="cmtt-10x-x-109"> </span><span 
class="cmtt-10x-x-109">/</span><span 
class="cmtt-10x-x-109">proj</span><span 
class="cmtt-10x-x-109">/</span><span 
class="cmtt-10x-x-109">g2014048</span>
   <a 
 id="x1-3r2"></a></pre>
|improve this answer|||||
  • Wow great! I can't say I really understood what your solution actually did, but it worked so I'm happy :) Thanks! – Rikardny Jul 10 '14 at 11:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.