Discussion:
\myput
Dr. Andreas Drauschke
2014-06-28 22:06:10 UTC
Permalink
Hallo Liste,

ich habe folgendes Problem. Ich möchte mir einen Befehl definieren, der
eine Positionierung eines von mir gewählten Symbols in einer
Picture-Umgebung immer um exakt denselben Wert verändert positioniert,
also etwas in der Art

gewünschte Eingabe: \myput(a,b)
soll ausgegeben als \put(a-1.5,b-1.5){\MeinSymbol}

Durch eine solche Umdefinition würde ich erreichen, dass ich nicht
ständig stupide bei dem einen Symbol umrechnen muss, wo das nun genau zu
positionieren wäre. Es genügt, wenn ich eine Definition für nur eine
Schriftgröße habe (ich verwende nur genau diese eine)

Hat jemand eine Idee, wie ich das möglichst einfach lösen kann? Mein
Versuch, das ganze über einen selbstdefinierten Längenparameter zu
definieren, ist leider schlichtweg kläglich gescheitert :o(

Danke für die Hilfe

Andreas

--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Axel Berger
2014-06-28 22:15:47 UTC
Permalink
Post by Dr. Andreas Drauschke
gewünschte Eingabe: \myput(a,b)
soll ausgegeben als \put(a-1.5,b-1.5){\MeinSymbol}
Auf das Risiko, mich unsäglich zu blamieren, und mangels Minimalbeispiel
vollkommen ungetestet, würde nicht dies bereits ausreichen?

\usepackage{calc}
\newcommand{\myput}[3][\MeinSymbol]{\put(#2-1.5,#3-1.5){#1}}

Axel

--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Niklas Nawrath
2014-06-29 08:33:21 UTC
Permalink
Hast du dir schonmal das Paket multido angeschaut?
Das funktioniert ungefähr so:
\multido{\nA = 10.0 + -1.5, \nB= 10.0 + -1.5}{7}{
\put(\nA,\nB){\DeinSymbol
}

Aufpassen bei den Zählern, die müssen in der Anzahl der nachkommastellen
übereinstimmen, sonst gibts Probleme bei der Berechnung.

Niklas
Post by Axel Berger
Post by Dr. Andreas Drauschke
gewünschte Eingabe: \myput(a,b)
soll ausgegeben als \put(a-1.5,b-1.5){\MeinSymbol}
Auf das Risiko, mich unsäglich zu blamieren, und mangels Minimalbeispiel
vollkommen ungetestet, würde nicht dies bereits ausreichen?
\usepackage{calc}
\newcommand{\myput}[3][\MeinSymbol]{\put(#2-1.5,#3-1.5){#1}}
Axel
--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Dr. Andreas Drauschke
2014-06-29 08:52:57 UTC
Permalink
Hallo,

ne, keine Blammage. Mit einem Minimalbeispiel ist das immer so eine
Sache, wenn man gar keinen Anhaltspunkt hat :o). Ich habe die Idee nun
mal in ein Minimalbeispiel gegossen:

\providecommand*{\thepage}{\arabic{page}}
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{epic,eepic,pifont}
\usepackage{calc}
\newcommand{\myput}[2]{\put(#1-1.5,#2-1.5){\ding{108}}}

\begin{document}
\begin{frame}
\frametitle{Überschrift}
\begin{picture}(0,65)
\myput(120,10)
\end{picture}
\end{frame}
\end{document}

das führt leider zu aufgrund der Definition \put(#2-1.5,#3-1.5) zu einer
Reihe von Fehlermeldungen. Zuerst zu

! Illegal unit of measure (pt inserted).

weil er bei der Berechnung scheinbar einheitenbehaftete Größen wünscht
und dann zu

! A <box> was supposed to be here.

weil der \put-Befehl gerade keine Einheiten enthalten darf.

Fast soweit war ich mit meinem erfolglosen (und viel komplizierteren)
Ansatz auch schon. Ich habe versucht, die Einheiten abzuschneiden, was
mir mit folgendem im Netz gefundenen Codeschnipsel gelungen war:

Definitionen.sty:
\def\MM#1{%
\@tempdima=#1%
\def\vn##1.##2!!{%
\global\edef\vara{##1}%
\global\edef\varb{##2}%
}%
\expandafter\vn\the\@tempdima!!%
\vara.%
\def\ziffer{%
\@tempdimb=0.\varb%
\@tempdimb=10\@tempdimb%
\expandafter\vn\the\@tempdimb!!%
\vara%
}%
\ziffer\ziffer\ziffer\ziffer\ziffer%
}

\def\Punkt(#1,#2){
\setlength\xwert{#1}
\advance\xwert by -1.25pt
\setlength\ywert{#2}
\advance\ywert by -1.25pt
\put(0,50){xwert: \MM{\the\xwert}}
\put(0,30){xwert: \MM{\the\ywert}}
}

Das eigentliche Minimalbeispiel (Test.tex):
\providecommand*{\thepage}{\arabic{page}}
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{epic,eepic,pifont}
\usepackage{Definitionen}

\newlength\xwert
\newlength\ywert

\begin{document}
\begin{frame}
\frametitle{Überschrift}
\begin{picture}(0,65)
\Punkt(120pt,10pt)
\end{picture}
\end{frame}
\end{document}

Dieser Code funktioniert (abgsehen von 2 Warnungen) perfekt und macht
auch das, was er soll. Wenn ich nun aber in Definitionen.sty die Zeilen
\put(0,50){xwert: \MM{\the\xwert}}
\put(0,30){xwert: \MM{\the\ywert}}

durch
\put(\MM{the\xwert},\MM{the\ywert}){Test}

ersetze, bekomme ich die Fehlermeldung

! A <box> was supposed to be here.

Also scheint der übergebene Wert zwar rein formal die gewünschte Zahl zu
sein, aber keine von \put verarbeitbare Größe. Wie schon in der ersten
Mail erwähnt - meine Versuche waren bisher recht erfolglos und ich habe
keine Idee mehr, wie das ganze gehen könnte.

Danke für die Hilfe
Andreas
Post by Axel Berger
Post by Dr. Andreas Drauschke
gewünschte Eingabe: \myput(a,b)
soll ausgegeben als \put(a-1.5,b-1.5){\MeinSymbol}
Auf das Risiko, mich unsäglich zu blamieren, und mangels Minimalbeispiel
vollkommen ungetestet, würde nicht dies bereits ausreichen?
\usepackage{calc}
\newcommand{\myput}[3][\MeinSymbol]{\put(#2-1.5,#3-1.5){#1}}
Axel
--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Axel Berger
2014-06-29 17:55:22 UTC
Permalink
Post by Dr. Andreas Drauschke
\usepackage{epic,eepic,pifont}
\myput(120,10)
das führt leider zu aufgrund der Definition \put(#2-1.5,#3-1.5) zu einer
Reihe von Fehlermeldungen.
Leider habe ich nicht alle Deine Pakete und kann deshalb nicht testen.
Aufgrund der Definition als \newcommand ist die Syntax Deines Aufrufes aber
falsch, es muß

\myput{120}{10}

heißen. Vermutlich würde ich bei mir das ganze aber in ein Editormakro
verlagern und in die Datei nur die Standardbefehle schreiben (Originalwerte
als Kommentar dahinter).

Axel

--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Markus Kohm
2014-06-30 07:14:44 UTC
Permalink
Post by Dr. Andreas Drauschke
weil der \put-Befehl gerade keine Einheiten enthalten darf.
Das lässt sich mit dem Paket picture leicht ändern. Ist aber in diesem Fall
nicht notwendig. Siehe dazu meinen anderen Kommentar.

Gruß
Markus
--
Fragen zu LaTeX? → <http://projekte.dante.de/DanteFAQ/WebHome>
Fragen zu KOMA-Script? → scrguide.pdf, <http://www.komascript.de>

--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Markus Kohm
2014-06-30 07:12:35 UTC
Permalink
Post by Dr. Andreas Drauschke
Hat jemand eine Idee, wie ich das möglichst einfach lösen kann?
Man kann im Argument von \put ganz unerwartete Dinge machen, beispielsweise
eine weitere picture-Umgebung oder ein weiteres \put:

\documentclass{article}

\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}

\fbox{\begin{picture}(2,2)
\put(-.5,-.5){\put(1,1){x}}
\end{picture}}

\end{document}

Du könntest nun beispielsweise ein \symbolxoffset definieren:

\documentclass{article}
\newcommand*{\symbolxoffset}[1]{%
\put(-.5,-.5){#1}
}
\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}

\fbox{\begin{picture}(2,2)
\symbolxoffset{\put(1,1){x}}
\end{picture}}

\end{document}

oder mit Hilfe von xparse auch Dein \myput:

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\myput}{r() m}{%
\put(-.5,-.5){%
\put(#1){#2}%
}
}
\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}

\fbox{\begin{picture}(2,2)
\myput(1,1){x}
\end{picture}}

\end{document}

Näheres zu xparse ist dessen Anleitung zu entnehmen. Die \fbox-Anweisungen im
Beispiel helfen dabei, den Unterschied zwischen der einfachen Verwendung von
\put und den vorgeschlagenen Modifikationen kenntlich zu machen.

Gruß
Markus
--
Fragen zu LaTeX? → <http://projekte.dante.de/DanteFAQ/WebHome>
Fragen zu KOMA-Script? → scrguide.pdf, <http://www.komascript.de>

--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod
Dr. Andreas Drauschke
2014-06-30 10:38:37 UTC
Permalink
Hallo,

Oh Gott, es kann so einfach sein!!! Das Verschacheln der put-Anweisungen
macht genau das, was ich suche. Danke!!!

Viele Grüße
Post by Markus Kohm
Post by Dr. Andreas Drauschke
Hat jemand eine Idee, wie ich das möglichst einfach lösen kann?
Man kann im Argument von \put ganz unerwartete Dinge machen, beispielsweise
\documentclass{article}
\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}
\fbox{\begin{picture}(2,2)
\put(-.5,-.5){\put(1,1){x}}
\end{picture}}
\end{document}
\documentclass{article}
\newcommand*{\symbolxoffset}[1]{%
\put(-.5,-.5){#1}
}
\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}
\fbox{\begin{picture}(2,2)
\symbolxoffset{\put(1,1){x}}
\end{picture}}
\end{document}
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\myput}{r() m}{%
\put(-.5,-.5){%
\put(#1){#2}%
}
}
\begin{document}
\fbox{\begin{picture}(2,2)
\put(1,1){x}
\end{picture}}
\fbox{\begin{picture}(2,2)
\myput(1,1){x}
\end{picture}}
\end{document}
Näheres zu xparse ist dessen Anleitung zu entnehmen. Die \fbox-Anweisungen im
Beispiel helfen dabei, den Unterschied zwischen der einfachen Verwendung von
\put und den vorgeschlagenen Modifikationen kenntlich zu machen.
Gruß
Markus
--
FAQ: http://www.dante.de/faq/de-tex-faq/
Durchsuchbares Archiv: http://tinyurl.com/cdcb6
Unsubscribe/Verwaltung: http://tinyurl.com/b9tod

Loading...