Seite 1 von 1

Syntaxhervorhebung von LaTeX-Code in Listing-Umgebung

Verfasst: Di 13. Nov 2012, 16:36
von SqilliS
Hallo zusammen,

was ich bereits herausgefunden habe:

Die Macro-Namen werden durch die Auswahl von
language=[LaTeX]TeX
erkannt.

Dabei wird jedoch das "\" vor den Macro-Namen nicht mit hervorgehoben.
Dies habe ich mit
texcsstyle=*\color{blue}
korrigiert.

Befehle wie "\includegraphics" müssen scheinbar von Hand hinzugefügt werden:
morekeywords={\includegraphics}

Das Problem ist, zusätzlich Befehle wie "\\" oder "$" hervorzuheben.

Wer kann mir helfen?

VfG SqilliS


Minimalbeispiel:
\documentclass[
   12pt,                % Schriftgroesse 12pt
   paper=a4,            % Layout fuer Din A4
   german               % deutsche Sprache, global
   ]{scrreprt}    


\usepackage[T1]{fontenc}         	% T1-kodierte Schriften, korrekte Trennmuster für Worte mit Umlauten
\usepackage[utf8]{inputenc}    	  % Input-Encodung: utf-8 -> -> Achtung: Beim >speichern unter...< Dialog auf ausgewählte Zeichencodierung achten (ANSI=[latin1])
\usepackage[ngerman]{babel}     % neue Rechtschreibung
\usepackage{lmodern}							% Schriftart an PDF-Erstellung anpassen und Suche darin (Umlauteproblem)


%%====Quellcodeauflistungen============%
\usepackage{listings}
\usepackage{color}
 

\lstset{ % Standarddefinitionen
	language=[LaTeX]TeX,	          % Programmiersprache
  %%% %%%
  %texcsstyle=*\color{blue},				% Hervorhebung der LaTeX-Befehle
	keywordstyle=\color{green},          % keyword style
	morekeywords={\includegraphics},	% Weitere Schlüsselwörter
	emph={figure}, emphstyle=\color{cyan} 	% Vervorhebung spezieller Befehle	
}
%============================%


\begin{document}


\begin{lstlisting}				

\begin{figure}
	\centering
		\includegraphics[width=1.00\textwidth]{IrgendeinBild}
	\caption{Testbeschriftung}
	\label{fig:IrgendeinBild}
\end{figure}

Ein Satz mit $Inline-Mathe$ und einem\\ 
Zeilenumbruch

\end{lstlisting}


\end{document}
Ergebnis:
Bild

Verfasst: Di 13. Nov 2012, 17:26
von bloodworks
Hi ich sehe 2 Möglichkeiten: entweder du verwendest keywordprefix und texcsstyle oder du arbeistest mit liertate. Mit letzterem ist alles umsetzbar, du muss aber die keyword sebest definieren (irgendwie wird durch literate der shlash abgetrennt.) Ich würde es also so machen:
\lstset{ % Standarddefinitionen 
    language=[LaTeX]TeX,             % Programmiersprache 
        % Hervorhebung der LaTeX-Befehle 
      % keywordsprefix=\\,
    keywordstyle=\color{green},    
     %  texcsstyle=*\color{green},  
       stringstyle=\color{blue},   
%identifierstyle=\color{red},
% keyword style 
keywords={includegraphics,caption, begin, end, label},   % Weitere Schlüsselwörter 
    emph={figure}, emphstyle=\color{cyan},   
    literate={ $ }{ {{\color{red!50!black}\$} } }1% 
    {\\\\}{ {{\textcolor{blue}{\textbackslash\textbackslash}}}}1
     {\\}{ {{\textcolor{green}{\textbackslash}}}}1
     } 
PS: width=1.00\textwidth == width=\textwidth ;)

Verfasst: Fr 16. Nov 2012, 18:08
von SqilliS
Danke bloodworks für deine Hinweise :D

Die Befehle keywordprefix, texcsstyle und literate beeinflussen sich wirklich erheblich.

Nach längerem probieren habe ich eine Kombination gefunden, die "funktioniert":
%%====Quellcodeauflistungen============%
\usepackage{listings}
\usepackage{color}
 
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{dkgreen}{rgb}{0,0.6,0}

\lstset{
	language=[LaTeX]TeX,	          
  %%% %%%
	keywordsprefix={\\}, 						% Schlüsselwort-Kürzel
	keywordstyle=\color{blue},      % Schlüsselwort-Hervorhebung
	morekeywords={\\},							% Backslash als Schlüsselwort
	%%% %%%
	commentstyle=\color{gray},			% Kommentar-Hervorhebung
	emph={figure}, emphstyle=\color{cyan}, 	% Vervorhebung spezieller Befehle	
	%%% %%%
	morestring=[d][\color{dkgreen}]{\$}, % Inline-Mathe hervorheben
	%%% %%%
	literate=%	
{\\}	{ {\textcolor{blue}{\textbackslash}} }1% Backslash und
{\\\\}{ {{\textcolor{blue}{\textbackslash\textbackslash}}} }2% Doppel-Backslash hervorheben
}%
%============================%

