PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechnen mit Argumenten + Fallunterscheidung



W2K
09-03-2007, 08:14
Hallo,

ich möchte einem eigenen Kommando drei Argumente übergeben - zwei Koordinaten und einen Flag.
In dem Kommando soll mit den beiden Werten gerechnet werden - abhnängig, ob der Flag 0/1 ist. Ich habe so etwas in LateX allerdings noch nicht gemacht und weiß deswegen nicht so recht, wonach ich suchen muss.
Es wäre nett, wenn ihr mir in diesem Punkt weiterhelfen würdet. Vielen Dank.

rais
09-03-2007, 10:03
Moin moin,
Fallunterscheidung: ifthen-Paket ansehen;
Werte berechnen kannst Du mit calc, fp;
Ein eigenes Kommando mit drei Parametern kannst Du mit


\newcommand{\Makroname}[3][default f. ersten Parameter]{%
%die Definition: Zugriff auf die drei Parameter mit #1, #2 und #3
}

erzeugen.
MfG,

W2K
09-03-2007, 10:52
So wie Du die Funktion definiert hast, müssen die Koordinaten in zwei geschweiften Klammern übergeben werden.

Wie geht das denn in runden Klammern also:


\VC(4,0)[l]

rais
09-03-2007, 12:05
Wie geht das denn in runden Klammern also:


\VC(4,0)[l]

das ist mehr was für TeX:


\def\VC(#1,#2)[#3]{%
...
}

obwohl, dann ist #3 trotz eckiger Klammern nicht optional -- das kannst Du ja mal erforschen, wie das hier dritte Argument auch optional angegeben werden könnte.
Also vllt die eckigen Klammern erstmal weglassen, damit man wenigstens im Quelltext sehen kann, daß es sich gar nicht um ein optionales Argument handelt...


\def\VC(#1,#2)#3{%
...
}

und das Teil dann erstmal so


\VC(4,0){l}
%bzw.
\VC(4,0)l

aufrufen -- obwohl letztere Variante Verwirrung stiften kann: "\VC(4,0)lieber" wäre wie "\VC(4,0)l" und der Text "ieber".
MfG,

countbela666
09-03-2007, 13:02
hier mal ein weiterer Vorschlag:

