PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pygmentize - syntax highlighter workaround?



damue
17-10-2007, 03:55
Hallo,

ich benutze für meine Diplomarbeit einen Highlighter namens pygmentize. Die Idee: ich habe in meinem Tex-Projekt einen Unterordner mit alle unterschiedl. Quelltextdateien, die ich mit dem pygmentize (http://pygments.org/) in tex-Dateien rendern kann.


pygmentize -f latex -P style=friendly,full -o "install.tex" "install.py"
pygmentize -f latex -P style=friendly,full -o "my.tex" "my.xml"


Dabei erhalte ich wirklich schicke Codes (Minimalbeispiel)




\documentclass{article}
\usepackage{fancyvrb}
\usepackage{color}
\usepackage[latin1]{inputenc}


\newcommand\at{@}
\newcommand\lb{[}
\newcommand\rb{]}
\newcommand\Cba[1]{\textcolor[rgb]{0.00,0.00,0.50}{\textbf{#1}}}
\newcommand\Caz[1]{\textcolor[rgb]{0.00,0.63,0.00}{#1}}
\newcommand\Cay[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand\Cax[1]{\textcolor[rgb]{0.84,0.33,0.22}{\textbf{#1}}}
\newcommand\Cbc[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand\Cas[1]{\textcolor[rgb]{0.25,0.44,0.63}{\textit{#1}}}
\newcommand\Car[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
\newcommand\Caq[1]{\textcolor[rgb]{0.38,0.68,0.84}{#1}}
\newcommand\Cap[1]{\textcolor[rgb]{0.78,0.36,0.04}{#1}}
\newcommand\Caw[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\Cav[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand\Cau[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\Cat[1]{\textcolor[rgb]{0.32,0.47,0.09}{#1}}
\newcommand\Cak[1]{\textcolor[rgb]{0.14,0.33,0.53}{#1}}
\newcommand\Caj[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand\Cai[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
\newcommand\Cah[1]{\textcolor[rgb]{0.00,0.13,0.44}{\textbf{#1}}}
\newcommand\Cao[1]{\textcolor[rgb]{0.25,0.44,0.63}{\textbf{#1}}}
\newcommand\Can[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand\Cam[1]{\textbf{#1}}
\newcommand\Cal[1]{\colorbox[rgb]{1.00,0.94,0.94}{\textcolor[rgb]{0.38,0.63,0.69}{#1}}}
\newcommand\Cac[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\Cab[1]{\textit{#1}}
\newcommand\Caa[1]{\textcolor[rgb]{0.50,0.50,0.50}{#1}}
\newcommand\Cag[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\Caf[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand\Cae[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\Cad[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\Cbb[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\CaZ[1]{\textcolor[rgb]{0.02,0.16,0.45}{\textbf{#1}}}
\newcommand\CaY[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\CaX[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand\Cbf[1]{\textcolor[rgb]{0.44,0.63,0.82}{\textit{#1}}}
\newcommand\Cbg[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand\Cbd[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\Cbe[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand\CaS[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand\CaR[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
\newcommand\CaQ[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand\CaP[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\CaW[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\CaV[1]{\textcolor[rgb]{0.05,0.52,0.71}{\textbf{#1}}}
\newcommand\CaU[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand\CaT[1]{\textcolor[rgb]{0.50,0.00,0.50}{\textbf{#1}}}
\newcommand\CaK[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand\CaJ[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand\CaI[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand\CaH[1]{\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{#1}}
\newcommand\CaO[1]{\textcolor[rgb]{0.78,0.36,0.04}{\textbf{#1}}}
\newcommand\CaN[1]{\textcolor[rgb]{0.05,0.52,0.71}{\textbf{#1}}}
\newcommand\CaM[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand\CaL[1]{\textcolor[rgb]{0.73,0.73,0.73}{#1}}
\newcommand\CaC[1]{\textcolor[rgb]{0.33,0.33,0.33}{\textbf{#1}}}
\newcommand\CaB[1]{\textcolor[rgb]{0.00,0.25,0.82}{#1}}
\newcommand\CaA[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand\CaG[1]{\textcolor[rgb]{0.73,0.38,0.84}{#1}}
\newcommand\CaF[1]{\textcolor[rgb]{1.00,0.00,0.00}{#1}}
\newcommand\CaE[1]{\textcolor[rgb]{0.63,0.00,0.00}{#1}}
\newcommand\CaD[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}

\begin{document}

\section*{}

\begin{Verbatim}[commandchars=@\[\]]
@CaD[#!/usr/bin/env python]
@CaD[# $Id: install.py 2428 2004-07-13 15:57:13Z goodger $]
@CaD[# Copyright: This file has been placed in the public domain.]

@Cas["""]
@Cas[This is a quick & dirty installation shortcut. It is equivalent to the]
@Cas[command::]

@Cas[ python setup.py install]

@Cas[However, the shortcut lacks error checking and command-line option]
@Cas[processing. If you need any kind of customization or help, please use]
@Cas[one of::]

@Cas[ python setup.py install --help]
@Cas[ python setup.py --help]
@Cas["""]

@Cay[from] @CaV[distutils] @Cay[import] core
@Cay[from] @CaV[setup] @Cay[import] do_setup

@Cay[if] __name__ @Cbe[==] @Cad[']@Cad[__main__]@Cad['] :
@Cay[print] __doc__
core@Cbe[.]_setup_stop_after @Cbe[=] @Cad[']@Cad[config]@Cad[']
dist @Cbe[=] do_setup()
dist@Cbe[.]commands @Cbe[=] @lb[]@Cad[']@Cad[install]@Cad[']@rb[]
dist@Cbe[.]run_commands()

\end{Verbatim}

\end{document}


Die install.pdf liegt im Anhang.

Meine Frage:
Ich möchte gerne mit dem Inhalt von \begin{Verbatim} .. \end{Verbatim} arbeiten und einen Rahmen hinzufügen und die Hintergrundfarbe verändern. Ich möchte auch ein Label anhängen, damit ich damit arbeiten kann, wie mit \figure-Objekten.

Hinweis:
Ich habe es erstmal aufgegeben mit pygmentize über die CommandLine Optionen mein Ziel zu erreichen, denn nichts funktioniert und die Docu wird hier unklar.

Kann jemand das Minimalbeispiel überhaupt in der Art und Weise manipulieren, dass es so (http://pygments.org/demo/458/?style=default) wirken könnte? Gesucht wird ein workaround.

Vielen Dank im Vorraus
Daniel

sofa-surfer
17-10-2007, 08:39
Hallo,

kurze Zwischenfrage, warum nutzt du nicht das listings (http://www.ctan.org/tex-archive/help/Catalogue/entries/listings.html)-Paket? Das kann so ziemlich allen SchnickSchnack ...

Matthias

damue
18-10-2007, 12:40
Warum nicht listings? ...

Bevor ich hier mein Anliegen gemeldet hatte, hatte ich schon bemerkt, dass viele zu listings raten. listings ist gut - doch ich wollte mehr und dafür noch weniger tun. :rolleyes: Ich suchte weiter, fand pygments (http://pygments.org) und bin damit sehr weit gekommen.

Mein Ziel war:

Ich möchte die Quelltextdateien nicht extra anfassen müssen, um sie in meinem Dokument zu rendern.

Wie mein Workflow damit ist:

- ändere Quelltext über IDE oder so im Rahmen der Programmierarbeiten für mein e Diplomarbeit
- lasse TexnicCenter mit Precompiler laufen
- fertig ist die neuste PDF mit allerneuesten Quellcode + Syntaxhighlight

Nach meinem empfinden musste ich in listings viel einstellen und auch händisch machen. Schau Dir mal nur Gegensatz dazu http://pygments.org/demo/ an.

Fürargument für pygments:

- automatisches Erkennen der Programmiersprache durch Dateiendung
- liste von Stylesheet (a la CSS)
- KommandozeilenTool für Precompiler => Sourcecode zu LaTeX rendern mittels Batch
- Das vorgestellte Minimalbeispiel habe ich nicht angefasst, dass ist mir mit

C:\> pygmentize %pygmentize_param% -o %pygmentize_dir%.'install.tex' %pygmentize_dir%.'install.py'
aus


#!/usr/bin/env python
# $Id: install.py 2428 2004-07-13 15:57:13Z goodger $
# Copyright: This file has been placed in the public domain.

"""
This is a quick & dirty installation shortcut. It is equivalent to the
command::

python setup.py install

However, the shortcut lacks error checking and command-line option
processing. If you need any kind of customization or help, please use
one of::

python setup.py install --help
python setup.py --help
"""

from distutils import core
from setup import do_setup

if __name__ == '__main__' :
print __doc__
core._setup_stop_after = 'config'
dist = do_setup()
dist.commands = ['install']
dist.run_commands()


erstellt worden. :D

Diese alle meine Ziele habe ich mehr als erreicht. Es geht nur noch um den letzten Schliff mit Rahmen und Hintergrund in/um \begin{Verbatim}.

Alles im Allem muss ich aber gestehen, dass ich mich mit \listings abgesehen von der Doku und ein paar Forumseinträgen und einem Minimalbeispiel nicht intensiv damit beschäftigt habe.

VG Daniel

rais
18-10-2007, 13:04
Moin Daniel,


Mein Ziel war:

Ich möchte die Quelltextdateien nicht extra anfassen müssen, um sie in meinem Dokument zu rendern.

\lstinputlisting hieße das beim listings-Paket.


Diese alle meine Ziele habe ich mehr als erreicht. Es geht nur noch um den letzten Schliff mit Rahmen und Hintergrund in/um \begin{Verbatim}.

Ich vermute mal, daß der Rahmen bzw. die Hintergrundfarbe dort eher über die benutzte Oberfläche eingefügt wird, so ähnlich wie bei der Code-Umgebung hier:


code

Wenn Du so etwas selbst machen willst, dann schau Dir mal das fancyvrb-Paket an -- nutzen tust Du es ja schon -- so um Abschnitt 4.1.6 (Types and characeristics of frames) dürfte es für Dich interressant werden.;)
MfG,

damue
18-10-2007, 21:28
Hallo rais,

danke für Deine Anregungen. Ich habe mir mal alles näher angeschaut und es war der richtige Schups.



\lstinputlisting hieße das beim listings-Paket.

Okay. Das kommt dem sehr nah. Hätte ich nicht schon pygments, das wär's. Bleib aber bei pygments.



Ich vermute mal, daß der Rahmen bzw. die Hintergrundfarbe dort eher über die benutzte Oberfläche eingefügt wird, so ähnlich wie bei der Code-Umgebung hier:


code

Wenn Du so etwas selbst machen willst, dann schau Dir mal das fancyvrb-Paket an
Genau. Das Paket habe ich mir auch mit Hilfe von 3 Basic Formatting Tools (http://www.latex-project.org/guides/tlc2-ch3.pdf) näher angeschaut und ich bin jetzt sehr zufrieden.

Hier meine Lösungen in TeX und PDF (lieber erst in die PDF sehen, denn die TeX-Datei quillt vor Einstellungen ;) ):

Im Kern


\begin{code}
\centering
\input{./install}
\caption{Source für das Andere}
\label{code:install}
\end{code}


.. oder hier ausführlich ..



%\documentclass{article}
\documentclass[12pt,a4paper]{scrreprt}
\usepackage{fancyvrb}
\usepackage[latin1]{inputenc}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%
\usepackage{color}
\definecolor{MyFrameColor}{rgb}{0.02,0.16,0.45} % \color{MyFrameColor}
%\definecolor{MyContentColor}{rgb}{0.995,0.995,0.8 } % \color{MyContentColor}
\definecolor{MyContentColor}{rgb}{1,1,1} % \color{MyContentColor}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%
\usepackage{float}
%\floatstyle{ruled}
\newfloat{code}{htp}{loc}[chapter]
\floatname{code}{Quellcodedatei}
\floatplacement{code}{H}
\listof{code}{Liste der Quellcodedateien}


\fvset{frame=lines} % lines | single
\fvset{framerule=0.5mm}

\fvset{rulecolor=\color{MyFrameColor}}
\fvset{framesep=2.5mm}

%\fvset{xleftframesep=5mm}
%\fvset{xrightframesep=5mm}
%\fvset{fillcolor=\color{yellow}}
\fvset{fontfamily=courier}
\fvset{fontsize=\scriptsize}
%\fvset{baselinestretch=-0.5}

\newcommand{\mymargin}{ 0.2\textwidth }

\fvset{xleftmargin=\mymargin}
\fvset{xrightmargin=\mymargin}

\renewcommand\FancyVerbFormatLine[1]{\colorbox{MyContentColor}{\makebox[0.9785\linewidth][l]{#1}}}
%\renewcommand\FancyVerbFormat[1]{\colorbox{yellow}{\makebox[0.5825\textwidth][l]{#1}}}

\renewcommand{\theFancyVerbLine}{\textcolor{MyFram eColor}{\bfseries\tiny\arabic{FancyVerbLine}}} % \alph


\fvset{numbers=left}
\fvset{numbersep=2.5mm}
\fvset{tabsize=4}
%\fvset{}
%\fvset{}
%\fvset{}

% importiert Style für SourceCode
\input{./pygmentize_style}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
\newcommand{\coderef}[1]{%
\ref{#1} \vpageref{#1}%
}%



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}


\listofcode % und hier erscheint das Abbildungsverzeichnis
%\clearemptydoublepage


% importiert Style für SourceCode

\chapter{Implementierung} \label{sec:Implementierung}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris imperdiet feugiat erat. Fusce cursus velit a ipsum. Pellentesque orci turpis, sagittis ut, sollicitudin eget, volutpat id, quam. Nullam aliquet scelerisque pede. Donec et diam et orci scelerisque sollicitudin.

\begin{code}
\centering
\input{./cda-eav}
\caption{Source für das Eine}
\label{code:cda-eav}
\end{code}

Aliquam nisi lorem, tempor vel, consectetuer imperdiet, laoreet eget, metus. Nulla rutrum turpis sed enim. Praesent rutrum pulvinar urna. Ut congue nisi at diam. Morbi ut eros. Fusce faucibus, dolor in sagittis fringilla, tellus mi sodales purus, vitae nonummy nisi lectus sed nunc. Integer viverra mi. Aenean vehicula Mein Code in \coderef{code:cda-eav} suscipit felis. Morbi rhoncus leo vel lectus. Quisque laoreet imperdiet elit. Nulla facilisi. Cras molestie lobortis nunc. Donec sit amet tellus eu erat tempor posuere. Mauris pellentesque. Donec quis urna.

\begin{code}
\centering
\input{./install}
\caption{Source für das Andere}
\label{code:install}
\end{code}

Curabitur scelerisque mi et nisi. In turpis nulla, dapibus in, sollicitudin et, lacinia non, purus. Morbi nulla. In ut nulla quis neque aliquet fringilla. Praesent vel velit. Fusce fringilla pharetra justo. Sed consectetuer leo ac elit. Praesent bibendum erat et sem. Nam massa. Aenean mattis pretium tortor. Etiam scelerisque aliquam tellus. Vestibulum neque sapien, tincidunt sed, pretium in, sagittis ut, magna. Duis est enim, accumsan quis, ornare at, pulvinar vitae, turpis. Cras dolor ligula, consequat id, euismod ac, pulvinar sed, nibh. Suspendisse potenti.

Cras consequat enim sed nisi. In vitae lectus. Sed faucibus faucibus nulla. Fusce a lorem. Cras sodales ipsum ac ligula. Vestibulum in enim. Nunc ullamcorper faucibus est. Aenean elit lacus, pretium at, mollis vitae, tempus sit amet, velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vivamus adipiscing risus vel nisl. Sed est.

\end{document}


Und als PDF im Anhang.

Wie Du sehen kannst muss ich noch an kleinen anderen Dingen arbeiten, doch habe ich das ein oder andere bereits im Forum gesehen.

Vielen Dank!
Daniel

birkenfeld
22-10-2007, 18:21
@damue: Wenn du irgendwelche Probleme mit oder Anregungen für Pygments hast, schick mir doch einfach eine E-Mail (gbrandl/pocoo.org).