2

I include some listings into my LaTeX code using

\lstinputlisting[inputencoding=utf8/latin1]{listing.txt}

The listings are taken from files which are encoded using UTF-8 (with BOM). The LaTeX file is encoded using UTF-8 without BOM.

When compiling my code with XeLaTeX to PDF everything works fine, however when compiling it with tex4ht I get the string  at the begin of the actual listing (which seems to come from the BOM character U+FEFF).

Is there a way to suppress it?

This is my MWE:

\documentclass{article}
\usepackage[utf8]{inputenc} %Files are encoded using UTF-8
\usepackage[T1]{fontenc} %The text uses German umlauts
\usepackage{listingsutf8}       
\lstset{literate=%
    {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
    {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
    {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
    {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
    {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
    {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
    {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1
    {ã}{{\~a}}1 {å}{{\r a}}1 {Å}{{\r A}}1
    {ø}{{\o}}1 {€}{{\EUR}}1 {£}{{\pounds}}1
    {~}{{\textasciitilde}}1
}
\begin{document}
\lstinputlisting[language={},inputencoding=utf8/latin1]{listing.txt}
\end{document}

1 Answer 1

2

Probably simplest way would be to remove the BOM from the included files. The other solution is to use Unicode TeX engine, which means LuaTeX as tex4ht doesn't support XeTeX at the moment. There are two possible solutions to get your file working with tex4ht and LuaTeX:

replace inputenc with luainputenc:

\documentclass{article}
\usepackage[utf8]{luainputenc} %Files are encoded using UTF-8
\usepackage[T1]{fontenc} %The text uses German umlauts
\usepackage{listingsutf8}       
\lstset{literate=%
    {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
    {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
    {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
    {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
    {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
    {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
    {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1
    {ã}{{\~a}}1 {å}{{\r a}}1 {Å}{{\r A}}1
    {ø}{{\o}}1 {€}{{\EUR}}1 {£}{{\pounds}}1
    {~}{{\textasciitilde}}1
}
\begin{document}
\lstinputlisting[language={},inputencoding=utf8/latin1]{listing.txt}
\end{document}

Use a trick to get fontspec package working with tex4ht. This way, it works with tex4ht, LuaTeX and even XeTeX:

\documentclass{article}
% \usepackage[utf8]{luainputenc} %Files are encoded using UTF-8
% \usepackage[T1]{fontenc} %The text uses German umlauts
\usepackage{alternative4ht}
\altusepackage{fontspec}
% \usepackage{listingsutf8}       
\usepackage{listings}
\lstset{literate=%
    {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
    {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
    {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
    {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
    {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
    {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
    {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1
    {ã}{{\~a}}1 {å}{{\r a}}1 {Å}{{\r A}}1
    {ø}{{\o}}1 {€}{{\EUR}}1 {£}{{\pounds}}1
    {~}{{\textasciitilde}}1
}
\begin{document}
\lstinputlisting[language={},inputencoding=utf8/latin1]{listing.txt}
\end{document}

In both cases compile it with

make4ht -ul filename

the result:

enter image description here

1
  • Thank you @michal.h21 , it works now! Please note that I edited my question and removed the spurious lines \begin{lstlisting}[language={}] and \end{lstlisting}which were left from another example. You could edit your answer and remove them too.
    – Mik
    Commented Aug 4, 2016 at 9:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .