[Tex/LaTex] Strange “Undefined control sequence” message

biblatexerrorslistings

I am using biblatex for the first time. When I do quick compile on the document it compiles no problem, after that I run the BibTeX command and it also works. After that I try a quick compile again in order to generate the pdf with the bibliography but I get these type of errors for all the cited sources on my .bib file:

! Undefined control sequence.
<to be read again> \edef \lbx@tempa {{wen-mei}z
                                               w.hwu}
l.90 \end{document}

This is my main LaTeX file

% El documento está pensado para ser impreso en hojas por ambos lados (twoside)
% openright causa que los capítulos empiecen en hoja impar
\documentclass[12pt,letterpaper,twoside,openright]{report}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc} %Uso de tildes si desarrolla en Linux
\usepackage[backend=bibtex]{biblatex}
\addbibresource{mybib_test.bib}
\usepackage{listings}

\begin{document}

\pagenumbering{arabic}
\include{capitulo_01_test}  % 1. Introducción


% ------------ Comienza la bibliografí­a ---------------
\printbibliography
\end{document}

This is the second tex file the one named capitulo_01_test.tex

\cite{brasnett2007} \cite{chapman2007} \cite{duda1972} \cite{kirk2010} \cite{vanginkel2004}. 

When I delete \usepackage{listings} from my main tex file the problem goes away. But why? and I need the listings package.

This is my bibtex file

% This file was created with JabRef 2.6.
% Encoding: UTF-8

@INPROCEEDINGS{brasnett2007,
    author = {P. Brasnett and M. Z. Bober},
    title = {Robust Visual Identifier Using the Trace Transform},
    booktitle = {Visual Information Engineering Conference (VIE 2007)},
    year = {2007},
    pages = {25-27}
}

@BOOK{chapman2007,
  title = {Using OpenMP: Portable Shared Memory Parallel Programming},
  year = {2007},
  author = { Barbara Chapman and Gabriele Jost and Ruud van van der Pas},
  publisher = "The MIT Press",
  address   = "Massachusetts, Estados Unidos"
}

@ARTICLE{duda1972,
  author = {Richard O. Duda and Peter E. Hart},
  title = {Use of the Hough Transformation to Detect Lines and Curves in Pictures},
  journal = {Communications of the ACM},
  year = {1972},
  volume  = "15",
  number  = "1",
  pages   = "11--15"
}

@BOOK{kirk2010,
  title = {Programming Massively Parallel Processors: A Hands-on Approach},
  year = {2010},
  author = {David B. Kirk and {Wen-mei} W. Hwu},
  publisher = "Morgan Kaufmann",
  address   = "Massachusetts, Estados Unidos"
}

@TECHREPORT{vanginkel2004,
  author = {Michael van Ginkel and Cris L. Luengo Hendriks and Lucas J. van Vliet},
  title = {A short introduction to the Radon and Hough transforms and how they relate to each other},
  institution = {Quantitative Imaging Group, Delft University of Technology},
  year = {2004},
  address  = {Delft, Holanda},
}

I heard it could be the "-" between Wen-mei for example but I changed it several times and it didn't work.

When I was just using bibtex I didn't have this problem.

Note (Edit): I edited the question to follow cfr's suggestion and I figured out that if I delete the \usepackage{listings} part on my main .tex file the compilation has no problem. Any idea why?

Best Answer

It's a bug in listings that leaves behind it a wrong \lccode for ~. I couldn't find the reason why the bug appears only when Spanish is the language, but the problem is surely in that bad setting.

You solve your issue by adding

\lccode`~=0

after

\usepackage{listings}

In other words, the preamble should be

\documentclass[12pt,letterpaper,twoside,openright]{report}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc} %Uso de tildes si desarrolla en Linux
\usepackage[backend=bibtex]{biblatex}
\addbibresource{mybib_test.bib}
\usepackage{listings}
\lccode`~=0

The wrong code in listings.sty is the definition of \lst@CCPut

884 \def\lst@CCPut#1#2{%
885     \ifnum#2=\z@
886         \expandafter\@gobbletwo
887     \else
888         \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCPut@~{#1/}}%
889     \fi
890     \lst@CCPut#1}

where line 888 should be

\begingroup\lccode`\~=#2\lccode`\/=#2\lowercase{\endgroup\lst@CCPut@~{#1/}}%

There's also another wrong setting left behind by listings that should be corrected; in \lst@RestoreCatcodes the wrong assignment

\lccode`\/=`\/

is performed, which should be removed or countermanded by

\lccode`\/=0

just like the one for ~.