\documentclass{scrartcl}
\makeatletter
\def\VC{\@ifnextchar[{\VC@i}{\VC@i[0]}} %Standardwert 0
\def\VC@i[#1](#2,#3){%
\def\tempa{#1}\def\tempb{1}
\ifx\tempa\tempb%
true:#2/#3
\else
false:#2/#3
\fi
}
\makeatother
\begin{document}
\VC[0](b,c)\par
\VC[1](b,c)\par
\VC[bla](b,c)\par
\VC(b,c)
\end{document}Grüße
Marcel

W2K
10-03-2007, 15:35
Warum geht denn Folgendes nicht?



\def\tempa{#1}\def\tempb{1}
\ifx\tempa\tempb%
width:#2+#3
\else
width:#2+#3
\fi
\psframe[linewidth=0.4pt, hatchangle=45, fillstyle=vlines,
hatchcolor=black, linecolor=black, hatchwidth=0.4pt]
(#1,#2)(#1+width,#2+width)

rais
10-03-2007, 17:00
Warum geht denn Folgendes nicht?

öhmm,


width:#2+#3

gibt nur einen entsprechenden String aus...




\psframe[linewidth=0.4pt, hatchangle=45, fillstyle=vlines,
hatchcolor=black, linecolor=black, hatchwidth=0.4pt]
(#1,#2)(#1+width,#2+width)

war #1 jetzt nicht Dein Flag? Genau was willst Du eigentlich erreichen bzw. wie sieht Dein \psframe denn bisher im Code aus?

MfG,

W2K
10-03-2007, 20:34
Hallo,

ich möchte den \psframe an der Stelle (#1, #2) zeichnen. Die zweite Ecke des Frames soll um (#1 + 0.5,#2 + 0.5) gegenüber den Koordinaten (#1,#2) verschoben werden.

rais
11-03-2007, 20:46
Moin moin,


ich möchte den \psframe an der Stelle (#1, #2) zeichnen. Die zweite Ecke des Frames soll um (#1 + 0.5,#2 + 0.5) gegenüber den Koordinaten (#1,#2) verschoben werden.
Nun, von pstricks versteh' ich leider zu wenig, um Dir dabei helfen zu können, aber vllt lässt sich ja folgendes Beispiel entsprechend adaptieren:


\documentclass{scrartcl}
\usepackage{calc}
\newlength{\myx}
\newlength{\myy}
\newcommand\myunit{pt}
\newcommand\mydebug{}
\makeatletter
\def\VC{\@ifnextchar[{\VC@i}{\VC@i[0.5]}} %Standardwert 0.5
\def\VC@i[#1](#2,#3){%
\setlength{\myx}{#2 \myunit + #1 \myunit}
\setlength{\myy}{#3 \myunit + #1 \myunit}
\rule{\myx}{\myy} \ifx\mydebug\empty\relax\else (\the\myx, \the\myy)\fi
}%\VC[offset](x,y)
\makeatother
\begin{document}
\VC[0](30,50)\par
\VC(30,50) -- default\par
\VC[-10](30,50)\par
\end{document}

-- oder wofür genau wolltest Du den dritten (bzw. hier den ersten) Parameter?
MfG,

W2K
12-03-2007, 00:43
Mit dem dritten Argument soll die Richtung der Schraffur gesteuert werden. In dem von mir angegeben Beispiel ist das der "hatchangle".

Mein Ziel ist es ein Rechteck mit Schraffur zu zeichnen, in dessen Mitte sich ein Kreis befindet.

Ganz perfekt wäre es, wenn die Breite des Rechtecks noch optional angegeben werden könnte - wenn die Werte fehlen wird ein Standardwert von W=0.5 und H=0.5 verwendet.

Ich habe mal versucht das Beispiel von Dir umzusetzen - konnte es aber noch nicht prüfen...


\documentclass{scrartcl}
\usepackage{calc}
\newlength{\myx}
\newlength{\myy}
\newcommand\myunit{pt}
\newcommand\mydebug{}

\makeatletter
\def\VC{\@ifnextchar[{\VC@i}{\VC@i[0.5]}} %Standardwert 0.5
\def\VC@i[#1](#2,#3){%
\setlength{\myx}{#1}
\setlength{\myy}{#2}
\setlength{\myw}{#1 + 0.5}
\setlength{\myh}{#2 + 0.5}
\psframe[linewidth=0.4pt, hatchangle=45, fillstyle=vlines,
hatchcolor=black, linecolor=black, hatchwidth=0.4pt]
(\myx,\myy)(\myw,\myh)
}%\VC[offset](x,y)
\makeatother

\begin{document}
\VC[0](30,50)\par
\VC(30,50) -- default\par
\VC[-10](30,50)\par
\end{document}


Frage:
1. Warum steht denn die Definition innerhalb \makeatletter und \makeatother?
2. Welche Bedeutung @....-Anweisungen

sommerfee
12-03-2007, 09:31
\def\VC{\@ifnextchar[{\VC@i}{\VC@i[0.5]}} %Standardwert 0.5
\def\VC@i[#1](#2,#3){%

Idee: Dies durch



\newcommand\VC[1][0.5]{\VCi[#1]} %Standardwert 0.5
\def\VCi[#1](#2,#3){%


ersetzen, das ist zwar das gleiche in grün, aber vielleicht für den reinen LaTeX-Anwender verständlicher!? (Und man kann sich dann auch das \makeatletter...\makeatother sparen.)



1. Warum steht denn die Definition innerhalb \makeatletter und \makeatother?
2. Welche Bedeutung @....-Anweisungen

Schaue mal hier: http://www.dante.de/faq/de-tex-faq/html/makros4.html#52

Das "@" Zeichen wird von Klassen- bzw. Paketautoren sehr gerne benutzt, weil damit sichergestellt ist, daß dieses (interne) Makro bzgl. des Namens nicht mit einer Makrodefinition eines LaTeX-Anwenders in Konflikt gerät und auch nicht vom LaTeX-Anwender ohne weiteres benutzt werden kann. (Und damit es nicht mit anderen Klassen/Paketen in Konflikt gerät, stellt man dem "@" gerne den Namen der Klasse/des Paketes voran, also z.B. \paket@macroname.)

Man kann das ein wenig mit dem "public" und "protected" in C++ vergleichen.

Liebe Grüße,
Axel

W2K
13-03-2007, 21:40
\newlength{\myx}
\newlength{\myy}
\newlength{\myw}
\newlength{\myh}
\newcommand\myunit{cm}
%
\makeatletter
\def\CV(#1,#2)(#3,#4)[#5,#6]{%
\setlength{\myx}{#1\myunit}
\setlength{\myy}{#2\myunit}
\setlength{\myw}{#1\myunit + #3\myunit}
\setlength{\myh}{#2\myunit + #4\myunit}
\psframe[linewidth=0.4pt, hatchangle=#5, fillstyle=vlines,
hatchcolor=black, linecolor=black, hatchwidth=0.4pt,
hatchsep=#6pt, hatchcolor=gray]
(\myx,\myy)(\myw, \myh)
\setlength{\myx}{\myw - #3\myunit/2}
\setlength{\myy}{\myh - #4\myunit/2}
\psdots[dotscale=0.8, linecolor=black](\myx, \myy)
}%\CV[offset](x,y)
\makeatother

\begin{document}
\psset{xunit=1cm, yunit=1cm}
\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){
\CV(0.0,0.0)(0.5,0.5)[45,40]
\CV(0.5,0.0)(0.5,0.5)[45,2.5]
\CV(1.0,0.0)(0.5,0.5)[45,40]
\CV(1.5,0.0)(0.5,0.5)[45,2.5]
\CV(2.0,0.0)(0.5,0.5)[45,40]
\CV(2.5,0.0)(0.5,0.5)[45,2.5]
\CV(3.0,0.0)(0.5,0.5)[45,40]
\CV(3.5,0.0)(0.5,0.5)[45,2.5]
\CV(4.0,0.0)(0.5,0.5)[45,40]
\CV(4.5,0.0)(0.5,0.5)[45,2.5]
\CV(5.0,0.0)(0.5,0.5)[45,40]
}
\end{pspicture}
\end{document}


So, ich habe nun mehr oder weniger das umgesetzt, was ich erreichen wollte. Ich stehe allerdings vor einem neuen Problem.

"Optional" soll an \CV der Schraffurwinkel (#5) und die Fülldichte/-abstand (#6) übergeben werden.

1. Ich weiß allerdings nicht, wie ich default-Werte setze, da ich die Reihenfolge geändert habe und zwei Elemente optional sind.

2. Würde ich gerne die Schraffur verhindern, wenn für #6 kein Wert angegeben wird. Das schreit also nach einer Fallunterscheidung?
Ich verstehe aber nicht, wie in dem unten angegebenen Beispiel der Vergleich erfolgt. Wie macht man das also am geschicktesten?
(Das Aufspreizen des Füllmusters funktioniert halt nicht...)

3. Weiß jemand, aus welchem Grund manche (schwarze) Rechteck-Linien dicker wirken?

voss
13-03-2007, 22:19
So, ich habe nun mehr oder weniger das umgesetzt, was ich erreichen wollte. Ich stehe allerdings vor einem neuen Problem.

"Optional" soll an \CV der Schraffurwinkel (#5) und die Fülldichte/-abstand (#6) übergeben werden.

1. Ich weiß allerdings nicht, wie ich default-Werte setze, da ich die Reihenfolge geändert habe und zwei Elemente optional sind.

2. Würde ich gerne die Schraffur verhindern, wenn für #6 kein Wert angegeben wird. Das schreit also nach einer Fallunterscheidung?
Ich verstehe aber nicht, wie in dem unten angegebenen Beispiel der Vergleich erfolgt. Wie macht man das also am geschicktesten?
(Das Aufspreizen des Füllmusters funktioniert halt nicht...)

3. Weiß jemand, aus welchem Grund manche (schwarze) Rechteck-Linien dicker wirken?

-- mit calc ist das alles ein wenig Krampf ...
-- Unterschiedliche Linien sind nur ein Darstellungsproblem, sollte beim Druck
nicht sichtbar sein.
-- optionale Argumente immer nach vorne.

Herbert



\documentclass{article}
\usepackage{pstricks,pst-plot}
\SpecialCoor

\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2](#3,#4)(#5,#6){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines,
hatchcolor=black, hatchwidth=0.4pt,hatchsep=#2pt,hatchcolor=gray}\fi
\psframe[linewidth=0.4pt](#3,#4)(!#3 #5 add #4 #6 add)
\psdots[dotscale=0.8, linecolor=black](!
#3 #5 add #5 2 div sub #4 #6 add #6 2 div sub)
}}%\CV[offset](x,y)
\makeatother

\begin{document}
\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){%
\CV(0.0,0.0)(0.5,0.5)
\CV[45,2.5](0.5,0.0)(0.5,0.5)
\CV(1.0,0.0)(0.5,0.5)
\CV[45,2.5](1.5,0.0)(0.5,0.5)
\CV(2.0,0.0)(0.5,0.5)
\CV[45,2.5](2.5,0.0)(0.5,0.5)
\CV(3.0,0.0)(0.5,0.5)
\CV[45,2.5](3.5,0.0)(0.5,0.5)
\CV(4.0,0.0)(0.5,0.5)
\CV[45,2.5](4.5,0.0)(0.5,0.5)
\CV(5.0,0.0)(0.5,0.5)%
}
\end{pspicture}
\end{document}

W2K
14-03-2007, 10:31
Ähm,

irgendwie funktioniert Dein Beispiel nicht bei mir. LaTeX liefert folgenden Fehlercode:



! Missing = inserted for \ifnum.
<to be read again>
.
l.120 }






\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2](#3,#4)(#5,#6){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines, %
hatchcolor=black, hatchwidth=0.4pt,hatchsep=#2pt, %
hatchcolor=gray}
% \else \psset{fillstyle=solid, hatchcolor=black,
% hatchwidth=0.4pt,hatchsep=#2pt}
\fi
\psframe[linewidth=0.4pt](#3,#4)(!#3 #5 add #4 #6 add)
\psdots[dotscale=0.8, linecolor=black](!
#3 #5 add #5 2 div sub #4 #6 add #6 2 div sub)
}}%\CV[offset](x,y)
\makeatother

Salnic
14-03-2007, 10:58
komisch, bei mir läuft es wunderbar, vergleiche mal Deine Packete (\listfiles}

Salnic

***********
*File List*
article.cls 2005/09/16 v1.4f Standard LaTeX document class
size10.clo 2005/09/16 v1.4f Standard LaTeX file (size option)
pstricks.sty 2006/08/10 v0.32 LaTeX wrapper for `PSTricks' (RN,HV)
pstricks.tex 2006/12/22 v1.15 `PSTricks' (tvz)
xcolor.sty 2007/01/21 v2.11 LaTeX color extensions (UK)
color.cfg 2005/12/29 v1.1 MiKTeX 'color' configuration
dvips.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
pst-plot.sty 2004/07/15 package wrapper for pst-plot.tex
pst-plot.tex 2004/05/18 1.41 `pst-plot' (tvz)
***********

W2K
14-03-2007, 11:23
Das wäre das erste Mal, dass etwas bei mir nicht funktioniert aufgrund der Pakete...


scrbook.cls 2004/09/16 v2.9t LaTeX2e KOMA document class
scrlfile.sty 2004/09/16 v2.9t LaTeX2e KOMA package
bk12.clo 2004/02/16 v1.4f Standard LaTeX file (size option)
typearea.sty 2004/09/16 v2.9t LaTeX2e KOMA package
babel.sty 2004/11/20 v3.8d The Babel package
ngermanb.ldf 2004/02/20 v2.6m new German support from the babel system
inputenc.sty 2004/02/05 v1.0d Input encoding file
latin1.def 2004/02/05 v1.0d Input encoding file
geometry.sty 2002/07/08 v3.2 Page Geometry
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
geometry.cfg
color.sty 1999/02/16
color.cfg 2005/02/03 v1.3 color configuration of teTeX/TeXLive
dvips.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
dvipsnam.def 1999/02/16 v3.0i Driver-dependant file (DPC,SPQR)
graphicx.sty 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)
trig.sty 1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive
wrapfig.sty 2003/01/31 v 3.6
multicol.sty 2004/02/14 v1.6e multicolumn formatting (FMi)
lscape.sty 2000/10/22 v3.01 Landscape Pages (DPC)
pstricks.sty 2006/08/10 v0.32 LaTeX wrapper for `PSTricks' (RN,HV)
pstricks.tex 2006/04/29 v1.14c `PSTricks' (tvz)
xcolor.sty 2005/12/21 v2.09 LaTeX color extensions (UK)
color.cfg 2005/02/03 v1.3 color configuration of teTeX/TeXLive
colortbl.sty 2001/02/13 v0.1j Color table columns (DPC)
array.sty 2003/12/17 v2.4a Tabular extension package (FMi)
pst-vue3d.sty 2000/07/15 package wrapper for pst-vue3d.tex (ML)
pst-vue3d.tex 2005/02/21 v1.21 `PST-VUE3D' (ML)
pst-xkey.tex 2005/11/25 v1.6 PSTricks specialization of xkeyval (HA)
xkeyval.sty 2005/11/25 v2.5e package option processing (HA)
xkeyval.tex 2005/11/25 v2.5e key=value parser (HA)
pst-plot.sty 2004/07/15 package wrapper for pst-plot.tex
pst-plot.tex 2004/05/18 1.41 `pst-plot' (tvz)
pst-gr3d.sty 2005/01/13 package wrapper for pst-gr3d.tex (hv)
pst-gr3d.tex 2005/09/03 v1.00 `PST-gr3d' (dg)
subfig.sty 2004/01/28 ver: 1.2 subfig package
caption.sty 2004/07/16 v3.0c Customising captions (AS)
amsmath.sty 2000/07/18 v2.13 AMS math features
amstext.sty 2000/06/29 v2.01
amsgen.sty 1999/11/30 v2.0
amsbsy.sty 1999/11/29 v1.2d
amsopn.sty 1999/12/14 v2.01 operator names
accents.sty 2000/08/06 v1.2 Math Accent Tools
cancel.sty 2000/03/12 v2.1 Cancel math terms
setspace.sty 2000/12/01 6.7 Contributed and Supported LaTeX2e package
footmisc.sty 2004/05/02 v5.3c a miscellany of footnote facilities
nofloat.sty
hyperref.sty 2003/11/30 v6.74m Hypertext links for LaTeX
pd1enc.def 2003/11/30 v6.74m Hyperref: PDFDocEncoding definition (HO)
hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive and teTeX
url.sty 2005/06/27 ver 3.2 Verb mode for urls, etc.
hdvips.def 2003/11/30 v6.74m Hyperref driver for dvips
pdfmark.def 2003/11/30 v6.74m Hyperref definitions for pdfmark specials
ifthen.sty 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
calc.sty 1998/07/07 v4.1b Infix arithmetic (KKT,FJ)
multido.sty 2004/05/17 package wrapper for PSTricks `multido.tex', (HV/RN)
ragged2e.sty 2003/03/25 v2.04 ragged2e Package (MS)
everysel.sty 1999/06/08 v1.03 EverySelectfont Package (MS)


Und das ist explizit mein Code:


%------------------------------------------------------------------------------
\documentclass[a4paper, oneside, headsepline, 12pt]{scrbook}
%------------------------------------------------------------------------------
%
% Zustzliche Paktete
%
%------------------------------------------------------------------------------
\usepackage[ngerman]{babel} % Schriftsatz; neue dt. Rechtschreibung
\usepackage[latin1]{inputenc} % Dateicodierung:: Linux: latin1,
% Windows: ansinew
\usepackage[left=2.25cm, %
right=2.25cm, %
top=1.5cm, %
bottom=1.5cm, %
headheight=1cm, %
headsep=1.5cm, %
footskip=1.0cm, %
includeheadfoot]{geometry}
% Geometrie der Seiten setzen
\usepackage{color} % Farben
\usepackage{graphicx} % Grafiken
\usepackage{wrapfig} % Textumflossene Grafiken einfgen
\usepackage{multicol} % Paket fr mehrspaltige Dokumente
\usepackage{lscape} % Einzelne Seiten auf Landscape-Format
\usepackage[table]{pstricks} % Packet, um PS-Zeichnungen einzufgen
\usepackage{pst-vue3d, pst-plot}
\usepackage{pst-gr3d}
\usepackage{subfig} % Bilder untereinander
\usepackage{amsmath} % Erweiterungen mathematischer Umgebungen
\usepackage{accents} % Akzente auf Variablen setzen
\usepackage{cancel} % Durchstreichen mathematischer Ausdrcke
\usepackage{setspace} % Zeilenabstand setzen
\usepackage{caption} % Bildunterschriften
\usepackage[flushmargin,
bottom]{footmisc} % Funoten
\usepackage{nofloat} % Nicht-flieende Bilderumgebung
\usepackage[colorlinks=true, %
citecolor=red, %
linkcolor=blue, %
pdfpagelabels=true]{hyperref}
\usepackage{ifthen}
\usepackage{calc}
\usepackage{multido}
\usepackage{pstricks}
%
\let\orghdots\hdots
\let\orgddots\ddots
\let\orgvdots\vdots
\def\defaultscale{.5} %%% Standardwert
\renewcommand*{\hdots}[1][\defaultscale]{$\scalebox{#1}{$\orghdots$}$}
\renewcommand*{\ddots}[1][\defaultscale]{$\scalebox{#1}{$\orgddots$}$}
\renewcommand*{\vdots}[1][\defaultscale]{$\scalebox{#1}{$\orgvdots$}$}
%
\newcommand{\TCircle}[1]{
\setlength{\unitlength}{10pt}
\begin{pspicture}(0.0, 0.38)
\psovalbox[framesep=1pt, boxsep=1pt, linewidth=0.5pt,
linecolor=black,fillstyle=solid]{#1}
\end{pspicture}
}

\newcommand{\FJAC}[1]{\mathcal{F}_{#1}}

\newcommand{\Q}[1]{Q_{#1}}
\newcommand{\p}[2]{\frac{\partial#1}{\partial#2}}
%
\newcommand{\SD}{
\begin{pspicture}(0.0, 0.0)
\scriptsize{$\hdots$}
\end{pspicture}
}
\newcommand{\D}{
\begin{pspicture}(0.0, 0.0)
\psframe[linewidth=0.2pt,linestyle=dashed,dash=0.5mm 0.5mm,
framearc=0.0,fillstyle=solid,fillcolor=white](-0.1,-0.005)(0.1,0.195)
%\psframebox[linewidth=0.5pt,linestyle=dashed,dash=0.5mm 0.5mm,
% framesep=0.3mm,fillstyle=solid,fillcolor=white]{
% \scriptsize{$\mathcal{B}$}}
\end{pspicture}
}
\newcommand{\RES}[1]{\mathcal{R}es_{#1}}
\newcommand{\FJ}[2]{
\begin{pspicture}(0.0, 0.33)
%\psframebox[linewidth=0.5pt,linestyle=dashed,dash=1mm 1mm,
% fillstyle=solid,fillcolor=white]{
\scriptsize{$\FJAC{#1}^{{#2}}$}
%}
\end{pspicture}
}

\listfiles

\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2](#3,#4)(#5,#6){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines, %
hatchcolor=black, hatchwidth=0.4pt,hatchsep=#2pt, %
hatchcolor=gray}
% \else \psset{fillstyle=solid, hatchcolor=black,
% hatchwidth=0.4pt,hatchsep=#2pt}
\fi
\psframe[linewidth=0.4pt](#3,#4)(!#3 #5 add #4 #6 add)
\psdots[dotscale=0.8, linecolor=black](!
#3 #5 add #5 2 div sub #4 #6 add #6 2 div sub)
}}%\CV[offset](x,y)

\makeatother

\begin{document}
\begin{nofloat}{figure}
\begin{minipage}{0.48\textwidth}
\begin{center}
\psset{xunit=1cm, yunit=1cm}
\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){
\CV[1.2,45](0.0,0.0)(0.5,0.5)
\CV[0.0,45](0.5,0.0)(0.5,0.5)
}
\rput[r](-0.25,0.5){\scriptsize{$j-2$}}
\rput[l](-0.45,1.5){\scriptsize{$j$}}
\rput[r](-0.25,2.5){\scriptsize{$j+2$}}
\rput[l](6.4,0){\scriptsize{$\xi_1$}}
\rput[l](-0.1,4.0){\scriptsize{$\xi_2$}}
\end{pspicture}
\end{center}
\caption{Relaxations-Verfahren}
\label{fig:Relax1}
\end{minipage}
\end{nofloat}
\end{document}

Salnic
14-03-2007, 12:06
nein, es lag tatsächlich nicht an Packeten, Dein Bsp. läuft bei mir auch nicht, der Fehler liegt in den beiden \CV - Zeilen

\CV[1.2,45](0.0,0.0)(0.5,0.5) % --> Fehler
\CV[0.0,45](0.5,0.0)(0.5,0.5) % --> Fehler

ersetze ich diese Zeilen durch \CV von voss,

\CV(0.0,0.0)(0.5,0.5)
\CV[45,2.5](0.5,0.0)(0.5,0.5)


dann klappt es auch; also guck Dir noch mal die Zahlenwerte an, ich bin dazu überfordert.


Salnic

W2K
14-03-2007, 14:35
Hi,

ich muss noch mal nachfragen:

Wofür steht das @i? etc.???


\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}


Ich will noch optional eine Linienfarbe übergeben.


\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2,#3](#4,#5)(#6,#7){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines, %
hatchcolor=#3, hatchwidth=0.4pt,hatchsep=#2pt, %
hatchcolor=gray}
\else \psset{fillstyle=solid, fillcolor=white,
hatchwidth=0.4pt,hatchsep=#2pt}
\fi
\psframe[linewidth=0.4pt](#4,#5)(!#4 #6 add #5 #7 add)
\psdots[dotscale=0.6, linecolor=black](!
#4 #6 add #6 2 div sub #5 #7 add #7 2 div sub)
}}%\CV[offset](x,y)
\makeatother


Danke.

voss
14-03-2007, 15:35
Hi,

ich muss noch mal nachfragen:

Wofür steht das @i? etc.???

nichts weiter als ein Buchstabe, hätte auch Egon dafür nehmen können





\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}


Ich will noch optional eine Linienfarbe übergeben.

dann musst du halt ein zweites optionales Argument übergeben. Aber du
solltest überhaupt erst einmal klären, was du denn _grundsätzlich_ als
optional betrachtest und was nicht ...

Weiterhin kannst du nicht nach Lust und Laune, deine Parameter vertauschen
\CVS[WINKEL, hatchwidth]...
und nicht umgekehrt. Ist doch klar, dass es dann Probleme gibt.

Und \SpecialCoor _nach_ dem Laden von PSTricks fehlt auch. Weiterhin solltest
du _nur_ das Paket caption laden und dann einfach deine Grafik erstellen und
dann \captof{figure}{Unterschrift}



%------------------------------------------------------------------------------
\documentclass[12pt]{scrbook}
% Geometrie der Seiten setzen
\usepackage[table]{pstricks} % Packet, um PS-Zeichnungen einzufgen
\usepackage{pst-plot} % Packet, um PS-Zeichnungen einzufgen
\SpecialCoor
%

\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2](#3,#4)(#5,#6){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines,
hatchcolor=black, hatchwidth=0.4pt,hatchsep=#2pt,
hatchcolor=gray}
% \else \psset{fillstyle=solid, hatchcolor=black,
% hatchwidth=0.4pt,hatchsep=#2pt}
\fi
\psframe[linewidth=0.4pt](#3,#4)(!#3 #5 add #4 #6 add)
\psdots[dotscale=0.8, linecolor=black](!
#3 #5 add #5 2 div sub #4 #6 add #6 2 div sub)
}}%\CV[offset](x,y)

\makeatother

\begin{document}

\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){%
\CV[45,1.2](0.0,0.0)(0.5,0.5)
\CV[45,0.0](0.5,0.0)(0.5,0.5)%
}
\rput[r](-0.25,0.5){\scriptsize{$j-2$}}
\rput[l](-0.45,1.5){\scriptsize{$j$}}
\rput[r](-0.25,2.5){\scriptsize{$j+2$}}
\rput[l](6.4,0){\scriptsize{$\xi_1$}}
\rput[l](-0.1,4.0){\scriptsize{$\xi_2$}}
\end{pspicture}

\end{document}


Herbert

W2K
14-03-2007, 15:55
Ich glaube, ich habe mich nicht verständlich gemacht. Ich brauche noch ein drittes optionales Argument, so dass der Aufruf lautet:



\CV[HATCHANGLE, HATCHSEP, LINECOLOR](X,Y)(W,H)

Ich glaube eigentlich nicht, dass ich in meiner bisherigen Definition die Reihenfolge vertauscht habe. Ich erhalte eine Fehlermeldung, weil das Argument #3 anscheinend nicht richtig eingebunden ist.


\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2,#3](#4,#5)(#6,#7){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines, %
hatchcolor=#3, hatchwidth=0.4pt,hatchsep=#2pt, %
hatchcolor=gray, linecolor=#3}
\else \psset{fillstyle=solid, fillcolor=white,
hatchwidth=0.4pt, linecolor=#3}
\fi
\psframe[linewidth=0.4pt](#4,#5)(!#4 #6 add #5 #7 add)
\psdots[dotscale=0.6, linecolor=black](!
#4 #6 add #6 2 div sub #5 #7 add #7 2 div sub)
}}%\CV[offset](x,y)
\makeatother

Ich wollte nur zum Ausdruck bringen, dass mir die Zeile

\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
nicht klar ist.

voss
14-03-2007, 16:07
Ich glaube, ich habe mich nicht verständlich gemacht. Ich brauche noch ein drittes optionales Argument, so dass der Aufruf lautet:



\CV[HATCHANGLE, HATCHSEP, LINECOLOR](X,Y)(W,H)



das ist dann _ein_ optionales Argument.



Ich glaube eigentlich nicht, dass ich in meiner bisherigen Definition die Reihenfolge vertauscht habe. Ich erhalte eine Fehlermeldung, weil das Argument #3 anscheinend nicht richtig eingebunden ist.
[code]

in deinemersten Beispiel hattest du


\CV(0.0,0.0)(0.5,0.5)[45,40]
\CV(0.5,0.0)(0.5,0.5)[45,2.5]
\CV(1.0,0.0)(0.5,0.5)[45,40]
\CV(1.5,0.0)(0.5,0.5)[45,2.5]
...

d.h. Winkel, hatchwidth. Jetzt hast du eine andere Reihenfolge!
Mach ein komplettes Beispiel, was deinen Fehler zeigt und lass dabei vor allen
Dingen ALLES weg, was damit nichts zu tun hat ...

Herbert

W2K
14-03-2007, 16:25
Ich hatte es so verstanden, dass
HATCHANGLE=#1,
HATCHSEP=#2 und
LINECOLOR=#3 (was noch nicht funktioniert)
drei optionale Argumente sind (, die auch in der Reihenfolge getauscht werden können?).

Ich möchte den Befehl, so erweitern, dass die Liniefarbe _optional_ angegeben werden kann - geschieht dies nicht, ist die LINIENFARBE standardmäßig schwarz.



%------------------------------------------------------------------------------
\documentclass[a4paper, oneside, headsepline, 12pt]{scrbook}
%------------------------------------------------------------------------------
%
% Zustzliche Paktete
%
%------------------------------------------------------------------------------
\usepackage[ngerman]{babel} % Schriftsatz; neue dt. Rechtschreibung
\usepackage[latin1]{inputenc} % Dateicodierung:: Linux: latin1,
% Windows: ansinew
\usepackage[left=2.25cm, %
right=2.25cm, %
top=1.5cm, %
bottom=1.5cm, %
headheight=1cm, %
headsep=1.5cm, %
footskip=1.0cm, %
includeheadfoot]{geometry}
% Geometrie der Seiten setzen
\usepackage{color} % Farben
\usepackage{graphicx} % Grafiken
\usepackage{wrapfig} % Textumflossene Grafiken einfgen
\usepackage{multicol} % Paket fr mehrspaltige Dokumente
\usepackage{lscape} % Einzelne Seiten auf Landscape-Format
\usepackage[table]{pstricks} % Packet, um PS-Zeichnungen einzufgen
\usepackage{pst-vue3d, pst-plot}
\usepackage{pst-gr3d}
\usepackage{subfig} % Bilder untereinander
\usepackage{amsmath} % Erweiterungen mathematischer Umgebungen
\usepackage{accents} % Akzente auf Variablen setzen
\usepackage{cancel} % Durchstreichen mathematischer Ausdrcke
\usepackage{setspace} % Zeilenabstand setzen
\usepackage{caption} % Bildunterschriften
\usepackage[flushmargin,
bottom]{footmisc} % Funoten
\usepackage{nofloat} % Nicht-flieende Bilderumgebung
\usepackage[colorlinks=true, %
citecolor=red, %
linkcolor=blue, %
pdfpagelabels=true]{hyperref}
\usepackage{ifthen}
\usepackage{calc}
\usepackage{multido}
\usepackage{pstricks}
%
\SpecialCoor
%
\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2,#3](#4,#5)(#6,#7){{
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines, %
hatchcolor=#3, hatchwidth=0.4pt,hatchsep=#2pt, %
hatchcolor=gray, linecolor=#3}
\else \psset{fillstyle=solid, fillcolor=white,
hatchwidth=0.4pt, linecolor=#3}
\fi
\psframe[linewidth=0.4pt](#4,#5)(!#4 #6 add #5 #7 add)
\psdots[dotscale=0.6, linecolor=black](!
#4 #6 add #6 2 div sub #5 #7 add #7 2 div sub)
}}%\CV[offset](x,y)

\makeatother

\begin{document}

\psset{xunit=1cm, yunit=1cm}
\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){
\CV[45,0.0,black](0.0,0.0)(0.5,0.5)
\CV[45,0.0,red](0.5,0.0)(0.5,0.5)
\CV[45,0.0,black](1.0,0.0)(0.5,0.5)
\CV[45,0.0,red](1.5,0.0)(0.5,0.5)
\CV[45,0.0](2.0,0.0)(0.5,0.5)
\CV[45,0.0](2.5,0.0)(0.5,0.5)
\CV[45,0.0](3.0,0.0)(0.5,0.5)
\CV[45,0.0](3.5,0.0)(0.5,0.5)
\CV[45,0.0](4.0,0.0)(0.5,0.5)
\CV[45,0.0](4.5,0.0)(0.5,0.5)
\CV[45,0.0](5.0,0.0)(0.5,0.5)
}
\end{pspicture}
\end{document}

voss
14-03-2007, 17:04
Ich hatte es so verstanden, dass
HATCHANGLE=#1,
HATCHSEP=#2 und
LINECOLOR=#3 (was noch nicht funktioniert)
drei optionale Argumente sind (, die auch in der Reihenfolge getauscht werden können?).

und wie soll bitteschön, dass Makro wissen, was was ist, wenn die Reihenfolge beliebig ist ...



Ich möchte den Befehl, so erweitern, dass die Liniefarbe _optional_ angegeben werden kann - geschieht dies nicht, ist die LINIENFARBE standardmäßig schwarz.


Warum lässt du denn in diesem Beispiel nicht die ganze Orgie an Paketen weg, die
gar nichts mit deinem Problem zu haben. Macht doch nur Arbeit, wenn ich die erst wieder
löschen muss, um zum eigentlichen Problem zu kommen???



\CV[Angle,hatchsep][Farbe]()()


ist nur _ein_ optionales Argument angegeben, dann _muss_ es grundsätzlich
[Angle,hatchsep] sein. _Beide_ können dagegen weggelassen werden.




\documentclass[12pt]{scrbook}
\usepackage{pstricks,pst-plot}
%
\SpecialCoor
%
\makeatletter
\def\CV{\@ifnextchar[\CV@i{\CV@i[0,0]}}
\def\CV@i[#1,#2]{\@ifnextchar[{\CV@ii[#1,#2]}{\CV@ii[#1,#2][black]}}
\def\CV@ii[#1,#2][#3](#4,#5)(#6,#7){{%
\ifnum#1>0 \psset{hatchangle=#1, fillstyle=vlines,
hatchcolor=#3, hatchwidth=0.4pt,hatchsep=#2pt,
linecolor=#3}
\else \psset{fillstyle=solid, fillcolor=white,
hatchwidth=0.4pt, linecolor=#3}
\fi
\psframe[linewidth=0.4pt](#4,#5)(!#4 #6 add #5 #7 add)
\psdots[dotscale=0.6, linecolor=black](!
#4 #6 add #6 2 div sub #5 #7 add #7 2 div sub)
}}%\CV[offset](x,y)

\makeatother

\begin{document}

\psset{xunit=1cm, yunit=1cm}
\begin{pspicture}(0, 0)(6,4.2)
\psaxes[labels=none,linewidth=0.4pt,Dx=0.5,Dy=0.5,
arrowsize=0.25, ticksize=0.04]{->}(0, 0)(6.25,3.7)
\rput[l](0.25,0.25){
\CV[45,1](0.0,0.0)(0.5,0.5)
\CV[45,2.0][red](0.5,0.0)(0.5,0.5)
\CV[0,2.0](1.0,0.0)(0.5,0.5)
\CV[45,3.0][red](1.5,0.0)(0.5,0.5)
\CV[45,1.0](2.0,0.0)(0.5,0.5)
\CV[45,2.0](2.5,0.0)(0.5,0.5)
\CV[0,3.0](3.0,0.0)(0.5,0.5)
\CV[45,2.0](3.5,0.0)(0.5,0.5)
\CV[45,3.0](4.0,0.0)(0.5,0.5)
\CV[45,2.0](4.5,0.0)(0.5,0.5)
\CV[45,3.0](5.0,0.0)(0.5,0.5)
}
\end{pspicture}
\end{document}


Herbert

W2K
14-03-2007, 17:26
Vielen Dank.