PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text in zwei Hälften



Helveticus
07-10-2012, 19:06
Hallo

Ich habe noch ein kleines Problem. Und zwar möchte ich sowas wie in dem Bild im Anhang realisieren. Also links und rechts soll Code stehen und die Mitte durch ein Strich getrennt sein. Zudem sollen beide Codestücke unten noch beschriftet werden (Source und Destination). Und gewisse Linien sollen farbig eingefärbt werden (also nicht nur die Buchstaben, sondern die Linie, also auch Zwischenräume und so).

Wie geht das?

PS: Habe den Thread nur in dem Forum hier eröffnet.

rstuby
07-10-2012, 19:11
Geht das vielleicht mit einer tabular-Umgebung?

Helveticus
07-10-2012, 20:34
Das mit der Zeile farblich markieren habe ich rausbekommen. Das geht folgendermassen.

http://de.wikibooks.org/wiki/LaTeX-W%C3%B6rterbuch:_textcolor

Den Rest versuche ich mit einer Tabelle irgendwie hinzuwursteln, sollte wohl klappen.

Arthorius
07-10-2012, 21:15
Hallo,

habe hier mal ein Minimalbeispiel für deine Problematik erstellt:



\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{framed}
\usepackage[usenames,dvipsnames]{xcolor}

\usepackage{listings}
\lstset{
basicstyle = \ttfamily\scriptsize,
title = \lstname,
escapechar = \!
}

\usepackage{multicol}
\renewcommand{\columnseprule}{.4pt}

\usepackage{blindtext}

\begin{document}
\blindtext
\begin{multicols}{2}[Code Beispiele]
\begin{lstlisting}[name={Hello World in Ruby},language=Ruby]
puts 'Hello World'
\end{lstlisting}
\vfill
\columnbreak
\begin{lstlisting}[name={Hello World in C},language=C]
#include < stdio.h >

int main(void) {
!\colorbox{LimeGreen}{printf("Hello World");}!
return 0;
}
\end{lstlisting}
\end{multicols}
\blindtext

\end{document}



MfG, Arthorius