Das Problem dieser Lösung ist jedoch, dass nach einem doppelten Backslash (manchmal) durch den 'keywordsprefix' das listings-Packet davon ausgeht, dass das folgende Wort hervorzuheben ist. (Auch, wenn dieses in einer neuen Zeile steht.)

Daher habe ich nicht 'keywordsprefix' verwendet, sondern 'texcsstyle'.
Durch diese Option wird, wie du bereits beschrieben hast, Backslashes "weggeschnitten", wodurch 'literate' nicht richtig arbeitet. Das Problem habe ich umgangen, indem ich den durch 'literate' definierten Zeichen einen '*' vorangestellt habe. Dieser muss dadurch allerdings im gelisteten Code hinzugefügt werden.

Das lauffähige Beispiel, das der Darstellung in TeXnicCenter in etwa entspricht, sieht wie folgt aus. (Ich habe noch die Hervorhebung von Inline-Mathe ergänzt ($a=b$).

\documentclass[
   12pt,                % Schriftgroesse 12pt
   paper=a4,            % Layout fuer Din A4
	parskip=half,
   german               % deutsche Sprache, global
   ]{scrreprt}    

\usepackage[T1]{fontenc}         	% T1-kodierte Schriften, korrekte Trennmuster für Worte mit Umlauten
\usepackage[utf8]{inputenc}    	  % Input-Encodung: utf-8 -> -> Achtung: Beim >speichern unter...< Dialog auf ausgewählte Zeichencodierung achten (ANSI=[latin1])
\usepackage[ngerman]{babel}      	% neue Rechtschreibung
\usepackage{lmodern}							% Schriftart an PDF-Erstellung anpassen und Suche darin (Umlauteproblem)


%%====Quellcodeauflistungen============%
\usepackage{listings}
\usepackage{color}
 
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{dkgreen}{rgb}{0,0.6,0}

\lstset{
	language=[LaTeX]TeX,
	commentstyle=\color{gray},			% Kommentar-Hervorhebung
	texcsstyle=*[1]\color{blue},		% LaTeX-Kommando-Hervorhebung
	moretexcs=[1]{includegraphics},
	%%% %%%
	emph={figure}, emphstyle=\color{cyan}, 	% Vervorhebung spezieller Befehle	
	%%% %%%
	morestring=[d][\color{dkgreen}]{\$}, % Inline-Mathe hervorheben
	%%% %%%
	literate=	%
	{ *\\\\ }{  { \textcolor{blue}{\textbackslash\textbackslash} }  }2 % Spezieller Befehl (*\\) für die Hervorhebung des doppelten Backslashs
}%
%============================%


\begin{document}

\begin{lstlisting}				

\begin{figure} % Kommentar
	\centering
		\includegraphics[width=1.00\textwidth]{IrgendeinBild}
	\caption{Testbeschriftung}
	\label{fig:IrgendeinBild}
\end{figure}

Ein Satz mit $Inline-Mathe$ und einem*\\
Zeilenumbruch usw.*\\

\end{lstlisting}


\end{document}
Das Ergebnis sieht wie folgt aus:
Bild


Bitte ergänzt mögliche Verbesserungen oder eine Möglichkeit, bei der im gelisteten LaTeX-Code Zeilenumbrüche nicht durch '*\\' ersetzt werden müssen.


VG SqilliS

Ergänzung &

Verfasst: Mi 21. Nov 2012, 10:54
von SqilliS
Die Hervorhebung des &-Zeichens in Tabellen oder in der align-Umgebung kann durch das Definieren z. B. der Farbe mauve
\definecolor{mauve}{rgb}{0.58,0,0.82}
und durch folgenden weiteren Eintrag in literate erreicht werden:
\lstset{literate= %
%...
{\&}{ {\textcolor{mauve}{\&}}  }1
}

Verfasst: Mi 21. Nov 2012, 11:03
von bloodworks
Hi mit pygments http://pygments.org/ kann man sehr anspruchsvolle Highlighting Anfroderungen umsetzten. Das zugehörige LaTeX paket heißt minted.
texdoc minted

Verfasst: Mi 21. Nov 2012, 15:53
von SqilliS
Die Nutzung des minted-Paketes wäre traumhaft.

Hab es auch probiert ans Laufen zu bekommen.
Leider ist die Installation von Pygments unter Windows nicht trivial und hab es nicht hinbekommen.

Ich glaube der Punkt, an dem ich gescheitert bin ist, easy_install für die Python-Kommandozeile verfügbar zu machen, um
easy_install Pygments
zu nutzen.


Die Schritte die hoffentlich schon mal richtig waren sind:
- Python installieren (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi)
- In TeXnicCenter: Ausgabeprofile definieren->"Argumente, die an den Compiler übergeben werden sollen": "-shell-escape" hinzugefügt.

TeXnicCenter wirft mir jetzt natürlich die Fehlermeldung:
Package minted Error: You must have 'pygmentize' install to use this package.


Minimalbeispiel:
\documentclass{article}

\usepackage{minted}

\begin{document}

\begin{minted}{c}
int main() {
printf("hello, world");
return 0;
}
\end{minted}

\end{document}

Verfasst: Mi 21. Nov 2012, 16:22
von bloodworks
Ähm ja du hast wohl pyments nicht installiert oder es wird nicht gefunden.

Ich kann dir da leider auch net viel helfen, ausser eben den Rat ein vernünfgiges OS zu vernweden;) Ich denke der Installpath von pygments ist recht wichtig. Ich kenne keinen Weg den minted mitzuteilen, deshalb empfehle ich den zu wählen, den easy_install vorschlägt.

