PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sonderzeichen im Code



AS2E
28-02-2011, 18:19
Hallo zusammen,

ich versuche gerade einen Block Bash-Code in ein Latex-Dokument einzufügen aber das ist leichter gesagt als getan. Gemacht habe ich das ganze wie folgt.


\begin{lstlisting}[language=bash,caption=Parameter prüfen]{}
\end{lstlisting}

Das Problem sind nun vor allem die echo-Ausgaben. Alles was zwischen Anführungs- und Schlusszeichen steht ("Text") wird einfach weggelassen und die Umlaute (ä,ö,ü) werden durch Leerzeichen ersetzt. Ich muss hier aber betonen, dass ich diese Probleme nur in diesen Codeblöcken habe. Im normalen Fliesstext funktioniert das alles bestens.

Wie kann man das den beheben? Es kann doch kaum sein, dass ich in meinem Code überall noch Escape-Zeichen setzen muss. Deshalb markiere ich den Berech ja als Code.

Vielen Dank.

Schweinebacke
28-02-2011, 18:52
Bezüglich der Anführungszeichen kann ich nur vermuten, dass es keine normalen Anführungszeichen sind, sondern falsch eingegebene Sonderzeichen. Bezüglich der Umlaute sei darauf hingewiesen, dass listings nicht mit utf8 umgehen kann. Abhilfe bringt listingsutf8 (http://www.ctan.org/pkg/listingsutf8).

Wenn das alles nichts bringt: http://www.minimalbeispiel.de.

AS2E
28-02-2011, 20:48
Wie finde ich den heraus ob die Anführungszeichen "falsch" (sind übrigens die gleichen Anführungszeichen wie im Code) sind? Ich hab einfach auf die zugehörige Taste auf der Tastatur gedrückt.

Gibts für die Umlaute auch eine andere Möglichkeit die einzugeben? Hab die nur an zwei oder drei Stellen im Code und könnte die daher sehr schnell anpassen. Soweit ich das sehe habe ich nämlich alle listings-Pakete installiert und trotzdem funktionierts nicht.

rstuby
01-03-2011, 06:14
Da kann dir wohl so abstrakt keiner mehr helfen. Wir brauchen ein Minimalbeispiel, das wir ausprobieren können. Also ein Dokument, das mit \documentclass beginnt und mit \end{document} endet, keine externen Dateien benutzt, die wir nicht haben, und das dein Problem demonstriert und möglichst nichts enthält, was mit dem Problem nichts zu tun hat (also keine 20 Pakete im Vorspann, ohne die das Problem noch genauso auftritt, und keine 20 Seiten Text ohne Listings...).

Schweinebacke
01-03-2011, 07:05
Soweit ich das sehe habe ich nämlich alle listings-Pakete installiert und trotzdem funktionierts nicht.
Was heißt das? Es gibt meines Wissens nur ein listings-Paket. Bei Installation mehrerer Pakete mit demselben Namen gibt es am Ende deshalb Probleme? Verwendest Du das von mir verlinkte listingsutf8 oder nicht? Passen die Umlaute im Code zu der deklarierten Eingabecodierung? Welche Eingabecodierung wird von Dir verwendet? Wo ist das vollständige Minimalbeispiel für das ich extra ebenfalls einen Link angegeben hatte?

AS2E
01-03-2011, 17:40
Das heisst das ich unter Windows arbeite und dort gibt es für die Paketinstallation ja diesen "Package Manager" und gemäss diesem ist das Paket "listings" installiert. Hab noch nie irgendwelche Pakete ohne den Package Manager installiert. Auf jeden Fall habe ich gestern, nachdem du meintest es könnte an einem fehlenden Paket liegen noch die Pakete "listings-ext" und "listing" installiert in der Hoffnung, dass das was bringt. Hat aber nichts verändert.

Für die Umlaute habe ich jetzt eine funktionierende Lösung gefunden. Da nur in diesem Codeteil Umlaute vorkommen reicht das vollkommen aus.

Ich hab nun auch versucht ein Minimalbeispiel zu erstellen und siehe da, in einem neu erstellen Dokument gibts keine Probleme. Hab dann mal ein bisschen getestet und festgestellt, dass Probleme auftauchen, wenn ich den "lstset"-Bereich in mein Dokument einfüge, den ein Kollege von mir vorbereitet hat. In das Dokument kommt später neben Bash- auch Clojure-Code. Deshalb stimmt die Sprache nicht überein.

Das Fehlerbild ist übrigens nun etwas anders. Jetzt scheinen ziemlich willkürlich die Wörter "red" und "white" in den Code eingefügt zu werden. Habs aber auch mit meinen Dokumentklassen getestet und da funktionierts ebenfalls solange ich den lstset-Bereich nicht einfüge.

Hier mein Minimalbeispiel:

\documentclass{article}
\usepackage{listings}
\begin{document}

\lstset{
language=Clojure,
basicstyle=\footnotesize\ttfamily,
numbers=left,
numberstyle=\tiny,
stepnumber=2,
numbersep=5pt,
tabsize=2,
extendedchars=true,
breaklines=true,
keywordstyle=\color{red}, frame=b,
stringstyle=\color{white}\ttfamily,
showspaces=false,
showtabs=false,
xleftmargin=17pt,
framexleftmargin=17pt,
framexrightmargin=5pt,
framexbottommargin=4pt,
showstringspaces=false
}

\begin{lstlisting}[language=bash,caption=irgendwas,literate=%
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1]{}
for tfile in /opt/data/$lang.* ] ; do
if [ -f $tfile ] ; then
echo '
Bestehende Dateien überschreiben? Geben Sie "Y" ein um die bestehenden Datei zu löschen oder drücken Sie Enter um neuen Daten in die bestehenden Dateien zu schreiben!'
read answer
if [ "$answer" = y -o "$answer" = Y ] ; then
rm /opt/data/$lang.*
echo 'Dateien wurden gelöscht!'
break
else
echo 'Daten werden in bestehende Dateien geschrieben!'
break
fi
fi
done
\end{lstlisting}
\end{document}