EDIT: Habe den Ansatz noch ein wenig verallgemeinert. Versucht man die ganze Umgebungsdefinition in einen Befehl bzw. in eine eigene Umgebung zu packen; muss man sicherlich drauf aufpassen, dass Listings als Argument noch als experiementel eingeschuft ist und zu Problemen führen kann. (siehe "5.1 Listings inside arguments" ftp://ftp.tex.ac.uk/tex-archive/macros/latex/contrib/listings/listings.pdf (Listings-Doc.)])



\documentclass{article}
\usepackage[ngerman]{babel}

\usepackage{framed}
\usepackage[usenames,dvipsnames]{xcolor}

\newsavebox{\boxname}

\usepackage{listings}
\lstloadlanguages{C, Ruby}

\lstset{
basicstyle=\ttfamily\color{black},
commentstyle = \ttfamily\color{red},
keywordstyle=\bfseries\color{blue},
name = \lstname,
caption = \lstname,
captionpos = t, % subset of tb
escapeinside={(*@}{@*)},
escapebegin=\begin{lrbox}{\boxname},
escapeend=\end{lrbox}\colorbox{LimeGreen}{\usebox{ \boxname}},
}

\usepackage{multicol}
\renewcommand{\columnseprule}{.4pt}

\usepackage{blindtext}
%\parbox{\textwidth}{
\begin{document}
\blindtext
\begin{multicols}{2}[Code Beispiele]
\begin{lstlisting}[name={Hello World in Ruby},language=Ruby]
# 'Hello World'
(*@ puts 'Hello World' @*)
\end{lstlisting}
\vfill
\textbf{Source}
\columnbreak
\begin{lstlisting}[name={Hello World in C},language=C]
#include<stdio.h>

int main(void) {
(*@ printf("Hello World"); @*)
return 0;
}
\end{lstlisting}
\vfill
\textbf{Destination}
\end{multicols}

\blindtext

\end{document}

Helveticus
07-10-2012, 22:21
Wow vielen Dank Arthorius. Ich werde es morgen gleich ausprobieren.

Arthorius
08-10-2012, 05:08
Statt colorbox kann auch
\hl{text} aus dem soul Paket genutzt werden. Dabei wird die Farbe mit
\sethlcolor{red} geändert.

Zum markieren ganzer Zeilen mit beibehalten der Formatierung des Code kann folgendes benutzt werden:

\newcommand{\MakeLine}{\noindent\color{red}\rule[-.3\baselineskip]{\linewidth}{1.1\baselineskip}\hspace{-\linewidth}}
und dann analog zu oben
(*@\MakeLine@*). (bin kein TeX-perte, aber es funktioniert im konkreten Fall :) )

Ansonsten kann auch für's automatische hervorheben bestimmter Worte dies nützlich sein:

\lstset{emph={<hier wörter liste>}, emphstyle={\bfseries}}.

Hoffe, dass ich weiter helfen konnte.

MfG, Arthorius

Helveticus
09-10-2012, 11:01
Dein Code funktioniert sehr gut. Ein Problem habe ich aber noch . Und zwar möchte ich \usepackage[ngerman]{babel} nicht gebrauchen, da das Dokument auf Englisch sein sollte und ich keine deutschen Übersetzungen gebrauchen kann. Wenn ich das aber weglasse gibts errors.

Kann man das irgendwie beheben?

Edit: Scheint jetzt doch auch ohne das Packet zu gehen.

EDIT2: Nein es geht doch nicht. Ich habe \usepackage[ngerman]{babel} entfernt. Jetzt ist der Absatz vor und nach der Tabelle in lateinisch.

EDIT3: Konnt es lösen. Der blindtext war Schuld.

rstuby
09-10-2012, 11:20
Wenn man bei babel die Sprache(n) ändert oder das Paket ganz herausnimmt, kommt danach immer beim ersten Durchlauf ein Fehler, der beim zweiten aber weg ist.

Helveticus
09-10-2012, 13:39
So es hat jetzt alles geklappt, sieht schön aus. Ich möchte allerdings noch eine kleine Legende zur Tabelle (unter der Tabelle?) erstellen, wo die Farben erklärt werden. Also z.B. so

Green: this is green
Blue: this is blue

etc.

Wie geht das? Habe schon gegooglet und da findet man auch einiges, aber irgendwie passt das nicht zu meiner Tabelle bzw. wurden andere Ausdrücke und Packete verwendet.

Arthorius
09-10-2012, 16:32
Hallo,

spontan würde ich sagen:
Entweder, falls tikz eh benutzt werden soll (Vorschläge aus den anderen Posts)

\usepackage{tikz}

\newcommand{\myCircle}[1]{\begin{tikzpicture} \draw[fill, color=#1] (0,0) circle (.1); \end{tikzpicture}}
oder eben rudimentärer

\newcommand{\myCircle}[1]{\raisebox{3pt}{\color{#1}\circle*{9}}}

Syntax bleibt bei beiden das gleiche:

\begin{tabular}{cl}
\myCircle{red} & Text 1 \\
\myCircle{LimeGreen} & Text 2 \\
\end{tabular}

Grüße

Helveticus
09-10-2012, 17:56
Vielen Dank. Sieht super aus.

Eine kleine Frage hätte ich noch. Wie brine ich alles auf eine Linie? Ich habe versucht die \\ zu entfernen, aber dann kommt ein error.

Donalduck
09-10-2012, 18:38
Entweder eine einzeilige Tabelle, oder die Tabelle gleich ganz weglassen.

\begin{tabular}{clcl}
\myCircle{red} & Text 1 & \myCircle{LimeGreen} & Text 2
\end{tabular}

Helveticus
09-10-2012, 19:02
Vielen Dank. Hat wunderbar geklappt.

Arthorius
13-10-2012, 06:06
Zur Vollständigkeit habe ich noch folgendes gefunden.
http://tex.stackexchange.com/questions/31383/highlighting-line-ranges-in-listings

Helveticus
13-10-2012, 09:11
Das wirft bei mir gleich noch eine Frage auf. ;)

In deinem Beispiel oben werden ja nur die Worte farblich hervorgehoben. Wie kann man das aber machen, dass die ganze Zeile (also bis zum Trennstrich) farblich hervorgehoben wird bzw. die colorbox über die ganze Zeile geht?

Helveticus
18-10-2012, 18:37
Die Frage bezüglich der ganzen Zeilenmarkierung hat sich gelöst, es wird nicht benötigt.

Ich habe nun also eine solche Tabelle mit zwei Spalten, wobei jeweils Code drin steht. Als Legen habe ich farbliche Markierungen.

Wird sowas normalerweise mit Figure oder table oder Example oder so beschriftet damit man später drauf referenzieren kann? Also z.B. unten dran Figure 1 oder so. Also als Tabelle ist es nicht wirklich wiederzuerkennen. Eine Figur ist es eigentlich auch nicht.

Helveticus
19-10-2012, 09:34
Ich habe es jetzt folgendermassen gelöst in dem ich unter die Tabelle einfach folgenden Code hinzugefügt habe:


\begin{figure}[h]
\centering
\caption{Example.}
\label{ExampleFactorial}
\end{figure}

Dass sollte dann wohl auch im figure-Verzeichnis erscheinen. Allerdings ist das etwas unschön. Gibt es keine Möglichkeit, dass irgendwie innerhalb der Tabelle oder der Legende zu definieren? Denn so wie es jetzt ist, ist es ja möglich, dass latex die figure-Legende einfach anderswo platziert.

rstuby
19-10-2012, 09:40
Suchst du den Befehl \captionof{figure}{Example.}? Für den brauchst du keine figure-Umgebung.
Allerdings würde ich dir raten, deine Tabelle lieber mitsamt caption in eine figure-Umgebung zu setzen, damit sie gleiten kann, weil so ein großes Objekt sonst leicht die Seiteneinteilung durcheinander bringt.

UPD: Oh, du benutzt keine KOMA-Klasse? Dann musst du noch \usepackage{caption} laden, um den \captionof-Befehl zur Verfügung zu haben.

Helveticus
19-10-2012, 12:47
Vielen Dank, hat wunderbar geklappt.

Ein Problem habe ich aber noch. Und zwar habe ich bei der Tabelle mit \begin{lstlisting}[name={Source code},language=Java,numbers=left,numberstyle=\tiny] noch die Zeilennummerierung anzeigen lassen.

Nun habe ich eine neue Tabelle an einem anderen Ort erstellt und jetzt wird die Zeilennummerierung einfach fortgesetzt anstatt wieder bei 1 zu beginnen.

Wie kann man das ändern?

Edit: Habs rausbekommen. Es geht mit \lstset{firstnumber=1}