#1-Parameter soll statt Zahl Anzahl der Befehle ausgeben

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


sommerfee
Forum-Century
Forum-Century
Beiträge: 213
Registriert: Sa 12. Jul 2008, 08:02
Wohnort: Ich bin hier nicht mehr zu erreichen!

Beitrag von sommerfee »

sLy hat geschrieben:da ich im inet nichts über einen \toks befehl finde.
Gugst du hier: http://www.eijkhout.net/tbt/

Liebe Grüße,
Axel

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Mit e-TeX geht das auch expandierbar und ohne Tokenregister:

Code: Alles auswählen

\documentclass{minimal}

\usepackage{etex}
\usepackage{pst-circ}

\protected\def\WiderstandReihe(#1)(#2)#3{%
  \edef\x{\noexpand\multidipole(#1)(#2)\WiderstandReiheII{1}{#3}.}%
  \x
}

\def\WiderstandReiheII#1#2{%
  \unless\ifnum#2<#1
    \noexpand\resistor[labeloffset=0]{$R_{\number#1}$}%
    \expandafter\WiderstandReiheII\expandafter{\number\numexpr#1+1}{#2}%
  \fi
} 

\begin{document}

\begin{pspicture}[showgrid=true](0,0)(8,5)
  \pnode(0.5,4.5){A}
  \pnode(0.5,1.75){B}
  \pnode(7.5,1.75){C}
  \pnode(7.5,4.5){D}
  \battery(D)(A){$U_0$}
  \wire(A)(B)
  \wire(C)(D)
  \WiderstandReihe(B)(C){3}
\end{pspicture}

\end{document}

phi
Moderator
Moderator
Beiträge: 420
Registriert: Fr 6. Feb 2009, 21:28

Beitrag von phi »

Hier eine etwas einfachere Möglichkeit, die vor allem dokumentiere High-Level-Befehle benutzt. Ein bisschen Expansionskontrolle (mit \eappto und \noexpand) ist allerdings auch hier nötig.

Code: Alles auswählen

\documentclass{minimal}

\usepackage{etoolbox}
\usepackage{pst-circ}
\usepackage{multido}

\newrobustcmd*{\WiderstandReihe}[3]{%
  \def\x{\multidipole(#1)(#2)}%
  \Multido{\i=1+1}{#3}{%
    \eappto\x{\noexpand\resistor[labeloffset=0]{$R_{\i}$}}%
  }%
  \appto\x{.}%
  \x
}

\begin{document}

\begin{pspicture}[showgrid=true](0,0)(8,5)
  \pnode(0.5,4.5){A}
  \pnode(0.5,1.75){B}
  \pnode(7.5,1.75){C}
  \pnode(7.5,4.5){D}
  \battery(D)(A){$U_0$}
  \wire(A)(B)
  \wire(C)(D)
  \WiderstandReihe{B}{C}{3}
\end{pspicture}

\end{document}

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag von sLy »

Hi wiedermal.

Einfache Frage:
Wieso funktioniert das für sich alleine...:

Code: Alles auswählen

\newrobustcmd*{\SStandard}[2]{%
\psset {unit=#1cm}%
	\begin{pspicture}[showgrid=true](0,0)(8,5)%
		\def\x{%
			\pnode(0.5,4.5){A}%
			\pnode(0.5,1.75){B}%
			\pnode(7.5,1.75){C}%
			\pnode(7.5,4.5){D}%
			\battery (D)(A){$U_0$}%
		 	\wire (A)(B)%
		 	\wire (C)(D)%
		 	}%
		\eappto\x{\noexpand#2}%
		\x%	
	\end{pspicture}%
}
...aber NICHT, wenn ich phi's code und meinen zusammenlege?

Code: Alles auswählen

\documentclass{minimal}

\usepackage{etoolbox}
\usepackage{pst-circ}
\usepackage{multido}

\newrobustcmd*{\WiderstandReihe}[3]{%
  \def\x{\multidipole(#1)(#2)}%
  \Multido{\i=1+1}{#3}{%
    \eappto\x{\noexpand\resistor[labeloffset=0]{$R_{\i}$}}%
  }%
  \appto\x{.}%
  \x
}

\newrobustcmd*{\SStandard}[2]{%
\psset {unit=#1cm}%
	\begin{pspicture}[showgrid=true](0,0)(8,5)%
		\def\x{%
			\pnode(0.5,4.5){A}%
			\pnode(0.5,1.75){B}%
			\pnode(7.5,1.75){C}%
			\pnode(7.5,4.5){D}%
			\battery (D)(A){$U_0$}%
		 	\wire (A)(B)%
		 	\wire (C)(D)%
		 	}%
		\eappto\x{\noexpand#2}%
		\x%	
	\end{pspicture}%
}

\begin{document}
\SStandard{1}{\WiderstandReihe(B)(C){3}}
\end{document}

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 1997
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

pstricks

Beitrag von Stefan Kottwitz »

Hallo,
sLy hat geschrieben: Wieso funktioniert das für sich alleine...:
es funktioniert nicht für sich alleine, es fehlen Dokumentklasse, Pakete u.a. Daher lässt es sich nicht für einen Vergleich testen.
sLy hat geschrieben: ...aber NICHT, wenn ich phi's code und meinen zusammenlege?
"funktioniert nicht" ist zu vage - gibt es Fehler, Warnungen, fehlende oder falsche Ausgaben? Bei mir treten jedenfalls beim Übersetzen Fehlermeldungen auf. K.A. ob Du diese oder was anderes meinst.

Stefan

sLy
Forum-Anfänger
Forum-Anfänger
Beiträge: 29
Registriert: Mi 30. Sep 2009, 17:41

Beitrag von sLy »

Danke, hat sich erledigt.
Ich habe einfach sämtliche dateien bis auf .tex files gelöscht, dann ging es.

@Stefan
nächstes mal beschreib ichs genauer. kritik ist angekommen ;)

mfg
sLy

Antworten