Ich habe ein listing mit Code und möchte das keyword "include" highlighten. Allerdings weiß ich nicht, wie ich Latex sage, dass er das Keyword highlighten soll. Lediglich direkt am Listing funktioniert das mit \lstinputlisting[language=ruby, morekeywords=include]{./Path/to} Ich würde das Keyword allerdings lieber Global definieren. Minimalbeispiel:

Open in writeLaTeX
\documentclass[12pt,a4paper,titlepage]{scrartcl}
\lstdefinestyle{mystyle}{
    ....Hier funktioniert morekeywords={include} nicht
}
\lstset{style = mystyle}
\begin{document}
\begin{lstlisting}[language=ruby]
    include FooBar
\end{lstlisting}
\end{document}

gefragt 19 Aug '14, 07:07

bor44's gravatar image

bor44
992410
Akzeptiert: 83%

bearbeitet 19 Aug '14, 13:49

stefan's gravatar image

stefan ♦♦
5.8k12234


Sobald du mit dem optionalen Element eine Sprache wählst, wird der Standard dieser abgerufen. Du musst deinen eigenen Stil also daran anhängen.

Da Code-Listings aber im Dokument einheitlich aussehen sollten, empfehle ich dir einen eigenen Stil für die jeweilige Sprache/Dialekt zu erstellen.

Open in writeLaTeX
\documentclass{scrartcl}
\usepackage{listings}
\lstdefinestyle{mystyle}{
    morekeywords={include} 
}
\lstdefinestyle{meinRuby}{
    language=ruby,
    morekeywords={include} 
}
%\lstset{style = mystyle}%JB: Entweder global für alle folgenden 
\newcommand{\slice}{\par\noindent\vrule height0.1pt width\textwidth}
\begin{document}

%JB: Oder lokal für dieses Listing
\begin{lstlisting}[language=ruby,style=mystyle]
include FooBar
\end{lstlisting}
Sprache und Style
\slice    
\begin{lstlisting}[style=meinRuby]
include FooFoo
\end{lstlisting}
meinRuby
\slice
\lstset{style = mystyle}
Nun gilt mystyle f\"ur alle folgenden Listings
\begin{lstlisting}
include Fifo
\end{lstlisting}
mystyle ist global gesetzt
\slice
\begin{lstlisting}[language={[LaTeX]TeX}]
include FooFoo
\section{}
\end{lstlisting}
Hier greift nun der LaTeX-Stil, include ist kein Keyword mehr
\end{document}

bor44ListingsKeyword

Permanenter link

beantwortet 19 Aug '14, 08:35

Johannes's gravatar image

Johannes
7.2k132759

bearbeitet 19 Aug '14, 09:53

Hallo, Johannes! Danke für die schnelle Antwort! Wenn ich deinen Code benutze, funktioniert das Highlighting wunderbar. Dann habe ich wohl irgendwo mist gebaut.

(19 Aug '14, 09:04) bor44

Habe den "Fehler" gefunden. Ich habe die Sprache (language=ruby) nicht in mystyle angegeben, sondern direkt an den listings. Durch das späte festlegen der language kann ich vorher wohl keine keywords definieren?

(19 Aug '14, 09:12) bor44
2

Ich finde, du solltest semantisch Arbeiten. Pack die Ruby-spezifischen sachen in einen Stil meinRuby (oder was dir gefällt) und lad diesen Stil. Alle Ruby-Listings sollten gleich aussehen. Setzt du das ganze willkürlich global fest, dann werden auch \includes in LaTeX-listings geändert.

(19 Aug '14, 09:27) Johannes
1

Ich gehe übrigens in der Regel noch einen Schritt weiter und definiere mit gleich Umgebungen lstruby etc. Das geht mit \lstnewenvironment ganz einfach und spart mir meist etwas Tipparbeit.

(19 Aug '14, 13:46) Ijon Tichy

Hallo!

Vorweg die Bitte, Minibeispiele so reinzustellen, daß man daran arbeiten und ausprobieren kann. (Du lädst bspw. nichtmal das Paket listings...) Genug verseggelt, ich glaube, was Du suchst ist das:

alt text

PS: Ich habe ein paar Ergänzungen eingebaut, die zwar nicht zum Thema gehören, aber m.E. wichtig sind.

Open in writeLaTeX
\documentclass[]{article}

\usepackage[dvipsnames]{xcolor}
\usepackage{listings}
%=================================
% Nummerierung nicht-auswählbar machen:
\usepackage{accsupp}    
\newcommand{\noncopynumber}[1]{ \BeginAccSupp{method=escape,ActualText={}}
       #1
\EndAccSupp{}}%

    \lstset {numberstyle={\footnotesize\color{lightgray}\noncopynumber}, 
    numbers=left, 
    numbersep=1.5pt,
    columns=flexible,
    }
%=================================

\lstloadlanguages{Ruby}
\lstset{%
backgroundcolor=\color{yellow!50}, 
rulecolor=\color{lightgray}, frame=single,
breaklines=true,
basicstyle=\ttfamily\color{black},
commentstyle = \ttfamily\color{red},
keywordstyle=\ttfamily\color{blue},
stringstyle=\color{orange}
}%

%%%%%%%%% "include hervorheben" %%%%%%%%%%
\lstset{emph={%  
   include%
    },emphstyle={\color{red}\bfseries\underbar}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}
\begin{lstlisting}[language=Ruby]
#Ein Kommentar....
a = 5
puts b

include ...
    def bar
        if foo
\end{lstlisting}
\end{document}
Permanenter link

beantwortet 19 Aug '14, 09:09

cis's gravatar image

cis
5.4k861169

bearbeitet 19 Aug '14, 09:35

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×15
×1
×1

Frage gestellt: 19 Aug '14, 07:07

Frage wurde angeschaut: 2,737 Mal

Zuletzt aktualisiert: 19 Aug '14, 13:49