![]() |
|
|||||||
| Newsgroup de.comp.text.tex TeX, LaTeX & Co.: Fragen und Antworten, Diskussion und Codeschnipsel. |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Moin.
Ich möchte, dass die Schriftgröße eines Textes sich von oben nach unten von Zeile zu Zeile verkleinert. Die erste Zeile soll in 18 Punkt sein, die letzte in 6 Punkt. Gibt es eine Umgebung, die das kann? DiV und Gruß. Friedrich Vosberg -- Kinderlärm ist Zukunftsmusik. vatolin (at) me (dot) com |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Friedrich Vosberg schrieb:
> Moin. > > Ich möchte, dass die Schriftgröße eines Textes sich von oben nach unten > von Zeile zu Zeile verkleinert. Die erste Zeile soll in 18 Punkt sein, > die letzte in 6 Punkt. Gibt es eine Umgebung, die das kann? > Vielleicht kann man basierend auf "lineno" etwas bauen. Jede Zeile wird bei diesem Paket einzeln behandelt (Nummern werden hinzugefügt). Vermutlich könnte man das Ausgeben der Zeilennummern ersetzen durch das Ändern der Schriftgröße. Nur so ins Blaue hinein... ....Rolf |
|
#3
|
|||
|
|||
|
fvosberg*me.com (Friedrich Vosberg) wrote:
> Ich möchte, dass die Schriftgröße eines Textes sich von oben nach unten > von Zeile zu Zeile verkleinert. Die erste Zeile soll in 18 Punkt sein, > die letzte in 6 Punkt. Gibt es eine Umgebung, die das kann? AFAIK nein. Was soll mit der Zeilenlänge passieren? Wenn sie analog schrumpft, könnte man über das Skalieren arbeiten: Man setzt den Text, zerpflückt ihn von Zeile zu Zeile (\vsplit) und skaliert jede Zeile etwas kleiner. Ansonsten könnte man mit \parshape arbeiten, so dass die Zeilen immer länger werden, dann zerpflückt man wieder zuvor und schrumpft die Zeilen wieder auf die Textbreite. Oder man schreibt sich einen Soul-Treiber, der den Text silbenweise aufspaltet. Dann fügt man solange Silben zur ersten Zeile, bis diese voll ist und gibt diese aus. Dann schaltet man auf eine kleinere Schriftart und füllt die zweite Zeile. Das geht dann so weiter, bis der Text aufgebraucht ist. Die Zeilenzahl muss man aus der Gesamtlänge schätzen. Für ein genaueres Ergebnis kann man den Prozess iterieren, damit in der letzten Zeile die Schrift nicht zu klein oder zu groß ist. Viele Grüße Heiko <oberdiek*uni-freiburg.de> |
|
#4
|
|||
|
|||
|
On 6 Nov., 09:04, fvosb...*me.com (Friedrich Vosberg) wrote:
> Moin. > > Ich möchte, dass die Schriftgröße eines Textes sich von oben nach unten > von Zeile zu Zeile verkleinert. Die erste Zeile soll in 18 Punkt sein, > die letzte in 6 Punkt. Gibt es eine Umgebung, die das kann? > > DiV und Gruß. Friedrich Vosberg > > -- > Kinderlärm ist Zukunftsmusik. > > vatolin (at) me (dot) com Was willst Du schreiben? AGBs? |
|
#5
|
|||
|
|||
|
Keks Dose <cookie170*web.de> wrote:
> Was willst Du schreiben? AGBs? ;-) Ich will eine Todo-Liste generieren, deren Einträge aus einer Datenbank bezogen werden. In dieser Datenbank haben die zuletzt eingetragenen Aufgaben die geringste Priorität; je älter eine Aufgabe ist, umso höher ist die Priorität. Aus dieser Datenbank wird täglich einen Todo-Liste erstellt. Darin sollen die am dringlichesten zu erledigenden Aufgaben oben in großer Schrift stehen und die weniger dringlichen dann nach unten in immer kleinerer Schrift dargestellt werden. Zugegeben, dass ist eine etwas verspielte Herangehensweise. Aber vielleicht kann man das ja hin bekommen. Die Idee von Heiko halte ich für einen durchaus Erfolg versprechenden Lösungsansatz. Gruß. Friedrich -- Kinderlärm ist Zukunftsmusik. vatolin (at) me (dot) com |
|
#6
|
|||
|
|||
|
fvosberg*me.com (Friedrich Vosberg) writes:
> sollen die am dringlichesten zu erledigenden Aufgaben oben in großer > Schrift stehen und die weniger dringlichen dann nach unten in immer > kleinerer Schrift dargestellt werden. Eine nicht zeilenweise, sondern eintragsweise Verkleinerung wäre ja geradezu trivial, mit relsize ... g. |
|
#7
|
|||
|
|||
|
Heiko Oberdiek schrieb:
> Die Zeilenzahl > muss man aus der Gesamtlänge schätzen. Mir kommt es so vor, als ob das der interessanteste Teil an der Sache sein könnte, denn zum einen ist die Zeilenanzahl auch durch die Schriftgröße bedingt, zum anderen hängt in der von Friedrich gestellten Aufgabe die Schriftgröße der jeweiligen Zeile auch von der sich ergebenden Zeilenanzahl ab. Wie könnte man beim Schätzen vorgehen? Den Text in allen infragekommenden Schriftgrößen setzen und jeweils die Zeilen zählen und den Mittelwert daraus bilden? Bzw den Text in der grössten und der kleinsten Skalierung setzen und den Mittelwert aus den beiden sich dabei jeweils ergebenden Zeilenanzahlen bilden? Damit hätte man vielleicht einen Richtwert für die Zeilenanzahl und könnte vielleicht ausrechnen, um wieviel von einer Zeile zur nächsten die Schrift verkleinert werden muss bzw nach wievielen Zeilen die nächstkleinere Schrift verwendet werden soll. Ulrich |
|
#8
|
|||
|
|||
|
Ulrich D i e z <eu_angelion*web.de> wrote:
> Heiko Oberdiek schrieb: > > > Die Zeilenzahl > > muss man aus der Gesamtlänge schätzen. > > Mir kommt es so vor, als ob das der interessanteste > Teil an der Sache sein könnte, denn zum einen > ist die Zeilenanzahl auch durch die Schriftgröße > bedingt, zum anderen hängt in der von Friedrich > gestellten Aufgabe die Schriftgröße der jeweiligen > Zeile auch von der sich ergebenden Zeilenanzahl ab. > > Wie könnte man beim Schätzen vorgehen? In der ersten Zeile bekommt man $z$ viel Text unter. In der letzen Zeile mit 1/3 Schritftgröße geht dreimal soviel: $3z$. Es seien $n$ Zeilen gegeben. Dann kann man ein Rechteck identifizieren, jede Zeile hat mindestend $z$ viel Text, Fläche = $nz$. Übrig bleibt ein rechtwinkliges Dreieck, deren Schenkel $n$ und $2z$ sind, Fläche = $\frac{n*2z}{2} = nz$. Zusammen wird die Gesamtlänge $G$ auf die Fläche $2nz$ verteilt. $z$ und $G$ sind bekannt, so ist die Zeilenzahl $n = \frac{2G}{z}$. Für kleine $n$ ist die Flächennäherung nicht so toll, so dass man die ersten Werte besser explizit abfragt. if G == 0 then n=0 elsif G <= z then n = 1 elsif G <=4z then n = 2 elsif n = ceil(2G/l) z ist dabei die Zeilenlänge, G die Gesamtlänge des Textes in der Anfangsschriftgröße. Viele Grüße Heiko <oberdiek*uni-freiburg.de> |
|
#9
|
|||
|
|||
|
Gaius Pupus <pupus*invalid.invalid> wrote:
> Eine nicht zeilenweise, sondern eintragsweise Verkleinerung wäre ja > geradezu trivial, mit relsize ... Dem gegenüber ist der Ansatz, eine Umgebung zu haben, in der unabhängig von manuellen Zeilenumbrüchen, Absätzen o.dgl.m. die Zeichengröße jeder folgenden Zeile auf dem aktuellen Blatt gleichmäßig gemindert wird, universaler. Gruß. Friedrich -- Kinderlärm ist Zukunftsmusik. vatolin (at) me (dot) com |
|
#10
|
|||
|
|||
|
Heiko Oberdiek schrieb:
> Ulrich D i e z <eu_angelion*web.de> wrote: > >> Heiko Oberdiek schrieb: >> >>> Die Zeilenzahl >>> muss man aus der Gesamtlänge schätzen. >> Mir kommt es so vor, als ob das der interessanteste >> Teil an der Sache sein könnte, denn zum einen >> ist die Zeilenanzahl auch durch die Schriftgröße >> bedingt, zum anderen hängt in der von Friedrich >> gestellten Aufgabe die Schriftgröße der jeweiligen >> Zeile auch von der sich ergebenden Zeilenanzahl ab. >> >> Wie könnte man beim Schätzen vorgehen? > > In der ersten Zeile bekommt man $z$ viel Text unter. Nehmen wir also an, jede Zeile ist maximal mit Text befüllt. $z$ ist also die Anzahl von Zeichen (druckbare Zeichen einschließlich Leerzeichen), die bei einer Festbreitenschrift den Platz (in der Breite) $p$ einnehmen. > In der letzen Zeile mit 1/3 Schritftgröße geht dreimal > soviel: $3z$. Es seien $n$ Zeilen gegeben. Für die Zeile $k$ gilt, wenn $A(i)$ die Anzahl der Zeichen in der Zeile $i$ angibt: $A(k-1) \leq A(k) \leq A(k+1)$ für $2 \leq k \leq n-1$ > Dann kann man ein Rechteck identifizieren, jede > Zeile hat mindestend $z$ viel Text, Fläche = $nz$. Genauer wäre also die Fläche des Rechtecks = $n*(z*p)$ > Übrig bleibt ein rechtwinkliges Dreieck, deren Schenkel > $n$ und $2z$ sind, Fläche = $\frac{n*2z}{2} = nz$. Den Schritt sehe ich nicht so: Ein rechtwinkliges (leeres) Dreieck kann nur dann in das Rechteck eingetragen werden, wenn angenommen wird, dass 1) jede Zeile genau gleich viel Zeichen enthalten, 2) und die Breite des einzelnen Zeichens sich verringert. (Das Zweite wollen wir, das erste aber eigentlich nicht) > Zusammen wird die Gesamtlänge $G$ auf die > Fläche $2nz$ verteilt. $z$ und $G$ sind bekannt, > so ist die Zeilenzahl $n = \frac{2G}{z}$. Mhm...*grübel*: Du möchtest als Heuristik wirklich die Anzahl aller Zeichen verdoppeln und durch die Anzahl der Zeichen in einer Zeile dividieren? Ich denke diese Heuristik ist zu großzügig. Garantiert wird man niemals mehr Seiten bekommen, als der Text in original Größe ausmacht, und das ist: $n = \frac{G}{z}$ oder besser $n = \frac{G}{z*p}$ mit $z$ Anzahl der Zeichen und $p$ ihr Platz in der Breite. > > Für kleine $n$ ist die Flächennäherung nicht so toll, > so dass man die ersten Werte besser explizit abfragt. > if G == 0 then n=0 > elsif G <= z then n = 1 > elsif G <=4z then n = 2 > elsif n = ceil(2G/l) > > z ist dabei die Zeilenlänge, > G die Gesamtlänge des Textes in der Anfangsschriftgröße. Was ist das l ? =========== Überlegen wir noch etwas formaler: Gegeben/Annahmen: 1) Festbreiten Schrift 2) Abstand zwischen den Zeilen ist erstmal ABST(L)=konstant 3) lineare Verkleinerung der Zeichen pro Zeile Gesucht: $F(L)$ Funktion zur Berechnung der Schriftgröße zu einer Linie L $B(L)$ Funktion zur Berechnung der Breite eines Zeichens in Linie L $Z(L)$ Funktion zur Berechnung der Anzahl von Zeichen in der Linie L $P(T)$ Funktion zur Berechnung der Anzahl von Seiten Bestimmung von $F(L)$: > Die erste Zeile soll in 18 Punkt sein, die letzte in 6 Punkt. Es sei $n$ die Anzahl aller Linien (oder Zeilen): Für $F(L)$ muss gelten, 1) F(1) = 18 2) F(n) = 6 -> Lineare Interpolation durch eine Gerade f mit baryzentrischer Koordinate t f(t) = (1-t)*18 + t*6, mit $t \in \mathbbm{R}, 0 \leq t \leq 1$ Wir müssen nun sicherstellen, dass gilt F(1) = f(0) = (1-0)*18 + 0*6 = 18 F(n) = f(1) = (1-1)*18 + 1*6 = 6 dies gelingt mit L->t durch t = (L-1)/(n-1) Am Beispiel von n = 10 Zeilen L t F(L) = f(t) 1 0/9=0 18 2 1/9 16+(1/3) 3 2/9 4 3/9 5 4/9 6 5/9 7 6/9 8 7/9 9 8/9 10 9/9=1 6 Bestimmung von $B(L)$: Entweder so: B(L)=BreiteDesFontsMitGröße(F(L)) ... ist ja Festbreitenschrift, sollte man also irgendwo auslesen können oder ebenfalls mit linearer Interpolation über baryzentrische Koordinaten: Dann muss man nur die 18 durch die Breite ersetzen und die 6 durch die entsprechende Breite Bestimmung von $Z(L)$: Ziel ist es die Textbreite w in cm (einer Zeile) konstant zuhalten, aber die Anzahl der Zeichen innerhalb einer Zeile entsprechend ihrer Breite zu berechnen. Sei w die Textbreite um L die Zeile, dann ist Z(L) = w/(B(L)) die Anzahl der Zeichen in L Bestimmung von $P(T)$: Die Berechnung der Anzahl der Seiten, will sich mir nicht als geschlossene Formel eröffnen. Daher möchte ich hier einen Algorithmus angeben - ob und wie er sich in TeX / LaTeX implementieren lässt, kann ich nicht überblicken. Es sei T ein Text (Zeichenkette) ZählVariable AnzahlDerSeiten=0 FALLS (T nicht leer) DANN BEGINN Kopiere Inhalt von T nach temp AnzahlDerSeiten=1 ZählVariable Linie=1 GrößenVariable FreierPlatz = \textheight SOLANGE (temp nicht leer) BEGINN ZählVariable Zeichen=0 SOLANGE (Zeichen <= Z(Linie)) BEGINN entferne erstes Zeichen aus temp Zeichen = Zeichen +1 ENDE Linie = Linie + 1 FreierPlatz = FreierPlatz-F(Linie)-ABST(Linie) FALLS (FreierPlatz <= 0) DANN BEGINN %Gehört diese Zeile schon auf %die Nächste Seite AnzahlDerSeiten = AnzahlDerSeiten+1 FreierPlatz = \textheight ENDE ENDE ENDE Besten Gruß, Robert |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| ReplayQueueLength stetig steigend | Thomas Stensitzki | Newsgroup microsoft.public.de.exchange | 1 | 08-26-2009 08:56 AM |
| Stetig langsamer werdender FireFox | Christian Müller | Newsgroup de.comm.software.mozilla.browser | 0 | 01-31-2009 03:11 PM |
| SpOnspacke stottert stetig Stuss: sähen! | Bernd Schwegmann | Newsgroup de.etc.sprache.deutsch | 13 | 08-22-2008 06:25 PM |
| wie kann ich die leeren zellen zwischen dem text verkleinern ? | fasatech | Newsgroup microsoft.public.de.excel | 1 | 04-09-2008 07:06 PM |
| Text verschiedener größen verkleinern/vergrößern | Stefan Franz | Newsgroup de.comp.office-pakete.staroffice.writer | 18 | 08-15-2006 10:59 PM |