Seite 1 von 2

C++ Code: Listings gibt UTF8-Fehlermeldung aus, Lösung?

Verfasst: Sa 16. Mai 2015, 13:59
von scaer93
Hallo,

ich habe hier ein Problem. Ich möchte mit dem Paket listings/listingsutf8 Programm-Code in ein Dokument packen. Leider bekomme ich immer Fehlermeldungen mit pdflatex. Bei XeLaTeX ist alles fehlerfrei.

Fehlermeldungen:

- Package inputenc Error: Unicode char \u8:√\expandafter not set up for use with LaTeX.

- Package utf8x Error: MalformedUTF-8sequence

-Package inputenc Error: Keyboard character used is undefined
(inputenc) in inputencoding `utf8'.


Was muss ich machen, damit das Listing auch mit pdflatex geht?



Der Programm-Code wurde gekürzt und ergibt keinen Sinn mehr. Als Minimalbeispiel reicht es:
\documentclass[a4paper,11pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{xcolor}

\usepackage{tgtermes}
\usepackage{amsmath,amssymb,amsthm,textcomp}

\usepackage{listings}

%%%----------%%%----------%%%----------%%%----------%%%

\begin{document}



\begin{lstlisting}
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdlib>
using namespace std;

        gamma=1+(E[n]/ma); // Erklärung siehe Protokoll
        beta=pow((1-(1/(gamma*gamma))),0.5);
        Ac=(vorN*6*4)/(12.011*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ic)-beta*beta); // Erklärung siehe Protokoll
        Ah=(vorN*1*4)/(1.008*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ih)-beta*beta);
        Ao=(vorN*8*4)/(15.999*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Io)-beta*beta); // Ac, Ah und Ao sind in MeV*cm^2/g
        dE=0.6250*Ac+0.0420*Ah+0.3331*Ao; // in MeV*cm^2/g
        dE=rhoMylar*dE*dx; // in MeV
        E[n+1]=E[n]-dE; // in MeV
        n++; // Laufindex wird um 1 erhöht
        R=dx*n; // Berechnung Reichweite in cm
        cout << R << "  " << dE << "  " << E[n-1] << "  " << E[n] << 
\end{lstlisting}
\end{document}
Grüße

Verfasst: Sa 16. Mai 2015, 14:10
von Johannes_B
Weisde, irgendwie, ich versteh das nich?

Wie kann denn LaTeX dir sagen, dass das Wurzelzeichen nicht definiert ist, wenn es gar nicht im Code ist? Für soetwas sind doch Minimalbeispiele da?
\begin{filecontents*}{\jobname.test}
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdlib>
using namespace std;

gamma=1+(E[n]/ma); // Erklärung siehe Protokoll
beta=pow((1-(1/(gamma*gamma))),0.5);
Ac=(vorN*6*4)/(12.011*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ic)-beta*beta);
// Erklärung siehe Protokoll
Ah=(vorN*1*4)/(1.008*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ih)-beta*beta);
Ao=(vorN*8*4)/(15.999*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Io)-beta*beta);
// Ac, Ah und Ao sind in MeV*cm^2/g
dE=0.6250*Ac+0.0420*Ah+0.3331*Ao; // in MeV*cm^2/g
dE=rhoMylar*dE*dx; // in MeV
E[n+1]=E[n]-dE; // in MeV
n++; // Laufindex wird um 1 erhöht
R=dx*n; // Berechnung Reichweite in cm
cout << R << " " << dE << " " << E[n-1] << " " << E[n] <<
\end{filecontents*}

\documentclass[a4paper,11pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{listingsutf8}
\lstset{ inputencoding=utf8/latin1 }

\begin{document}



\lstinputlisting{\jobname.test}
\end{document} 

Verfasst: So 17. Mai 2015, 08:40
von scaer93
Zunächst heißt es "Weißt du". Trotz Forum sollte eine gewisse Grammatik und Ausdruck beibehalten werden.

Deine Kritik kann ich nicht nachvollziehen, da bei mir genau mit diesem Minimalbeispiel die obigen Fehlermeldungen kommen. Woher soll ich bitte wissen, woher die Wurzel da kommt.

Da ich aber vermute, dass die Wurzel in der Fehlermeldung nichts mit dem eigentlichen Wurzel-Zeichen der Tastatur bzw. des Befehls "sqrt" zu tun hat, ist es klar, dass im Text keine Wurzel kommt.

Verfasst: So 17. Mai 2015, 09:51
von Johannes_B
Erhältst du mit dem Beispiel, welches ich oben gepostet habe den beschriebenen Fehler? Klick mal auf Öffne in Online Editor.


Übrigens stimm ich dir mit der Grammatik voll und ganz zu, aber es gibt so Momente im Support ... in denen ich mir meine eigene Signatur durchlesen muss. Durchatmen, Pause machen.

Verfasst: So 17. Mai 2015, 10:59
von scaer93
Naja, ich war auch nicht ganz fair.

Danke für die Antwort. Und ja, leider bekomme ich immer noch die gleichen Fehlermeldungen mit deinem Beispiel.

Verfasst: So 17. Mai 2015, 12:06
von Johannes_B
Zeig mal die Log-Datei, die mein Beispiel oben bei dir produziert.

Verfasst: So 17. Mai 2015, 12:37
von u_fischer
Johannes_B hat geschrieben: Wie kann denn LaTeX dir sagen, dass das Wurzelzeichen nicht definiert ist, wenn es gar nicht im Code ist?
Nun, die Anzeige im Terminal (oder in der log-Datei) bei utf8-Fehlern zeigt ja nicht immer den betroffenen Buchstaben -- das macht es ja manchmal etwas mühsam den Schuldigen zu finden. Ich bekomme einen Fehler wegen des "ä" und mit literate klappt es dann:
\documentclass[a4paper,11pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{xcolor}

\usepackage{tgtermes}
\usepackage{amsmath,amssymb,amsthm,textcomp}

\usepackage{listings}
\lstset{extendedchars=true,literate=%
    {Ä}{{"A}}1%
    {Ö}{{"O}}1%
    {Ü}{{"U}}1%
    {ä}{{"a}}1%
    {ö}{{"o}}1%
    {ü}{{"u}}1%
    {ß}{{\ss}}1%
}


%%%----------%%%----------%%%----------%%%----------%%%

\begin{document}



\begin{lstlisting}
#include <iostream>
#include <cmath>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdlib>
using namespace std;

        gamma=1+(E[n]/ma); // Erklärung siehe Protokoll
        beta=pow((1-(1/(gamma*gamma))),0.5);
        Ac=(vorN*6*4)/(12.011*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ic)-beta*beta); // Erklärung siehe Protokoll
        Ah=(vorN*1*4)/(1.008*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Ih)-beta*beta);
        Ao=(vorN*8*4)/(15.999*beta*beta)*(log((2*me*beta*gamma*beta*gamma)/Io)-beta*beta); // Ac, Ah und Ao sind in MeV*cm^2/g
        dE=0.6250*Ac+0.0420*Ah+0.3331*Ao; // in MeV*cm^2/g
        dE=rhoMylar*dE*dx; // in MeV
        E[n+1]=E[n]-dE; // in MeV
        n++; // Laufindex wird um 1 erhöht
        R=dx*n; // Berechnung Reichweite in cm
        cout << R << "  " << dE << "  " << E[n-1] << "  " << E[n] <<
\end{lstlisting}
\end{document}

Verfasst: So 17. Mai 2015, 14:44
von scaer93
Dann werde ich es mit dem literate probieren.

Was empfehlt ihr eigentlich? pdflatex oder xelatex?

Verfasst: So 17. Mai 2015, 14:47
von Johannes_B
scaer93 hat geschrieben:Was empfehlt ihr eigentlich? pdflatex oder xelatex?
Kommt ganz drauf an, was du willst oder brauchst. Irgendwo haben alle; XeLaTeX, LuaLaTeX und pdfLaTeX; Vorteile und Nachteile untereinander.

Verfasst: So 17. Mai 2015, 14:53
von scaer93
Naja, Formeln, Listings, Verzeichnisse (Lit, Abb ...) und Umlaute brauche ich immer.

Was ist dann also die beste Wahl?