lstlisting: Kombination aus literate (replace) und moredelim

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: lstlisting: Kombination aus literate (replace) und moredelim

von iTob » So 26. Dez 2010, 14:32

Hallo,


ich hoffe, ihr habe alle Weihnachten gut überstanden!
Mir ist eben noch eine dritte Lösung – eher ein zweiter Wokraround – eingefallen, ich verwende einfach zwei Zeichen, eines (<,>), dass mir die spitzen Klammern liefert und ein Anderes (*), dass für die Formatierung sorgt.

Hier das entsprechend ergänzte Beispiel:
\documentclass{article}
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{xcolor} 
\usepackage{beramono,textcomp} 
\usepackage{listings} 
\lstloadlanguages{[LaTeX]TeX} 
\lstset{% 
   language=[LaTeX]TeX, 
   basicstyle=\ttfamily, 
   tabsize=3, 
   flexiblecolumns,
%   escapechar={*}, % Lösung 2
   literate={<}{\textlangle}{1} {>}{\textrangle}{1},% Lösung 1 und 3
   morecomment=**[s][\bfseries\color{blue}]{[}{]},% bei Lösung 3 mit **, sonst mit * 
   morecomment=*[s][\bfseries]{\{}{\}},
%   moredelim=**[is][\normalfont\itshape]{<}{>},% Lösung 1
   moredelim=**[is][\rmfamily\mdseries]{*}{*},% Lösung 3
   morecomment=**[l][\color{red}\normalfont\itshape]{\%},   
} 

