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, 13:07

bor44's gravatar image

bor44
996610
Akzeptiert-Rate: 0%

bearbeitet 19 Aug '14, 19:49

stefan's gravatar image

stefan ♦♦
18.3k163148


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, 14:35

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%

bearbeitet 19 Aug '14, 15: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, 15: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, 15: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, 15: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, 19:46) gast3

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, 15:09

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 19 Aug '14, 15:35

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×23
×4
×1

gestellte Frage: 19 Aug '14, 13:07

Frage wurde gesehen: 15,466 Mal

zuletzt geändert: 19 Aug '14, 19:49