Schweinebacke
01-03-2011, 18:10
Die Verwendung von \color setzt voraus, dass man ein Farbpaket wie color oder xcolor verwendet. Die Verwendung von 8-Bit-Zeichen wie Umlaute setzt voraus, dass man die Eingabecodierung deklariert. Die Verwendung von utf8-Umlauten mit listings geht einwandfrei wenn man wie von mir mehrfach erwähnt das Paket listingsutf8 verwendet.

Da Du meine Hinweise weitgehend in den Wind schlägst, sehe ich mich leider unfähig, Dir weiter Hilfe zu bieten. Ich entschuldige mich für diese meine Unzulänglichkeit.

AS2E
01-03-2011, 18:52
Tut mir leid aber ich hab einfach keine Ahnung von Latex. Ich würde eigentlich viel lieber mit Word arbeiten wenn mich nicht mein Kollege dazu überredet hätte Latex zu verwenden, da das ja viel einfach sei. Jetzt ist er in den Ferien und ich müsste weiterarbeiten und hab keine Ahnung was ich überhaupt mache.

Also, mit dem Paket "color" ist nun schonmal das Fehlerbild gleich. Jetzt ist einfach alles leer zwischen den Anführungszeichen. Was die Umlaute betrifft magst du recht haben, wahrscheinlich würde das mit diesem Paket funktionieren aber ich hab noch sowas installiert und will das ganze im Moment einfach so schnell wie möglich zum laufen kriegen. Meine Lösung ist da vielleicht weniger schön aber es funktioniert und dabei würde ich es gerne belassen.

Ich wär nur froh wenn jemand einen Tipp geben könnte was die Anführungszeichen betrifft.

rais
01-03-2011, 23:18
Moin moin,


Ich wär nur froh wenn jemand einen Tipp geben könnte was die Anführungszeichen betrifft.
an Deiner Stelle würde ich in der listings-Doku (texdoc listings) nachschauen, was die Dinge, die Dein Kollege da per \lstset setzt, eigentlich treiben ...
Oder ich würde versuchen herauszufinden, welche(r) dieser \lstset-Einträge sich für das von Dir beobachtete Verhalten verantwortlich zeigt, um dann gezielt in der listings-Doku nach eben dieser/n Einstellung(en) zu suchen.

D.h. eigentlich würde ich mich fragen, was wohl passiert, wenn ich versuche weißen Text auf weißem Hintergrund darzustellen :rolleyes:

MfG

u_fischer
02-03-2011, 11:44
Ich würde eigentlich viel lieber mit Word arbeiten

Dann tue es. Wenn du nur mit Widerwillen mit LaTeX arbeitest, wird dich jedes kleine Problem (und du hast hier nur ein kleines Problem, und das wird nicht das einzige sein) aus der Bahn werfen und viel Zeit und Nerven kosten. Kämpfe besser mit einem Program, wo dir der Kampf Spaß macht.


Jetzt ist einfach alles leer zwischen den Anführungszeichen.

Weißen Text auf weißen Hintergrund sieht mal halt nicht so gut.

rstuby
02-03-2011, 13:45
Also was die Farbe angeht, kannst du dir ja nach den Beiträgen von Ulrike und Rainer schon denken, dass du \color{white} durch etwas anderes ersetzen solltest, damit etwas zu sehen ist. Folgende Farben sind bei xcolor ohne Zusatzoptionen und ohne eigene Definintioen verügbar: red , green , blue , cyan , magenta ,
yellow , black , white , darkgray , gray , lightgray .


Was das Paket angeht, würde ich mal ausprobieren, einfach anstatt \usepackage{listings} in den Vorspann zu schreiben: \usepackage{listingsutf8}. Es könnte sein, dass dein Editor und dein LaTeX (Miktex, richtig?) intelligent genug zusammenarbeiten und richtig eingestellt sind, um fehlende Pakete von selber nachzuinstalleren oder in einem Popup-Fenster nachzufragen, ob dies geschehen soll. Letzteres (das Nachfragen) funktionert allerdings nicht, falls dein Editor TeXnicCenter ist.

rstuby
02-03-2011, 13:53
Oder du machst den Hintergrund farbig, um die weiße Schrift sehen zu konnen. Dazu fügst du zu deinen lstset-Angaben hinzu:

backgroundcolor=\color{yellow},

u_fischer
02-03-2011, 13:57
listingsutf8 ist im Oberdiek-Paket und von daher mit hoher Wahrscheinlichkeit schon installiert. Es funktioniert aber nur mit \lstinputlisting.

Die literate-Lösung finde ich daher eigentlich hier geeigneter - besonders weil sie unabhängig von der Dateikodierung funktioniert. Es ist nämlich gar nicht klar, ob die Datei wirklich utf8 kodiert ist. Die Umlaute verschwinden (ohne literate) auch bei einer 8bit-kodierten Datei, da \usepackage[T1]{fontenc} fehlt.

rstuby
02-03-2011, 14:04
\usepackage[T1]{fontenc} in die Präambel zu schreiben, nachdem du erwähnt hast, dass es hilfreich wäre, dürfte ja wohl das kleinere Problem sein... Wenn es danach schon funktioniert mit dem Umlauten, hat AS2E eben Glück gehabt :-)

u_fischer
02-03-2011, 14:44
\usepackage[T1]{fontenc} ist sicherlich vernünftig. Allerdings noch vernünftiger wäre ein korrekter inputenc-Aufruf.