PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : psmatrix und ncline



einheitlix
02-11-2009, 15:54
Hallo Leute,

ich habe folgendes Problem.

Ich habe zwei psshadowboxes. In jeder befindet sich Text. Ich würde gerne einen Pfeil von der ersten zur zweiten Box machen. Folgendes Minimalbeispiel funktioniert einwandfrei:

Minimalbeispiel 1: läuft, aber nicht ganz das, was ich will


\documentclass[12pt,a4paper,draft]{article}

\usepackage{pstricks,pst-node}

\begin{document}

\begin{psmatrix}
[name=A] \psshadowbox{
AAAA
}
&
[name=B] \psshadowbox{
BBBB
}

%Arrows
\ncline{->}{A}{B}
\end{psmatrix}

\end{document}


Leider ist es bei mir dann so, dass der Text leider viel zu lang ist, so dass ich so eine "overfull hbox" bekomme. In etwa so...

Minimalbeispiel 2: overfull hbox


\documentclass[12pt,a4paper,draft]{article}

\usepackage{pstricks,pst-node}

\begin{document}

\begin{psmatrix}
[name=A] \psshadowbox{
AAAAAAAAAAAAAAAAAAAAAAAA
}
&
[name=B] \psshadowbox{
BBBBBBBBBBBBBBBBBBBBBBBB
}

%Arrows
\ncline{->}{A}{B}
\end{psmatrix}

\end{document}


Also hätte ich gerne, dass die beiden Boxen untereinander dargestellt werden, die erste linksgebündelt, die zweite rechtsgebündelt. Aber schon beim Versuch, einfach das & durch ein \\ zu ersetzen, bekomme ich einen Fehler:

Minimalbeispiel 3: ungefähr das, was ich will, aber kompiliert nicht!


\documentclass[12pt,a4paper,draft]{article}

\usepackage{pstricks,pst-node}

\begin{document}

\begin{psmatrix}
[name=A] \psshadowbox{
AAAAAAAAAAAAAAAAAAAAAAAA
}
\\
[name=B] \psshadowbox{
BBBBBBBBBBBBBBBBBBBBBBBB
}

%Arrows
\ncline{->}{A}{B}
\end{psmatrix}

\end{document}


Die Fehlermeldung lautet:


! Missing number, treated as zero.
<to be read again>
n
l.12 [name=B]
\psshadowbox{
?


Ich habe herausgefunden, dass dies an dem [name=bla] Konstrukt unmittelbar nach dem \\ liegt. Folgendes geht wieder.

Minimalbeispiel 4: kompiliert, aber zweite Box hat keinen Namen mehr!


\documentclass[12pt,a4paper,draft]{article}

\usepackage{pstricks,pst-node}

\begin{document}

\begin{psmatrix}
[name=A] \psshadowbox{
AAAAAAAAAAAAAAAAAAAAAAAA
}
\\
\psshadowbox{
BBBBBBBBBBBBBBBBBBBBBBBB
}

%Arrows
\ncline{->}{A}{B}
\end{psmatrix}

\end{document}


Dementsprechend bekomme ich dann auch keinen Pfeil mehr... aber es muss doch möglich sein, auch die erste Box in einer neuen Zeile der psmatrix zu benennen, oder? Nur, wie? ;)

Vielen lieben Dank schonmal!

Malte

einheitlix
02-11-2009, 17:38
Hallo!

Ich habe das Problem gelöst. Mit einer aktuellen Version von pstricks geht es. Das Ding ist, daß Ubuntu Jaunty sowie Ubuntu Karmic (immer noch!) einfach uralte Versionen von pstricks mitbringen! Das ist ziemlich nervig, wenn man unter Ubuntu arbeiten muss.

Ich schreib die Lösung jetzt mal für alle auf, die vielleicht irgendwann mal dasselbe Problem haben (Ubuntu ist jetzt nicht so unverbreitet, und pstricks benutzt wohl schon der eine oder andere, also gar nicht so unwahrscheinlich).

1. Erklärung:

In den beiden erwähnten Ubuntus werden (unter vielen anderen) diese beiden Dateien installiert:
* /usr/share/texmf-texlive/tex/latex/pstricks/pstricks.sty
-> Wrapper für /usr/share/texmf-texlive/tex/generic/pstricks/pstricks.tex
* /usr/share/texmf-texlive/tex/latex/pstricks/pst-node.sty
-> Wrapper für /usr/share/texmf-texlive/tex/generic/pstricks/pst-node.tex

Diese beiden *.tex Dateien erzählen, dass sie folgende Versionen haben:
pstricks.tex: version 1.15, 2006/12/22
pst-node.tex: version 97 patch 11, 2000/11/09

Fantastisch! Fehlt da ein Maintainer? Nur mal so zum Vergleich, die aktuellsten Versionen von http://www.tug.org/PSTricks/main.cgi?file=packages sind...
pstricks.tex: version 1.30, 2009/10/25
pst-node.tex: version 1.01, 2008/11/26

