Syntaxhervorhebung von LaTeX-Code in Listing-Umgebung

Schriftbild, Absätze und Auflistungen einstellen


SqilliS
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 13. Nov 2012, 12:32

Syntaxhervorhebung von LaTeX-Code in Listing-Umgebung

Beitrag 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

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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 ;)
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


SqilliS
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 13. Nov 2012, 12:32

Beitrag 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

SqilliS
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 13. Nov 2012, 12:32

Ergänzung &

Beitrag 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
}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


SqilliS
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 13. Nov 2012, 12:32

Beitrag 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}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag 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.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
localghost
Forum-Meister
Forum-Meister
Beiträge: 825
Registriert: Di 8. Jul 2008, 15:40
Wohnort: Braunschweig

Kleiner Helfer

Beitrag 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
TeX und LaTeX, Fragen und Antworten – TeXwelt

¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
² System: openSUSE 13.1 (Linux 3.11.6), TeX Live 2013, TeXworks 0.5 (r1349)
³ Lernt gerade TeX (und versucht, es zu verstehen).

SqilliS
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 13. Nov 2012, 12:32

Beitrag 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

Antworten