Im folgenden Beispiel (TeX-Code) spreche ich 254 Boxregister an. Nach dem Besetzen von 254 Boxen und der Ausgabe \box<nummer> von 254 Boxen werden alle ausgegeben, bis auf die \box11. Bei der Ausgabe von \copy<nummer> können nur 252 Boxen ausgeben werden, wiederum fehlt die \box11.

Fehlermeldung bei 253 (copy) Boxen :

! Incompatible list can't be unboxed.
\@makecol ...color \footnoterule \unvbox \footins 
                                                  \color@endgroup }\fi \let ..

???

Der Code:

\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\begin{document}
\TeX- Code \vskip0.5\baselineskip%
\newcount\myregister
\myregister=0
\loop\ifnum\the\myregister<255 \relax%
\ifvoid\the\myregister\expandafter\setbox\the\myregister=\hbox{box
  \the\myregister} %
 \expandafter\box\the\myregister  \vskip0.5\baselineskip \fi %
\advance\myregister by 1 \relax \repeat %
\myregister=0
\loop\ifnum\the\myregister<254 \relax%
\ifvoid\the\myregister\expandafter\setbox\the\myregister=\hbox{copy
  \the\myregister} %
 \expandafter\copy\the\myregister  \vskip0.5\baselineskip \fi %
\advance\myregister by 1 \relax \repeat %

\end{document}

gefragt 25 Jun '13, 02:01

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 26 Jun '13, 01:39

cgnieder's gravatar image

cgnieder
22.1k253463


du kannst doch nicht gnadenlos global alle Boxen überschreiben. Mit \box löscht du ja wenigstens den Inhalt, mit \copy aber nicht, so dass die von TeX selbst genutzen Boxen hinüber sind.

\begingroup% lokal halten, damit keine existierenden überschrieben werden
\TeX- Code \vskip0.5\baselineskip
\count0=0
\loop\ifnum\the\count0<255\relax
\expandafter\setbox\the\count0=\hbox{box \the\count0} 
\expandafter\copy\the\count0 \vskip0.1\baselineskip 
\advance\count0 by 1 \relax \repeat 
\endgroup
\bye

Dein Code mit Ausgabe von \box11:

\documentclass{article}
\begin{document}
\TeX- Code \vskip0.5\baselineskip%
\newcount\myregister
\myregister=0
\begingroup
\loop\ifnum\the\myregister<255
\ifvoid\the\myregister
  \expandafter\setbox\the\myregister=\hbox{box\the\myregister}\fi
 \expandafter\box\the\myregister  \vskip0.5\baselineskip
\advance\myregister by 1 \repeat
\myregister=0
\loop\ifnum\the\myregister<254
\ifvoid\the\myregister
  \expandafter\setbox\the\myregister=\hbox{copy\the\myregister}\fi
 \expandafter\copy\the\myregister  \vskip0.5\baselineskip
\advance\myregister by 1 \repeat 
\endgroup
\end{document}

Wenn du schon reinen TeX-Code hast, dann pack das nicht in eine LaTeX-Umgebung.

Permanenter link

beantwortet 25 Jun '13, 08:50

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 25 Jun '13, 15:32

Warum wird aber die Box11 in meinem Beispiel nicht dargestellt? Heißt das lokale Nutzen der Boxen, daß man doch neue Register anlegen kann, also jeweils lokale 255 Boxen zur Verfügung stehen, die sich nicht gegenseitig beeinflussen?

Und warum nicht den TeX-Code in Latex- Umgebung?

(25 Jun '13, 11:04) ctansearch
2

@ctansearch: Hat Herbert eigentlich bereits erklärt. Wenn Du einfach mal eben alle Boxen, die LaTeX intern selbst verwendet, mit eigenem Inhalt überschreibst und mit \box den vorherigen Inhalt vernichtest, darfst Du Dich nicht wundern, wenn das schief geht. Normalerweise sind bereits vom LaTeX-Kern min. die Box-Register 0–24 belegt, wobei den ersten 10 Registern eine spezielle Aufgabe zukommt. Register 10 ist \voidb@x und muss immer void bleiben, 11 ist \strutbox. Das ist aber nicht unveränderlich festgelegt, sondern derzeit zufällig so.

(25 Jun '13, 11:22) saputello

@herbert @saputello Ich habe mich auch nicht gewundert, daß es schief geht, sondern das Beispiel mit Absicht so gestaltet, um herauszufinden, warum es schief geht. Im Beispiel gelingt es nicht, die Box11 zu überschreiben. Das heißt, daß Latex diese irgendwie für sich reserviert oder wieder überschreibt. Wenn sie nur überschrieben wird, ist der Fall erledigt, wenn sie reserviert wurde, wüßte ich gern, wie LaTeX das macht.

Besten Dank für die Antworten.

(25 Jun '13, 12:33) ctansearch

@ctansearch: Wie bereits erwähnt ist Box Nummer 11 derzeit \strutbox und diese wird alle Nase lang (AFAIR bei jedem impliziten und expliziten \selectfont) neu erstellt, weil sie von der Schrift abhängig ist. Du darfst aber auch bei anderen bereits belegten Boxen nicht einfach davon ausgehen, dass es funktioniert. Die sind ja zu einem bestimmten Zweck belegt, werden also auch irgendwann mit Inhalt befüllt.

(25 Jun '13, 12:42) saputello
2

@ctansearch: box11 ist belegt. Was ist daran so schwierig zu erkennen, dass sie dann nicht ausgegeben werden kann, da dein \fi erst nach der Ausgabe kommt. Setze es vor die Ausgabe und du bekommst auch box11 ausgegeben. Boxen sind lokal zu ihrer Gruppe, was ich ja nun in meinem Beispiel gezeigt habe. Und eine reine TeX-Frage in LaTeX zu packen, ist sinnlos.

(25 Jun '13, 12:57) Herbert
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×22
×18
×6

gestellte Frage: 25 Jun '13, 02:01

Frage wurde gesehen: 11,246 Mal

zuletzt geändert: 26 Jun '13, 01:39