\newcommand{\marg}[1]{% Lösung 2
   \textit{$\langle$#1$\rangle$}%
}
\newcommand{\oarg}[1]{% Lösung 2
   \textcolor{blue}{\textit{$\langle$#1$\rangle$}}%
}


\begin{document} 

%Lösung 1
%\begin{lstlisting} 
%   \usepackage{<Paketname>} 
%\end{lstlisting} 

%Lösung 2
%\begin{lstlisting} 
%   \usepackage[*\oarg{Paketoptionen}*]{*\marg{Paketname}*} 
%\end{lstlisting}

Lösung 3
\begin{lstlisting} 
   \usepackage[*<opt. Argument>*]{*<Paketname>*}% Kommentarzeile
\end{lstlisting} 

\end{document}

Würde mich aber dennoch über Vorschläge freuen, wie ich mit nur < und > das gewünschte Ergebnis erzielen kann.


Viele Grüße und
schonmal
guten Rutsch!
Tobi

von iTob » Fr 24. Dez 2010, 00:58

Nabend und danke Herbert,

aber das Hilft mir leider wenig. Ich wollte ja gerne, dass es automatisch geht. Das Problem – in meinem Beispiel – ist offensichtlich dass, zunächst die Ersetzungen ausgeführt werden (also < durch $\langle$) und anschließend nach den delimitern (< und >) gesucht wird, die dann natürlich nicht mehr gefunden werden. Wenn ich jetzt aber ganz naiv versuche $\langle$ als Delimiter anzugeben, bekomme ich den Fehler
[...]

! Improper alphabetic constant.
<to be read again>
\langle
l.19 }
A one-character control sequence belongs after a ` mark.
So I'm essentially inserting \0 here.
! Missing $ inserted.

[...]
Das geht aber leider nicht.

Gäbe es denn eventuell ein anderes Paket, das meine Wünsche erfüllen könnte.


Außerdem hat mich dein Vorschlag noch auf einen Workaround gebracht. (Lösung 2)
\documentclass{article} 
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{xcolor} 
\usepackage{beramono} 
\usepackage{listings} 
\lstloadlanguages{[LaTeX]TeX} 
\lstset{% 
   language=[LaTeX]TeX, 
   basicstyle=\ttfamily, 
   tabsize=3, 
   flexiblecolumns,
   escapechar={*}, % Lösung 2
%   literate={<}{$\langle$}{1} {>}{$\rangle$}{1},% Lösung 1
   morecomment=*[s][\bfseries\color{blue}]{[}{]}, 
   morecomment=*[s][\bfseries]{\{}{\}},
%   moredelim=**[is][\normalfont\itshape]{<}{>},% Lösung 1
   morecomment=**[l][\color{red}\normalfont\slshape]{\%},
} 

\newcommand{\marg}[1]{% Lösung 2
   {\normalfont\textit{$\langle$#1$\rangle$}}%
}


\begin{document} 

%Lösung 1
%\begin{lstlisting} 
%   \usepackage{<Paketname>} 
%\end{lstlisting} 

Lösung 2
\begin{lstlisting} 
   \usepackage{*\marg{Paketname}*} 
\end{lstlisting} 

\end{document}

Viele Grüße!
Tobi

von CrazyHorse » Do 23. Dez 2010, 17:21

iTob hat geschrieben: Ich müsste ja nur irgendwie die Reihenfolge von delim und literate steuern können oder aber bei delim das mit literate ersetze Zeichen ansprechen. Letzteres ist mir aber bisher nicht gelungen :(
eine bessere weiß ich auch nicht:
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{beramono}
\usepackage{listings}
\lstloadlanguages{[LaTeX]TeX}
\lstset{%
   language=[LaTeX]TeX,
   basicstyle=\ttfamily,
   tabsize=3,
   flexiblecolumns,
   literate={<}{$\langle$}{1} {>}{$\rangle$}{1},% evtl. auskommentieren
   morecomment=*[s][\bfseries\color{blue}]{[}{]},
   morecomment=*[s][\bfseries]{\{}{\}},
   morecomment=**[l][\color{red}\normalfont\itshape]{\%},
  escapeinside={<}{>}
}
   
\begin{document}
so sieht es aus -- je nachdem ob man die literate-Zeile
auskommentiert
\begin{lstlisting}
   \usepackage{<\it Paketname>}
\end{lstlisting}

\end{document}
Herbert

von iTob » Do 23. Dez 2010, 13:07

Hat keiner eine Idee?


Ich müsste ja nur irgendwie die Reihenfolge von delim und literate steuern können oder aber bei delim das mit literate ersetze Zeichen ansprechen. Letzteres ist mir aber bisher nicht gelungen :(



Viele Grüße
Tobi

lstlisting: Kombination aus literate (replace) und moredelim

von iTob » So 19. Dez 2010, 17:17

Hallo,


ich suche nach einer Lösung, in – via lstlisting gesetztem – LaTeX-Code, die Argumente von Befehlen automatisch Kursiv und in spitzen Klammern zu setzten.
Hier zunächst das Beispiel:
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{beramono}
\usepackage{listings}
\lstloadlanguages{[LaTeX]TeX}
\lstset{%
	language=[LaTeX]TeX,
	basicstyle=\ttfamily,
	tabsize=3,
	flexiblecolumns,
	literate={<}{$\langle$}{1} {>}{$\rangle$}{1},% evtl. auskommentieren
	morecomment=*[s][\bfseries\color{blue}]{[}{]},
	morecomment=*[s][\bfseries]{\{}{\}},
	moredelim=**[s][\normalfont\itshape]{<}{>},
	morecomment=**[l][\color{red}\normalfont\itshape]{\%},
}
	
\begin{document}
so sieht es aus -- je nachdem ob man die literate-Zeile
auskommentiert
\begin{lstlisting}
	\usepackage{<Paketname>}
\end{lstlisting}


Aber so soll es aussehen \texttt{\textbackslash \textbf{usepackage\{}{\normalfont\itshape$\langle$Paketname$\rangle$}\texttt{\}}}
\end{document}
Dabei kann ich jetzt entweder dafür sorgen, dass das Argument kursiv wird und in Größer-Kleiner-Zeichen gesetzt wird, dazu nutze ich dann die moredelim-Funktion oder aber ich ersetze die Größer-Kleiner-Zeichen durch richtige spitze Klammern (l/rangle oder text(l/r)angle).
Hat jemand eine Idee, wie ich beides Kombinieren kann?


Viele Grüße
Tobi

Nach oben