2. Lösung:

Man installiert sich einfach ein neues pstricks manuell ins HOME-Verzeichnis. Auf diese Weise pfuscht man dem package manager nicht ins Werk.

Copy&Paste sollte es tun...


# erstmal ein $HOME/texmf/ erstellen, dass bei Ubuntu defaultmaessig
# beim kompilieren von (La)TeX Dateien durchsucht wird
mkdir $HOME/texmf
cd $HOME/texmf

# nun laden wir das neueste pstricks mit allem, was dazu gehoert, und entpacken es;
# siehe http://www.tug.org/PSTricks/main.cgi?file=packages
wget http://www.ctan.org/pub/tex-archive/graphics/pstricks/base.zip
unzip base.zip

# schliesslich muessen die richtigen dateien an die richtigen stellen
mv base/{doc,dvips,README} .
mkdir tex
mv base/{generic,latex} tex/

# dann noch aufraumen
rm -r base base.zip


Jetzt sollte es gehen!

PS. Ich hatte schonmal ein ähnliches Problem mit Ubuntu und PSTricks, siehe:
http://www.mrunix.de/forums/showthread.php?t=66218

voss
02-11-2009, 23:09
Dementsprechend bekomme ich dann auch keinen Pfeil mehr... aber es muss doch möglich sein, auch die erste Box in einer neuen Zeile der psmatrix zu benennen, oder? Nur, wie? ;)


http://tug.org/PSTricks/main.cgi?file=pst-node/psmatrix/psmatrix#problems

Herbert

mechanicus
03-11-2009, 10:31
Hallo,


Das Ding ist, daß Ubuntu Jaunty sowie Ubuntu Karmic (immer noch!) einfach uralte Versionen von pstricks mitbringen! Das ist ziemlich nervig, wenn man unter Ubuntu arbeiten muss.
Es gibt viele andere, welche unter Ubuntu LaTeX verwenden. Ich selbst zähle zu diesen Usern. Allerdings installieren wir uns einfach Texlive 2009 und haben somit einen integrierten Update-Manager, so dass die Paket immer aktuell sind. So braucht man gar nicht mehr die LaTeX-Installation über Synaptic.

Gruß
Marco

einheitlix
03-11-2009, 14:40
Danke fuer den Tipp! Ist auf jeden Fall einfacher und kompatibler, das so zu machen. Aber prinzipiell tritt dieses Problem mit neueren Versionen nicht mehr auf, richtig ? :)

voss
03-11-2009, 15:02
Danke fuer den Tipp! Ist auf jeden Fall einfacher und kompatibler, das so zu machen. Aber prinzipiell tritt dieses Problem mit neueren Versionen nicht mehr auf, richtig ? :)

richtig ...

Herbert

einheitlix
03-11-2009, 17:46
Es gibt viele andere, welche unter Ubuntu LaTeX verwenden. Ich selbst zähle zu diesen Usern. Allerdings installieren wir uns einfach Texlive 2009 und haben somit einen integrierten Update-Manager, so dass die Paket immer aktuell sind. So braucht man gar nicht mehr die LaTeX-Installation über Synaptic.

Hi, das ist interessant! Auf meinem Laptop benutze ich selber auch Ubuntu... auf meinem Desktop PC allerdings Arch Linux, da ist alles topaktuell.

Trotzdem finde ich es einen echten Missstand, dass Ubuntu so veraltete LaTeX-Pakete mitbringt. Es muss ja nicht unbedingt Texlive 2009 sein. Aber beispielsweise im Falle von pstricks.tex, die im Ubuntu package manager 15 minor revisions hinter der aktuellen Version liegt, und somit eine Version anbietet, die mehrere Jahre alt ist, muss ich sagen, das wirkt doch etwas lieblos... offensichtlich fehlt denen da echt ein Maintainer :-/

einheitlix
04-11-2009, 17:33
Hallo,

ok, das gehört auch noch einigermaßen zum Thema, und der Titel passt auch noch. Ich habe es jetzt fast so hinbekommen, wie ich möchte, ich habe nur noch ein paar kleine Probleme mit \Aput :)

Und zwar sieht es jetzt so aus (mal ein etwas realeres Beispiel, damit ihr euch das richtig vorstellen könnt):



\documentclass[12pt,a4paper]{article}

\usepackage{amsmath, amsthm, amssymb}
\usepackage{pstricks,pst-node}