Kleiner Helfer

Verfasst: Mi 21. Nov 2012, 18:34
von localghost
Besorge dir mal die setuptools. Damit sollte die Installation unter Windows via »easy_install« laut Anleitung von minted problemlos möglich sein.


Thorsten

Verfasst: Mo 26. Nov 2012, 15:39
von SqilliS
Hab das Minted-Paket jetzt unter Win7 und TexnicCenter laufen und es mach wirklich ein schönen Syntax-Highlighting.

Hatte etwas rumprobiert, hoffe es ist vollständig:

1. Python installieren (32-bit-Version): http://www.python.org/download/

2. setuptools installieren, um easy_install nutzen zu können: http://pypi.python.org/pypi/setuptools#files

3. Pygments mit easy_install installieren: Mit der Windows-Kommandazeile (cmd) und nicht der Python-Kommandozeile eingeben:
easy_install Pygments
(evtl. "c:\Python27\Scripts\" der Windows-Systemvariable PATH hinzufügen, damit es gefunden wird)

4. In TeXnicCenter Argumente für pdflatex hinzufügen: Ausgabeprofile definieren->"Argumente, die an den Compiler übergeben werden sollen": "-shell-escape" hinzugefügt.


Minimalbeispiel:
\documentclass[
   12pt,                % Schriftgroesse 12pt
   paper=a4,            % Layout fuer Din A4
	parskip=half,
   german               % deutsche Sprache, global
   ]{scrreprt}    

\usepackage[T1]{fontenc}         	% T1-kodierte Schriften, korrekte Trennmuster für Worte mit Umlauten
\usepackage[utf8]{inputenc}    	  % Input-Encodung: utf-8 -> -> Achtung: Beim >speichern unter...< Dialog auf ausgewählte Zeichencodierung achten (ANSI=[latin1])
\usepackage[ngerman]{babel}      	% neue Rechtschreibung
\usepackage{lmodern}							% Schriftart an PDF-Erstellung anpassen und Suche darin (Umlauteproblem)


\usepackage{minted}
\usemintedstyle{autumn}

% weitere Styles
%\usemintedstyle{monokai}
%\usemintedstyle{manni}
%\usemintedstyle{rrt}
%\usemintedstyle{perldoc}
%\usemintedstyle{borland}
%\usemintedstyle{colorful}
%\usemintedstyle{default}
%\usemintedstyle{murphy}
%\usemintedstyle{vs}
%\usemintedstyle{trac}
%\usemintedstyle{tango}
%\usemintedstyle{fruity}
%\usemintedstyle{bw}
%\usemintedstyle{emacs}
%\usemintedstyle{vim}
%\usemintedstyle{pastie}
%\usemintedstyle{friendly}
%\usemintedstyle{native}

\begin{document}

\begin{minted}[tabsize=4,				% Anzahl Leerzeichen mit denen ein Tab-Einzug ersetzt wird
               frame=lines,
               framesep=2mm]{latex}

\begin{figure} % Kommentar
	\centering
		\includegraphics[width=1.00\textwidth]{IrgendeinBild}
	\caption{Testbeschriftung}
	\label{fig:IrgendeinBild}
\end{figure}

Ein Satz mit $Inline-Mathe$ und einem\\
Zeilenumbruch usw.\\
\end{minted}

\end{document}
Ergebnis:
Bild

Es ist leider kein Style dabei, der dem des TeXnicCenters entspricht.
Wer dies geschafft hat oder weitere Anregungen geben kann, bitte posten.

VG SqilliS