\newcommand {\card}[1] {\lvert#1\rvert}
\newcommand {\eqobs} {\equiv_{obs}}
\newcommand {\gameemph}[1] {{\color{blue} #1}}
\newcommand {\gen}[1] {\langle#1\rangle}
\newcommand {\mybox}[1] {\psshadowbox[linecolor=gray,shadowcolor=lightgray]{#1}}
\newcommand {\sel} {\leftarrow}

\begin{document}

\begin{psmatrix}[mnode=r,colsep=0.8,rowsep=0.4]
\hspace*{\linewidth}
\\[0pt]
[name=game1,mcol=l] \mybox{
\small
\begin{tabular}{llcl}
let & ($e$, $d$) & $\sel$ & \gameemph{:encGen ElGamal: $1^n$}\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $c$ & $\sel$ & \gameemph{:encEnc ElGamal: ($1^n$, $e$, $m_1$)}\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}
}
\\[0pt]
[name=game2,mcol=r]
\mybox{
\small
\begin{tabular}{llcl}
let & ($e$, $d$) & $\sel$ & \gameemph{let $x$ $\sel$ fun(uniform, $\card{\gen{g_n}}$)}\\
& & & \gameemph{in ($g_n^x$, $x$)}\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $c$ & $\sel$ & \gameemph{let $y$ $\sel$ fun(uniform, $\card{\gen{g_n}}$)}\\
& & & \gameemph{in ($g_n^y$, $m_1 \times e^y$)}\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}
}

%Arrows
\ncline{->}{game1}{game2}\Aput{$\eqobs$}
\end{psmatrix}


\end{document}


Alles wunderbar, das einzige Problem ist nun, daß das Zeichen \eqobs, welches ich mir als Makro definiert hab, nicht richtig platziert wird: da der Pfeil zu kurz ist, wird es mitten in die obere Box geschrieben. Ich hätte aber natürlich gerne, daß LaTeX den Pfeil gerade so lang macht, daß das Zeichen noch gut dazwischenpasst ;)

Ich habe damit experimentiert, eine weitere psmatrix-Zeile zwischen den beiden Boxen einzuführen und dadrin mit einem \vspace{XYpt} den Abstand zu vergrößern, aber 1. klappt das nicht richtig (irgendwie wird der \vspace ignoriert), und 2. ist das auch so ein manuelles zurechtfriemeln, das mir nicht so recht gefällt. Vielleicht gibt es auch eine sauberere Lösung. Habt ihr da 'ne Idee? :)

Beste Grüße,

Malte

voss
04-11-2009, 21:04
Alles wunderbar, das einzige Problem ist nun, daß das Zeichen \eqobs, welches ich mir als Makro definiert hab, nicht richtig platziert wird: da der Pfeil zu kurz ist, wird es mitten in die obere Box geschrieben. Ich hätte aber natürlich gerne, daß LaTeX den Pfeil gerade so lang macht, daß das Zeichen noch gut dazwischenpasst ;)

Ich habe damit experimentiert, eine weitere psmatrix-Zeile zwischen den beiden Boxen einzuführen und dadrin mit einem \vspace{XYpt} den Abstand zu vergrößern, aber 1. klappt das nicht richtig (irgendwie wird der \vspace ignoriert), und 2. ist das auch so ein manuelles zurechtfriemeln, das mir nicht so recht gefällt. Vielleicht gibt es auch eine sauberere Lösung. Habt ihr da 'ne Idee? :)



\documentclass[12pt,a4paper]{article}

\usepackage{amsmath, amsthm, amssymb}
\usepackage{pstricks,pst-node}

\newcommand {\card}[1] {\lvert#1\rvert}
\newcommand {\eqobs} {\equiv_{obs}}
\newcommand {\gameemph}[1] {{\color{blue} #1}}
\newcommand {\gen}[1] {\langle#1\rangle}
\newcommand {\mybox}[1] {\psshadowbox[linecolor=gray,shadowcolor=lightgray]{#1}}
\newcommand {\sel} {\leftarrow}

\begin{document}

\rnode{game1}{\mybox{\small
\begin{tabular}{llcl}
let & ($e$, $d$) & $\sel$ & \gameemph{:encGen ElGamal: $1^n$}\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $c$ & $\sel$ & \gameemph{:encEnc ElGamal: ($1^n$, $e$, $m_1$)}\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}}}\\[1cm]
\hspace*{2cm}
\rnode{game2}{\mybox{\small
\begin{tabular}{llcl}
let & ($e$, $d$) & $\sel$ & \gameemph{let $x$ $\sel$ fun(uniform, $\card{\gen{g_n}}$)}\\
& & & \gameemph{in ($g_n^x$, $x$)}\\
& ($m_1$, $m_2$, $a$) & $\sel$ & :A: ($1^n$, $e$)\\
& $c$ & $\sel$ & \gameemph{let $y$ $\sel$ fun(uniform, $\card{\gen{g_n}}$)}\\
& & & \gameemph{in ($g_n^y$, $m_1 \times e^y$)}\\
in & \multicolumn{3}{l}{:A': ($1^n$, $m_1$, $m_2$, $a$, $e$, $c$)}\\
\end{tabular}}}
%Arrows
\ncline{->}{game1}{game2}\ncput*{$\eqobs$}


\end{document}


Herbert