PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Das cross aus den Laws of Form (Zeichen/Operator)



Phylax
08-12-2009, 03:32
Servus miteinander,

Ich verfasse derzeit meine Magisterarbeit (Philosophie) in LaTeX und benötige für die Darstellung eines meiner Hauptautoren ein ganz bestimmtes "Zeichen", das in keinem mir bekannten Paket vordefiniert zu sein scheint: Das sogenannte "cross" aus den "Laws of Form" von George Spencer Brown

Dabei handelt es sich um eine Art linksgerichteten "haken", der die unter ihm befindlichen Objekte überspannen muss (siehe Grafik im Anhang).

Ich habe folgendes Skript gefunden, kenne mich aber mit den darin vorkommenden TeX-Primitiven nicht aus:



\newcommand{\cross}[1]{
\mbox{\vbox{\kern 1pt\hbox{\vbox{\hrule
\kern 2pt\hbox{#1\kern 2pt}}\vrule\kern 1pt}}}}


Außerdem habe ich mir ein leeres cross ganz einfach mit TikZ zusammengebastelt:



\newcommand{\crosse}{\mbox{\tikz \draw (0em,0em) -- (0em,1em) -- (-1em,1em);}}


Damit lassen sich Konstrukte wie im angehängten PDF erkennbar erzeugen. In der Sache kann ich damit zwar alles ausdrücken, was zur Theorie gehört, nur ist das Erscheinungsbild im Detail nicht unbedingt berauschend:


Die horizontalen Linien enden nicht bündig
Die Höhe der horizontalen Linien orientiert sich ausschließlich an dem, was unter ihr enthalten ist. Schöner wäre eine Art "Normierung", die sich am jeweils höchsten Inhalt der selben Ebene misst (Was ich meine wird wohl am besten durch die Differenz zwischen dem Original und dem LaTeX-PDF erkennbar. Der horizontale Strich sollte über einem a nicht niedriger sein als über einem b)


Ich kann mit dem bisherigen Ergebnis leben, aber LaTeX macht einen nunmal sehr schnell zum Ästheten. Daher bin ich für jeden Verbesserungvorschlag dankbar. (Vielleicht kann man das ganze ja mit TikZ automatisieren?)


beste Grüße und Dank im Voraus

Phylax

rais
08-12-2009, 06:44
Moin moin,



Die horizontalen Linien enden nicht bündig
Die Höhe der horizontalen Linien orientiert sich ausschließlich an dem, was unter ihr enthalten ist. Schöner wäre eine Art "Normierung", die sich am jeweils höchsten Inhalt der selben Ebene misst (Was ich meine wird wohl am besten durch die Differenz zwischen dem Original und dem LaTeX-PDF erkennbar. Der horizontale Strich sollte über einem a nicht niedriger sein als über einem b)


zu 1)


\newcommand{\cross}[1]{
\mbox{\vbox{\kern 1pt\hbox{\vbox{\hrule
\kern 2pt\hbox{#1\kern 2pt}}\vrule\kern 1pt}}}}

an der hier rot hervorgehobenen Klammer fügst Du durch den Beginn einer neuen Zeile ein Leerzeichen ein, ein % sollte hier Wunder wirken.

zu 2)
\vphantom{b} vor #1

also etwa


\documentclass{article}
\usepackage{amsmath}
\newcommand{\cross}[1]{%
\mbox{\vbox{\kern 1pt\hbox{\vbox{\hrule
\kern 2pt\hbox{\ensuremath{\vphantom{b}#1}\kern 2pt}}\vrule\kern 1pt}}}\,}
\begin{document}
\begin{align*}
&\cross{\cross{\cross{a}b}c}\\
&=\cross{\cross{\cross{a}\cross{\cross{b}}}c}\\
&=\cross{\cross{\cross{ac}\cross{\cross{b}c}}}\\
&=\cross{ac} \cross{\cross{b}c}
\end{align*}
\end{document}

MfG

kallimalli
09-12-2009, 18:00
Hi Rais und Phylax,

das sieht wirklich super aus, leider bestehen die Crosses aus Konstrukten, die mimeTex nicht erkennt und die m.E. wegen \newcommand für die Verwendung im mediaWiki nicht zu verwenden sind.

Hättet Ihr da einen Tip, wie man mediaWiki und die Brownsche Notation in TeX kombinieren kann?

Schönen Gruß!

Karl

Phylax
13-12-2009, 16:03
Hier ist mal ein riesen Dankeschön fällig! Dank Deiner Lösung, rais, schaut es nun wunderbar aus, und ich habe sogar einen weiteren Befehl (\vphantom) kennen gelernt, der auch in anderen Zusammenhängen nützlich sein mag.

Vielen Dank nochmal

@kallimalli

Ich meinerseits habe da leider keine besondere Idee. Wenn ausschließlich \newcommand das Problem ist, könntest du versuchen, den Befehl jedes Mal auszuschreiben. Allerdings scheint es mir da einfacher, Vektorgrafiken mit einem anderen Programm zu erzeugen.


beste Grüße

Phylax

kallimalli
18-12-2009, 23:31
Hi Phylax und Rais,

auf meiner Suche nach einer Umsetzung der Spencer Brownschen Notation in TeX habe ich unter anderem Prof. Michael Kohlhase von der Jakobs Universität Bremen (http://de.wikipedia.org/wiki/Michael_Kohlhase) angeschrieben, der selbst passen musste, sich aber für die Lösung interessierte. Eure Version habe ich ihm mit Quellenangabe geschickt und er meinte, man sollte dies doch auf CTAN verfügbar machen, hat falls notwendig seine Unterstützung angeboten.

Da das Interesse an Spencer Brown doch größer ist, als man so denkt, wäre es wirklich schön, wenn man den Interessierten die Möglichkeit bieten würde, die Brownschen Crosses auf komfortablere Weise als mit einem Graphikprogramm zu erzeugen.

Wenn einer von Euch Lust dazu hat, dann wäre das super, ich bemühe mich um eine praktikable Lösung die Notation im mediaWiki zu realisieren, wenn´s zum umständlich ist (mit mimeTex geht es nicht, mit mathTex werde ich´s noch versuchen), dann kann ich eine Tabelle in TeX mit den Ausdrücken der LoF liefern, inklusive Zip-File mit mehr oder weniger liebevoll ausgeschnittenen PNGs, für diejenigen, die kein TeX installieren wollen. Auch an der Ausarbeitung der Doku würde ich mich beteiligen, bzw. sie übernehmen.

Wenn keiner von Euch Lust und Zeit dafür hat, dann würde ich die Veröffentlichung übernehmen, Ihr müsst mir nur schreiben, in welcher Form Ihr erwähnt werden wollt (oder auf keinen Fall, um nicht ständig mit TeX-Problemen belästigt zu werden).

mfG

Karl Prinz alias kallimalli

LoF
01-03-2011, 12:35
Hallo zusammen,

die Darstellung des Cross funktioniert wunderbar. Allerdings suche ich jetzt nach einer Möglichkeit auch den Reentry darzustellen.

Gibt es da schon Ideen?

VG

Torsten

rais
02-03-2011, 00:47
Hallo und Herzlich Willkommen :)


die Darstellung des Cross funktioniert wunderbar. Allerdings suche ich jetzt nach einer Möglichkeit auch den Reentry darzustellen.

Gibt es da schon Ideen?

meinst Du sowas:


\documentclass{article}
\newcommand*\cross[1]{%
\mbox{\vbox{\kern 1pt\hbox{\vbox{\hrule
\kern 2pt\hbox{\ensuremath{\vphantom{b}#1}\kern 2pt}}\vrule\kern 1pt}}}\,}
\newcommand*\reentry{%
\cross{\kern0.5em\rule{0.4pt}{1ex}\rule{0.5em}{0.4 pt}\kern-2pt}%
}
\newcommand*\bigreentry{%
\cross{\cross{\cross{\cross{\cross{\cross{\cdots}} }}}}%
}
\begin{document}
\bigreentry, \reentry
\end{document}
?

MfG

Phylax
10-03-2011, 03:54
Servus,

es freut mich sehr, dass die hier entwickelte Lösung auch anderen nützt. Für das Problem des re-entry habe ich bislang auch keine Lösung gefunden die eben so flexibel wäre wie das cross-script. In meiner Magisterarbeit habe ich mir für die wenigen (!) Fälle, in denen ich einen re-entry schreiben musste, mit Tikz beholfen. Das ist zwar umständlich, für mich aber im Ergebnis zufriedenstellend. Folgendes Minimalbeispiel sollte lauffähig sein (funktioniert aufgrund der Verwendung von Tikz freilich nur mit pdftex; fertiges PDF ist angehängt) :




\documentclass[pdftex]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz}%PGF Format benutzen



\newcommand{\cross}[1]{%
\mbox{\vbox{\kern 1pt\hbox{\vbox{\hrule
\kern 2pt\hbox{\ensuremath{\vphantom{b}#1}\kern 2pt}}\vrule\kern 1pt}}}\,}


\begin{document}



So wie in
einer Arithmetik der komplexen Zahlen $i$ für $\sqrt{-1}$ steht, so
schreibt Spencer Brown an Stelle von \arrangement{\cross{\cross{\ldots}}}
den Ausdruck \tikz[scale=.4] \draw (0,0) -- (1,0) -- (1,-1) -- (0,-1) --
(0,-0.3);; Dieser aber ist nicht etwa nur ein unflexibles Etikett, sondern
erlaubt es, Selbstbezüglichkeiten ganz verschiedener Art zu
beschreiben. So kann etwa das unendliche Echelon, dessen Variablen noch nicht mit konkreten
Werten belegt wurden, durch folgendes Konstrukt beschrieben werden:
\raisebox{-.3em}{\begin{tikzpicture}[scale=.4] \path (0.5,-.6) node (Ida)
{a}; \path (1.5,-.5) node (Eda) {b}; \draw (0,0) -- (2,0) -- (2,-1) --
(.1,-1) -- (.1,-0.4) (0,-.2) -- (1,-.2) -- (1,-.8);
\end{tikzpicture}}.

\end{document}


Hoffe, das hilft fürs erste. Grundlegendere Lösungen wären allerdings herzlich willkommen.


@ Rais

Falls Du Dich näher mit der Materie beschäftigen willst (du scheinst dich ja mit der Kinstruktion solcher Skripte ganz gut auszukennen): Man müsste bei einer "flexiblen" Lösung bestimmen können, wo genau der "Haken" von unten wieder in die Formel eintritt (siehe den letzten Ausdruck im PDF). Ich vermute, dass das doch um einiges komplizierter wäre als das cross-script. Wenn Du aber eine Idee hast, dann immer her damit. Wäre eine feine Sache.

Grüße an Alle

rais
11-03-2011, 01:51
Moin moin,

Folgendes Minimalbeispiel sollte lauffähig sein

nicht ganz, dazu fehlt die Definition von `\arrangement'


Man müsste bei einer "flexiblen" Lösung bestimmen können, wo genau der "Haken" von unten wieder in die Formel eintritt (siehe den letzten Ausdruck im PDF). Ich vermute, dass das doch um einiges komplizierter wäre als das cross-script. Wenn Du aber eine Idee hast, dann immer her damit. Wäre eine feine Sache.

Idee:


\documentclass{article}
\parskip=3ex
\newcommand*\crosstr[1]{%
\mbox{%
\vbox{%
\kern 1pt
\hbox{%
\vbox{%
\hrule
\kern 2pt
\hbox{%
\ensuremath{\vphantom{b}#1}%
\kern 2pt
}%
}%
\vrule
\kern 1pt
}%
}%
}%
}
\newcommand*\crossstr[1]{%
\mbox{%
\vbox{%
\kern 1pt
\hbox{%
\vbox{%
\hrule
\kern 2pt
\hbox{%
\ensuremath{\vphantom{b}#1}%
}%
}%
\vrule
\kern 1pt
}%
}%
}%
}
\newcommand*\crosssbl[1]{%
\mbox{%
\vbox{%
\kern 1pt
\hbox{%
\vrule
\vbox{%
\hbox{%
\ensuremath{\vphantom{b}#1}%
}%
\kern 2pt
\hrule
}%
}%
}%
}%
}
\newcommand*\crosswbl[1]{%
\mbox{%
\vbox{%
\hbox{%
\vrule
\vbox{%
\hbox{%
\kern 2pt
\ensuremath{\vphantom{b}#1}%
\kern 2pt
}%
\kern 2pt
\hrule
}%
}%
}%
}%
}
\newcommand*\reentry[2]{%
\crossstr{%
\ifx\relax#1\relax
\else
#1\,
\fi
\crosswbl{#2}%
}%
}
\begin{document}
\reentry{}{a}

\reentry{}{ab}

\reentry{a}{b}

\reentry{\crosstr{a}}{b}
\end{document}

MfG

LoF
01-04-2011, 11:35
Guten Morgen Rais und Phylax!

Eure Ideen haben mir sehr geholfen und das Ergebnis ist vollkommen ausreichend für meine Arbeit.

Vielleicht sollte man ein LoF-Package anregen ;-)

VG

Torsten

Jacobo Belbo
24-11-2011, 13:09
Liebe Diskutierende,

vielen Dank für die umfangreiche Vorarbeit. Ich verfolge diesen Thread auch schon seit geraumer Zeit stumm. Es steht aber eine größere Arbeit an und ich habe bisher keine angemessene Alternative zu Euren Vorschlägen entdecken können; um genau zu sein habe ich gar keine Alternative zu LaTeX gefunden (und werde mich dementsprechend wohl in den Code einlesen müssen).

Der oben von Rais angeführte Vorschlag sieht sehr gut aus. Das Problem: Der Re-Entry müsste die gesamte Unterscheidung umfassen (also auch das erste Cross). Ist das irgendwie möglich?

rais
24-11-2011, 20:05
Hallo und Herzlich Willkommen unter den Aktiven :)

Der Re-Entry müsste die gesamte Unterscheidung umfassen (also auch das erste Cross). Ist das irgendwie möglich?
so ich Dich richtig verstehe, brauchst Du das Cross nur mit in die zweite Klammer zu schieben, vergleiche dazu auch in der Ausgabe \reentry{a}{b} mit \reentry{}{ab} und vllt auch gleich \reentry{\phantom{ab}}{ab}, falls Du den Haken unten eher mittig haben willst.;)

Ansonsten skizziere vllt, was genau Du zu erreichen versuchst.

MfG

Jacobo Belbo
24-11-2011, 20:14
@Rais:

Danke für die Nachfrage. Ich dachte an sowas:

rais
24-11-2011, 22:22
Moin moin,

@Rais:

Danke für die Nachfrage. Ich dachte an sowas:
ah, dann soll die horizontale Linie vom Cross mit der vom Reentry linksbündig (über dem `Haken') sein?
Neuer Ansatz -- hier hab ich auch gleich versucht, den Inhalt vom \ReEntry auf der Grundlinie zu lassen;-)


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\parskip=3ex
\newcommand*\crosstr[1]{%
\mbox{%
\vbox{%
\kern 1pt
\hbox{%
\vbox{%
\hrule
\kern 2pt
\hbox{%
\ensuremath{\vphantom{b}#1}%
\kern 2pt
}%
}%
\vrule
\kern 1pt
}%
}%
}%
}
\newcommand*\ReEntry[1]{%
\raisebox{-2pt}{%
\mbox{%
\hbox{%
\vrule height 5pt
\kern-0.4pt
\vbox{%
\hrule
\kern2pt
\hbox{%
\ensuremath{#1}%
\kern2pt
}%
\kern 2pt
\hrule height 0pt depth 0.4pt
}%
\vrule
}%
}%
}%
}
\begin{document}
a\ReEntry{\crosstr{\kern2pt\text{Referenzierbarkei t}}\,\text{Arbitrarität}}b
\end{document}

MfG

Jacobo Belbo
25-11-2011, 00:19
Neuer Ansatz -- hier hab ich auch gleich versucht, den Inhalt vom \ReEntry auf der Grundlinie zu lassen;-)


Klasse! Vielen Dank!

zkn
25-11-2011, 10:01
Hallo alle zusammen,
ich interessiere mich auch für die Umsetzung der Spencer-Brown'schen Formnotation in LaTex. Bisher hatte ich eine Variante gefunden, die mit (Pseudo-)Tabellen arbeitet, aber dieser Vorschlag ist wesentlich eleganter. Zumal bei meiner gefundenen Lösung kein Text links von der Notation stehen konnte.

Ich habe mal ein bisschen die Abstände variiert, damit die Notation etwas "luftiger" erscheint, das war aber vorerst trial'n'error, da ich noch kein großer LaTex-Experte bin und nicht alles aus dem Skript verstehe.

Meine Frage wäre: Könnte man den Ansatz zu erweitern, dass er flexibler wird, bspw. auch 3 oder gar 4 Unterscheidungen? Wie z.B. in den angehängten Dateien?

Jacobo Belbo
25-11-2011, 11:19
Ich habe mal ein bisschen die Abstände variiert, damit die Notation etwas "luftiger" erscheint

Die „Luftigkeit“ durch die erhöhten Abstände von Text und Cross steht der Notation sehr gut und erhöht m.E. ihre Lesbarkeit. Die Nachfrage von ZKN nach der Erweiterung der Forme[l]n durch Ergänzen weiterer Unterscheidungen ist für eine produktive Nutzung zentral; wenn das irgendwie gelänge, hättet ihr hier die erste allgemein brauchbare Umsetzung der Spencer Brown'schen gefunden – Ruhm wäre Euch sicher… ;-) (ich bastele die Dinger derzeit händisch in InDesign und setze sie in 'nem WYSIWYG-Texteditor). Apropos: Wenn wir hier in diesem Thread alle denkbaren Variationen der Anwendnung sammeln – ein Monster hätte ich da noch (man beachte die „rückwärts“ notierten re-entries):

rais
26-11-2011, 00:15
Moin moin,

Die „Luftigkeit“ durch die erhöhten Abstände von Text und Cross steht der Notation sehr gut und erhöht m.E. ihre Lesbarkeit. Die Nachfrage von ZKN nach der Erweiterung der Forme[l]n durch Ergänzen weiterer Unterscheidungen ist für eine produktive Nutzung zentral; wenn das irgendwie gelänge, hättet ihr hier die erste allgemein brauchbare Umsetzung der Spencer Brown'schen gefunden – Ruhm wäre Euch sicher… ;-)
nun ja, Du könntest uns helfen -- und damit an dem verheißten Ruhm teilhaben :D, indem Du
diese `Unterscheidungen' einmal definierst.
Ein paar Parameter hab ich mal einstellbar gemacht:


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,xcolor}
\parskip=3ex %nur zur Demo
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crossabovedist %Abstand oberhalb vom \cross
\newlength\crossbelowdist %Abstand unterhalb vom \cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens

\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crossabovedist{1pt}
\setlength\crossbelowdist{0pt}
\setlength\crosscontleftdist{4pt}
\setlength\crosscontrightdist{2pt}
\setlength\crosscontabovedist{1pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\crossdepth}

\newcommand*\crosstr[1]{%
\mbox{%
\vbox{%
\kern \crossabovedist
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\ensuremath{\vphantom{b}#1}%
\kern \crosscontrightdist
}%
}%
\vrule width \crosslinethickness
\kern \crossrightdist
}%
\kern \crossbelowdist
}%
}%
}
\newcommand*\cross[1]{%
\begingroup
\setlength\crossleftdist{0pt}%
\setlength\crosscontleftdist{0pt}%
\crosstr{#1}%
\endgroup
}
\newcommand*\ReEntry[1]{%
\raisebox{-\crossdepth}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \crosshooklength
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
% \kern \crosscontleftdist
\ensuremath{#1}%
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}
\begin{document}
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
\crosstr{a} vs. \cross{a}%
x\ReEntry{\cross{\cross{\cross{a}b}c}d}x
\end{document}

MfG

Jacobo Belbo
26-11-2011, 13:57
nun ja, Du könntest uns helfen […] indem Du diese `Unterscheidungen' einmal definierst. Ein paar Parameter hab ich mal einstellbar gemacht

Nichts lieber als das. Ich habe aber vorher noch eine grundsätzlichere Verständnisfrage: Ich habe auf Basis Deines Codes mal eine Entscheidungs-Definition Dirk Baeckers eingesetzt. Kann es sein, dass sich ab einer bestimmten Wortlänge der Inhalt über die Grundlinie hinaus nach unten verschiebt? Wenn ja: Warum ist das so? Oder hat das am Ende gar nicht mit de länge der Worte zu tun? Vgl.

rais
26-11-2011, 16:46
Kann es sein, dass sich ab einer bestimmten Wortlänge der Inhalt über die Grundlinie hinaus nach unten verschiebt?
das liegt nicht an der Wortlänge, sondern daran, daß ich nicht bedacht habe, daß Dinge auch eine Tiefe haben können (wie hier das kleine `g').;-)
Eine Möglichkeit wäre vllt


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,xcolor}
\parskip=3ex %nur zur Demo
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crossabovedist %Abstand oberhalb vom \cross
\newlength\crossbelowdist %Abstand unterhalb vom \cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth

\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crossabovedist{1pt}
\setlength\crossbelowdist{0pt}
\setlength\crosscontleftdist{4pt}
\setlength\crosscontrightdist{2pt}
\setlength\crosscontabovedist{1pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\crossdepth}

\newcommand*\crosstr[1]{%
\settodepth\crosscontdepth{\ensuremath{#1}}%
\raisebox{-\crosscontdepth}{%
\mbox{%
\vbox{%
\kern \crossabovedist
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{\ensuremath{\vphantom{b}#1}}%
\kern \crosscontrightdist
}%
}%
\vrule width \crosslinethickness depth \crosscontdepth
\kern \crossrightdist
}%
\kern \crossbelowdist
}%
}%
}%
}
\newcommand*\cross[1]{%
\begingroup
\setlength\crossleftdist{0pt}%
\setlength\crosscontleftdist{0pt}%
\setlength\crossbelowdist{0pt}%
\crosstr{#1}%
\endgroup
}
\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\raisebox{\dimexpr-\crossdepth-\crosscontdepth\relax}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
% \kern \crosscontleftdist
\ensuremath{#1}%
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}
\begin{document}
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
\crosstr{a} vs. \cross{g}%
x\ReEntry{\cross{\cross{\cross{a}y}c}g}x
\end{document}

wobei hier beim \ReEntry die untere horizontale Linie abhängig vom Inhalt `springen' kann.
Was ist Dir lieber? Konstanter Abstand der unteren \ReEntry-Linie zur Grundlinie oder konstanter Abstand der unteren \ReEntry-Linie zum Inhalt?

BTW: wenn Du überwiegend Worte in \cross/\ReEntry verwenden willst, ließe sich auch eine Text- statt einer bzw. zusätzlich zur Matheversion erzeugen.

MfG

Jacobo Belbo
27-11-2011, 23:02
Was ist Dir lieber? Konstanter Abstand der unteren \ReEntry-Linie zur Grundlinie oder konstanter Abstand der unteren \ReEntry-Linie zum Inhalt?

BTW: wenn Du überwiegend Worte in \cross/\ReEntry verwenden willst, ließe sich auch eine Text- statt einer bzw. zusätzlich zur Matheversion erzeugen

Phänomenal. Ich habe noch einmal Baeckers Variablen in den Code eingesetzt und finde, dass das sehr gut aussieht, auch mit der Laufweite. Drei Luxusprobleme stellen sich noch, für die ich keine Einstelloption fand (vgl. angehängter Screenshot):

1. Ich würde den kleinen vorderen Haken des Re-Entries nicht ganz bis auf die Grundlinie durchziehen – so ließe sich eine Überlagerung mit den Inhalten vermeiden. Kann man ihn so definieren, dass er nicht bei der Grundlinie, sondern bei der „tieferen“ Linie (wie beispielsweise unterm „g“) endet? Nicht exakt, aber näherungsweise? [Edit: in der älteren Version gab es mehr Abstand zu dem kleinen Haken? Vgl. Screenshot 2?]
2. Bis zu genau dieser (imaginären) Linie müsste man dann natürlich aus die distinction (den vertikalen Balken des Hakens) herunterziehen und schließlich
3. Scheint der Abstand vom oberen Ende eines Großbuchstabens zur indication (der horizontalen Linie des Hakens) nicht zu den Abständen der indications untereinander zu passen, sondern etwas geringer zu sein. Mit Deinen Variablen kann ich aber entweder nur alle vergrößern oder keinen.

Wie gesagt, das sind alles Luxusprobleme (aber das trifft vielleicht auf das ganze Unternehmen zu…)
Was ich mich aber noch konkret frage: Was wäre der Vorteil, das ganze als Textversion zu konzipieren? Und: Lässt sich der Inhalt der Haken normal (also nicht-kursiv) setzen?

rais
28-11-2011, 13:19
Moin moin,


1. Ich würde den kleinen vorderen Haken des Re-Entries nicht ganz bis auf die Grundlinie durchziehen – so ließe sich eine Überlagerung mit den Inhalten vermeiden. Kann man ihn so definieren, dass er nicht bei der Grundlinie, sondern bei der „tieferen“ Linie (wie beispielsweise unterm „g“) endet? Nicht exakt, aber näherungsweise?

\crosshooklength bestimmt diese Länge (s.u.)


[Edit: in der älteren Version gab es mehr Abstand zu dem kleinen Haken? Vgl. Screenshot 2?]

Ja, durch die Unterlänge des `g' wurde alles nach oben geschoben.


2. Bis zu genau dieser (imaginären) Linie müsste man dann natürlich aus die distinction (den vertikalen Balken des Hakens) herunterziehen und schließlich

s.u., wobei das hier eher ein Zufallsergebnis ist (erfordert also ggf. noch einen Eingriff): unterschiedliche Unterlängen wären hier vermutlich bereits verhängnisvoll, zumal ich hier einfach einen festen Wert von der Hakenlänge abziehe.;)


3. Scheint der Abstand vom oberen Ende eines Großbuchstabens zur indication (der horizontalen Linie des Hakens) nicht zu den Abständen der indications untereinander zu passen, sondern etwas geringer zu sein. Mit Deinen Variablen kann ich aber entweder nur alle vergrößern oder keinen.

Der Abstand der horizontalen Linie zum Inhalt wird mit \crosscontabovedist definiert (hier kommt ggf. eine Mindesthöhe, vorgegeben durch \vphantom{b} hinzu, dadurch sind \cross{a} und \cross{b} gleich hoch). Beim Abstand benachbarter horizontaler Linien kommt \crossabovedist hinzu, setze den vllt mal auf Null (ggf kann man das Teil ja einsparen), dann sollte der Linienabstand dem zum grossen E gleich sein. Soll der Linienabstand kleiner als der Abstand zum E, ginge ein negativer Wert bei \crossabovedist (kann aber anderen Dingen in die Quere kommen, in dem Fall lass hier doch Null und pack z. B. \rule{0pt}{...} mit in das innerste \cross).


Was wäre der Vorteil, das ganze als Textversion zu konzipieren? Und: Lässt sich der Inhalt der Haken normal (also nicht-kursiv) setzen?
Nun ja, genau so, wie sich "Text" von $Text$ unterscheidet: bei letzterem wird eigentlich das Produkt aus T, e, x und t dargestellt...


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,xcolor}
\parskip=3ex %nur zur Demo
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crossabovedist %Abstand oberhalb vom \cross
\newlength\crossbelowdist %Abstand unterhalb vom \cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth
\newlength\crosscontbelowdist

\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crossabovedist{0pt}
\setlength\crossbelowdist{0pt}
\setlength\crosscontleftdist{4pt}
\setlength\crosscontrightdist{2pt}
\setlength\crosscontabovedist{2pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\dimexpr\crossdepth-2pt\relax}
\newif\ifcrosstext
\crosstextfalse
\newcommand*\crosstr[1]{%
\settodepth\crosscontdepth{#1}%
\setlength\crosscontbelowdist{0pt}%
\ifdim\crosscontdepth=0pt
\settodepth\crosscontdepth{g}%
\addtolength\crosscontbelowdist{\crosscontdepth}%
\fi
\raisebox{-\crosscontdepth}{%
\mbox{%
\vbox{%
\kern \crossabovedist
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{%
\ifcrosstext
\vphantom{b}#1%
\else
\ensuremath{\vphantom{b}#1}%
\fi
}%
\kern \crosscontrightdist
}%
\kern \crosscontbelowdist
}%
\vrule width \crosslinethickness %depth \crosscontdepth
\kern \crossrightdist
}%
\kern \crossbelowdist
}%
}%
}%
}
\newcommand*\cross[1]{%
\begingroup
\setlength\crossleftdist{0pt}%
\setlength\crosscontleftdist{0pt}%
\setlength\crossbelowdist{0pt}%
\crosstr{#1}%
\endgroup
}
\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\raisebox{\dimexpr-\crossdepth-\crosscontdepth\relax}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
% \kern \crosscontleftdist
\ifcrosstext
#1%
\else
\ensuremath{#1}%
\fi
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}
\begin{document}
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
\crosstr{a} vs. \cross{g}%
x\ReEntry{\cross{\cross{\cross{y}a}c}g}x


\crosstexttrue %ab hier Textmodus:
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
\crosstr{a} vs. \cross{g}%
x\ReEntry{\cross{\cross{\cross{E}a}c}g}x
\end{document}

MfG

Jacobo Belbo
28-11-2011, 23:03
Rais! Die Text-Version gefällt mir ausgesprochen gut. Habe \setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax} auf -3 gesetzt, that's it.
Du hast Dir mindestens einen Drink Deiner Wahl verdient (wenn Du ahntest, wie lange ich nach so einer Lösung gesucht habe… Du ahnst es vermutlich nicht). Vielen Dank! Jetzt gibt es einen sehr guten Grund, sich in LaTeX einzufuchsen.

P.S.: Die erste Variable (in Deinem Code das große „E“) – wie kann ich das noch ein oder zwei Punkte einrücken (ohne dass sich das auf die folgenden Variablen auswirkt)?

rais
29-11-2011, 00:15
Moin moin,

Rais! Die Text-Version gefällt mir ausgesprochen gut. Habe \setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax} auf -3 gesetzt, that's it.
Du hast Dir mindestens einen Drink Deiner Wahl verdient
*g*


P.S.: Die erste Variable (in Deinem Code das große „E“) – wie kann ich das noch ein oder zwei Punkte einrücken (ohne dass sich das auf die folgenden Variablen auswirkt)?
Am Einfachsten dürfte \cross{\,E} oder \cross{\hspace{2pt}E} sein.
Alternativ ginge evtl. auch, den \kern \crosscontleftdist im \ReEntry-Makro einzukommentieren, den \setlength\crosscontleftdist{4pt} weiter oben an das gewünschte Maß anzupassen und mit


\newcommand*\cross[1]{%
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%<--
% \setlength\crosscontleftdist{0pt}%<--
\setlength\crossbelowdist{0pt}%
\crosstr{#1}%
\endgroup
}
dafür sorgen, daß ein im \ReEntry aufgerufenes \cross entsprechend zurückgerückt wird. Obwohl, das dürfte sich auch auf \cross-Befehle auswirken, die außerhalb eines \ReEntry aufgerufen werden -- evtl wäre die Gruppierung/Längenänderung direkt im \ReEntry-Befehl besser aufgehoben, muß ich nochmal schauen ...


sieht auf den ersten Blick nicht verkehrt aus:


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,xcolor}
\parskip=3ex %nur zur Demo
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crossabovedist %Abstand oberhalb vom \cross
\newlength\crossbelowdist %Abstand unterhalb vom \cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth
\newlength\crosscontbelowdist

\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crossabovedist{0pt}
\setlength\crossbelowdist{0pt}
\setlength\crosscontleftdist{2pt}
\setlength\crosscontrightdist{2pt}
\setlength\crosscontabovedist{2pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax}
\newif\ifcrosstext
\crosstextfalse
\newcommand*\cross[1]{%
\settodepth\crosscontdepth{#1}%
\setlength\crosscontbelowdist{0pt}%
\ifdim\crosscontdepth=0pt
\settodepth\crosscontdepth{g}%
\addtolength\crosscontbelowdist{\crosscontdepth}%
\fi
\raisebox{-\crosscontdepth}{%
\mbox{%
\vbox{%
\kern \crossabovedist
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{%
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\setlength\crossbelowdist{0pt}%
\ifcrosstext
\vphantom{b}#1%
\else
\ensuremath{\vphantom{b}#1}%
\fi
\endgroup
}%
\kern \crosscontrightdist
}%
\kern \crosscontbelowdist
}%
\vrule width \crosslinethickness %depth \crosscontdepth
\kern \crossrightdist
}%
\kern \crossbelowdist
}%
}%
}%
}

\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\raisebox{\dimexpr-\crossdepth-\crosscontdepth\relax}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\setlength\crossbelowdist{0pt}%
\ifcrosstext
#1%
\else
\ensuremath{#1}%
\fi
\endgroup
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}
\begin{document}
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
x\cross{g}%
x\ReEntry{\cross{\cross{\cross{y}a}c}g}x


\crosstexttrue %ab hier Textmodus:
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
x\cross{g}%
x\ReEntry{\cross{\cross{\cross{E}a}c}g}x
\end{document}



MfG

Jacobo Belbo
29-11-2011, 11:13
sieht auf den ersten Blick nicht verkehrt aus
MfG

In der Tat. Habe gerade noch einmal dem


\setlength\crosscontleftdist{1.5pt}

auf 1.5 Punkte gesetzt. Bleibt nur noch die Frage, wie man den Textmodus zur Standardeinstellung macht… und wohin die Drinks gehen, hehe.

rais
29-11-2011, 14:56
Bleibt nur noch die Frage, wie man den Textmodus zur Standardeinstellung macht…


\crosstexttrue
\begin{document}

sollte global wirken (bzw. bis Du es mit \crosstextfalse wieder rückgängig machst).

MfG

Leonard
06-12-2011, 01:17
liebes forum.

ich schreibe gerade an meiner masterarbeit, und auch ich möchte häufiger das cross von spencer-brown verwenden. auf den reentry kommt es erst einmal gar nicht an. und auch nicht auf kreuze in kreuzen, also in mehreren ebenen.

ich bin jedoch erst vor sehr sehr kurzer zeit auf linux (ubuntu) und open office (libreoffice) umgestiegen. meine programmierkenntnisse nicht faktisch nicht vorhanden und ich habe leider null ahnung, wo ich die sachen, die ihr hier postet überhaupt eingeben könnte...

kann mir irgendjemand helfen? ich wäre sehr sehr froh...

rais
07-12-2011, 09:24
Hallo,


ich bin jedoch erst vor sehr sehr kurzer zeit auf linux (ubuntu) und open office (libreoffice) umgestiegen.
da bist Du hier im LaTeX-Forum leider falsch, das hat nichts mit OO zu tun.

MfG

zkn
04-02-2012, 22:38
Ich würde diesen Code-Schnipsel gerne für die exportfunktion in meinem Programm verwenden (http://zettelkasten.danielluedecke.de) - ist das in Ordnung? Soll/darf ich mich irgendwie per erwähnung oder ähnliches erkenntlich zeigen?

rais
05-02-2012, 16:40
Moin moin,

Ich würde diesen Code-Schnipsel gerne für die exportfunktion in meinem Programm verwenden (http://zettelkasten.danielluedecke.de) - ist das in Ordnung?

ich weiß ja nicht, welchen Schnipsel Du genau mit `diesen' meinst, aber spontan würde ich sagen: nur zu!

Soll/darf ich mich irgendwie per erwähnung oder ähnliches erkenntlich zeigen?
Gehört die Angabe einer Fundstelle (hier wohl in Form einer entsprechenden URL) nicht eh zum Guten Ton?

Um auf Nummer sicher zu gehen, dürfte eine PN an bischi (Moderator dieses Boards) nicht schaden.

MfG

zkn
05-02-2012, 19:07
Moin moin,

ich weiß ja nicht, welchen Schnipsel Du genau mit `diesen' meinst, aber spontan würde ich sagen: nur zu!
Diesen hier: http://www.mrunix.de/forums/showpost.php?p=336997&postcount=24


Gehört die Angabe einer Fundstelle (hier wohl in Form einer entsprechenden URL) nicht eh zum Guten Ton?
Ja, ich handhabe das so, aber ich kenn auch einige, die das - aus welchen Gründen auch immer - nicht gerne möchten.

Ich würde z.B., wenn ein Benutzer ins Latex-Format exportiert, im Header-Bereich der Latex-Datei ein Dankeschön inkl. Link zu diesem Thema setzen, sodass jeder sofort sieht, dass durch die Expertise hier im Forum mit geholfen wurde.

P.S.: Wenn so eine Formnotation im Fließtext erscheint, "klebt" sie doch sehr dicht an den Textteilen drüber und drunter. Kann man da den Abstand zum vorigen und Folgeabsatz etwas größer machen?

rais
06-02-2012, 10:48
Ich würde z.B., wenn ein Benutzer ins Latex-Format exportiert, im Header-Bereich der Latex-Datei ein Dankeschön inkl. Link zu diesem Thema setzen, sodass jeder sofort sieht, dass durch die Expertise hier im Forum mit geholfen wurde.

hört sich OK für mich an. Wie gesagt, frag bischi -- oder vllt netzmeister, um auch an die Sichtweise des Forenbetreibers dazu zu kommen. Letzten Endes verlinkst Du damit Seiten von mrunix.de (und nicht von mir, ich poste hier nur ab und zu;-)


P.S.: Wenn so eine Formnotation im Fließtext erscheint, "klebt" sie doch sehr dicht an den Textteilen drüber und drunter. Kann man da den Abstand zum vorigen und Folgeabsatz etwas größer machen?
Hmm. Vorgesehen hatte ich dafür schon was (\crossabovedist/\crossbelowdist), aber noch nicht richtig implementiert :o
Versuch es mit


\raisebox{0pt}[5ex][3ex]{\ReEntry{\cross{\cross{\cross{y}a}c}g}}

und experimentiere mit den Werten (auch bei unterschiedlich hohem/tiefen Inhalt).

MfG

rais
06-02-2012, 18:30
... oder mit \crossabovedist/\crossbelowdist, die ich hier erstmal nur im \ReEntry auswerte (wär das im \cross überhaupt nötig?):


\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,xcolor}
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crossabovedist %Abstand oberhalb vom \cross
\newlength\crossbelowdist %Abstand unterhalb vom \cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth
\newlength\crosscontbelowdist
\newlength\crossAbove
\newlength\crossBelow

\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crossabovedist{4pt}%<--
\setlength\crossbelowdist{3pt}%<--
\setlength\crosscontleftdist{2pt}
\setlength\crosscontrightdist{2pt}
\setlength\crosscontabovedist{2pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax}
\newif\ifcrosstext
\crosstextfalse
\newcommand*\cross[1]{%
\settodepth\crosscontdepth{#1}%
\setlength\crosscontbelowdist{0pt}%
\ifdim\crosscontdepth=0pt
\settodepth\crosscontdepth{g}%
\addtolength\crosscontbelowdist{\crosscontdepth}%
\fi
\raisebox{-\crosscontdepth}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{%
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\setlength\crossbelowdist{0pt}%
\ifcrosstext
\vphantom{b}#1%
\else
\ensuremath{\vphantom{b}#1}%
\fi
\endgroup
}%
\kern \crosscontrightdist
}%
\kern \crosscontbelowdist
}%
\vrule width \crosslinethickness %depth \crosscontdepth
\kern \crossrightdist
}%
}%
}%
}

\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\settoheight\crossAbove{#1}%
\addtolength\crossAbove{\crossabovedist}%
\addtolength\crossAbove{\crosslinethickness}%
\setlength\crossBelow{\dimexpr\crosscontdepth+\cro ssdepth\relax}%
\raisebox{-\crossBelow}[\crossAbove][\dimexpr\crossBelow+\crosslinethickness+\crossbelo wdist\relax]{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\setlength\crossabovedist{0pt}%
\setlength\crossbelowdist{0pt}%
\ifcrosstext
#1%
\else
\ensuremath{#1}%
\fi
\endgroup
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}
\newcommand*\x{HgHgHgHgHgHgHgHg\par}
\begin{document}
\x
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
x\cross{g}%
x\ReEntry{\cross{\cross{\cross{y}a}c}g}x

\x

\crosstexttrue %ab hier Textmodus:
\makebox[0pt][l]{\color{black!20}\rule{\linewidth}{1pt}}%
x\cross{g}%
x\ReEntry{\cross{\cross{\cross{E}a}c}g}x

\x
\end{document}

MfG

zkn
07-02-2012, 09:31
So, ich hab mich auch noch mal ran gesetzt. Mir gefiel die Lösung mit der separaten Raisebox besser (dein voriger Vorschlag). Hab jetzt folgende Umsetzung, die mir auch ganz gut gefällt:



% Dokumentenklasse: 1-seitiger DIN-A4-Artikel (wissenschaftlich)
\documentclass[12pt,oneside,a4paper]{scrartcl}

% Neue deutsche Rechtschreibung
\usepackage{ngerman}

% Neue deutsche Rechtschreibung
\usepackage{amsmath,xcolor}

% Eingabe von Umlauten
% Siehe http://www.tug.org/texlive/devsrc/Master/texmf-dist/doc/latex/base/inputenc.pdf
\usepackage[utf8]{inputenc}

% Anführungszeichen einfach setzen
% Siehe http://mirrors.ctan.org/macros/latex/contrib/csquotes/csquotes.pdf
\usepackage[german=quotes]{csquotes}

% Seitenzahlen in Fußzeile rechts
\usepackage{scrpage2}
\pagestyle{scrheadings}
\rofoot{\pagemark}

% Paket für Grafiken einbinden
\usepackage{graphicx}

% Paket für Literaturverweise einbinden
\usepackage{multibib}

% Standardmäßig kein Einrücken von Absätzen
\parindent 0pt

% Dieses Makro erstellt Befehle, um die Form-Notation von George Spencer Brown
% zu imitieren, die oft von Autoren im Bereich Systemtheorie verwendet wird.
% Vielen Dank an die Benutzer des Mr. Unix Forums für die hilfreichen Tipps zur Umsetzung!
% http://www.mrunix.de/forums/showthread.php?t=66803&page=2
%
% Beispiele: Form =\cross{Innenseite}%
% Beispiele: Form =\cross{Innenseite}Außenseite%
% Beispiele: Form =\ReEntry{\cross{\cross{\cross{Innenseite}Kontext 1}Kontext 2}Kontex 3}Außenseite
%
\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth
\newlength\crosscontbelowdist
\newlength\crossAbove
\newlength\crossBelow
\newlength\crossabovedist
\newlength\crossbelowdist

\setlength\crossabovedist{6ex} %Ändern für Abstand über Form
\setlength\crossbelowdist{4ex} %Ändern für Abstand unter Form
\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crosscontleftdist{1pt}
\setlength\crosscontrightdist{4pt}
\setlength\crosscontabovedist{3.5pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax}
\newif\ifcrosstext
\crosstextfalse
\newcommand*\cross[1]{%
\settodepth\crosscontdepth{#1}%
\setlength\crosscontbelowdist{0pt}%
\ifdim\crosscontdepth=0pt
\settodepth\crosscontdepth{g}%
\addtolength\crosscontbelowdist{\crosscontdepth}%
\fi
\raisebox{-\crosscontdepth}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{%
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\ifcrosstext
\vphantom{b}#1%
\else
\ensuremath{\vphantom{b}#1}%
\fi
\endgroup
}%
\kern \crosscontrightdist
}%
\kern \crosscontbelowdist
}%
\vrule width \crosslinethickness %depth \crosscontdepth
\kern \crossrightdist
}%
}%
}%
}

\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\settoheight\crossAbove{#1}%
\addtolength\crossAbove{\crosslinethickness}%
\setlength\crossBelow{\dimexpr\crosscontdepth+\cro ssdepth\relax}%
\raisebox{-\crossBelow}[\crossAbove][\dimexpr\crossBelow+\crosslinethickness\relax]{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\ifcrosstext
#1%
\else
\ensuremath{#1}%
\fi
\endgroup
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}

\newcommand*\FormAbstand[1]{
\raisebox{0pt}[\crossabovedist][\crossbelowdist]#1
}

\crosstexttrue %setzt global alle Forms auf Textmodus, standard wäre Mathemodus
\begin{document}
\title{}
\maketitle

\section{Formtest}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et

\FormAbstand{Kommunikation =\cross{Bezeichnung}Unterscheidung}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et

\FormAbstand{Kommunikation =\ReEntry{\cross{Bezeichnung}Unterscheidung}}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et

\FormAbstand{Kommunikation =\ReEntry{\cross{Bezeichnung}Unterscheidung}Außens eite}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et

\FormAbstand{Kommunikation =\ReEntry{\cross{\cross{\cross{Bezeichnung}Unt 1}Unt 2}Unt 3}Außenseite}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et

\bibliography{bib}
\bibliographystyle{plain}
\end{document}

zkn
07-02-2012, 09:43
Habe nun noch den Header-Bereich etwas gekürzt und das Mathe rausgenommen, sodass man kein crosstexttrue mehr benötigt:




\newlength\crossleftdist %Abstand links vom\cross
\newlength\crossrightdist %Abstand rechts vom\cross
\newlength\crosscontleftdist %Abstand Inhalt links zum \cross
\newlength\crosscontrightdist %Abstand Inhalt rechts zum \cross
\newlength\crosscontabovedist %Freiraum Inhalt oben zum \cross
\newlength\crossdepth %Tiefe fürs \cross (Freiraum unterm Inhalt)
\newlength\crosslinethickness %Linienstärke fürs \cross
\newlength\crosshooklength %die Länge des Hakens
\newlength\crosscontdepth
\newlength\crosscontbelowdist
\newlength\crossAbove
\newlength\crossBelow
\newlength\crossabovedist
\newlength\crossbelowdist

\setlength\crossabovedist{6ex} %Ändern für Abstand über Form
\setlength\crossbelowdist{4ex} %Ändern für Abstand unter Form
\setlength\crossleftdist{0.5em}
\setlength\crossrightdist{0.5em}
\setlength\crosscontleftdist{1pt}
\setlength\crosscontrightdist{4pt}
\setlength\crosscontabovedist{3.5pt}
\setlength\crossdepth{5pt}
\setlength\crosslinethickness{0.4pt}
\setlength\crosshooklength{\dimexpr\crossdepth-3pt\relax}

\newcommand*\cross[1]{%
\settodepth\crosscontdepth{#1}%
\setlength\crosscontbelowdist{0pt}%
\ifdim\crosscontdepth=0pt
\settodepth\crosscontdepth{g}%
\addtolength\crosscontbelowdist{\crosscontdepth}%
\fi
\raisebox{-\crosscontdepth}{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vbox{%
\hrule height \crosslinethickness
\kern\crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\raisebox{-\crosscontdepth}{%
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
\vphantom{b}#1%
\endgroup
}%
\kern \crosscontrightdist
}%
\kern \crosscontbelowdist
}%
\vrule width \crosslinethickness %depth \crosscontdepth
\kern \crossrightdist
}%
}%
}%
}

\newcommand*\ReEntry[1]{%
\settodepth\crosscontdepth{#1}%
\settoheight\crossAbove{#1}%
\addtolength\crossAbove{\crosslinethickness}%
\setlength\crossBelow{\dimexpr\crosscontdepth+\cro ssdepth\relax}%
\raisebox{-\crossBelow}[\crossAbove][\dimexpr\crossBelow+\crosslinethickness\relax]{%
\mbox{%
\hbox{%
\kern \crossleftdist
\vrule width \crosslinethickness height \dimexpr\crosshooklength+\crosscontdepth\relax
\kern-\crosslinethickness
\vbox{%
\hrule height \crosslinethickness
\kern \crosscontabovedist
\hbox{%
\kern \crosscontleftdist
\begingroup
\setlength\crossleftdist{-\crosscontleftdist}%
#1%
\endgroup
\kern \crosscontrightdist
}%
\kern \crossdepth
\hrule height 0pt depth \crosslinethickness
}%
\vrule width\crosslinethickness
\kern \crossrightdist
}%
}%
}%
}

\newcommand*\FormAbstand[1]{
\raisebox{0pt}[\crossabovedist][\crossbelowdist]#1
}

rais
07-02-2012, 13:06
Moin moin,

Habe nun noch den Header-Bereich etwas gekürzt und das Mathe rausgenommen, sodass man kein crosstexttrue mehr benötigt:

jedem das Seine...




\newcommand*\FormAbstand[1]{
\raisebox{0pt}[\crossabovedist][\crossbelowdist]#1
}

das Teil solltest Du nochmal überdenken:
a) Ist Dir schon aufgefallen, daß bei einem \FormAbstand{\textbf{a}} das `a' gar nicht fett erscheint?
b) Es ist imho sehr schlechter (Programmier-)Stil, signifikante Leerzeichen (<--google mal danach) im Code zu lassen.
c) Ebenso schlechter Stil ist es imho, einer Länge verschiedene Bedeutungen zu geben (Abstand vs. Höhe bzw. Tiefe)
d) Und was machst Du, wenn der Inhalt beim \FormAbstand doch einmal höher und/oder tiefer ist, als geplant?


\documentclass{article}
\usepackage{xcolor}
\newlength\crossabovedist
\newlength\crossbelowdist
\setlength\crossabovedist{6ex} %Ändern für Abstand über Form
\setlength\crossbelowdist{4ex} %Ändern für Abstand unter Form
\newcommand*\FormAbstand[1]{%<--siehe b)
\raisebox{0pt}[\crossabovedist][\crossbelowdist]{#1}%<--{} siehe a) % siehe b)
}

\setlength\fboxsep{0pt}
\setlength\fboxrule{0.1pt}
\newcommand*\x{HgHgHgHgHgHgHgHg\par}

\begin{document}
\x
x\fbox{\FormAbstand{\raisebox{-8ex}{\color{red}\rule{1pc}{20ex}}}}x

\x
\end{document}

zu a) musste ich schon lösen, damit ich \raisebox (die ich in der Demo nur benötige, um eine definierte Tiefe zu bekommen) überhaupt innerhalb von \FormAbstand aufrufen konnte ... oder war es \rule?
zu b) ist bei mir schon fast ein Reflex;-)
zu c/d) Dreimal darfst Du raten, warum die \raisebox in meinem \ReEntry eben nicht direkt \crossabovedist/\crossbelowdist verwendet.;)

MfG

zkn
07-02-2012, 16:21
Hallo Rainer,

vielen Dank für die Hinweise. Das mit den signifikanten Leerzeichen wusste ich nicht, hab's verbessert. Ansonsten verstehe ich aber nicht ganz, was du an dem Ansatz kritisierst, denn wenn ich das richtig verstehe, habe ich nur deinen Vorschlag umgesetzt, oder übersehe ich da grade etwas?

http://www.mrunix.de/forums/showpost.php?p=339260&postcount=32


c) Ebenso schlechter Stil ist es imho, einer Länge verschiedene Bedeutungen zu geben (Abstand vs. Höhe bzw. Tiefe)
d) Und was machst Du, wenn der Inhalt beim \FormAbstand doch einmal höher und/oder tiefer ist, als geplant?


Was du mit c) meinst, habe ich nicht ganz verstanden. Und zu d): man kann es ja in Ausnahmefällen immer noch ändern. Aber Sind und Zweck von Latex ist doch auch, Formate zu vereinheitlichen und dokumentenweit identisch aussehen zu lassen und möglichst nicht für jeden Absatz eine eigene Formatierung?

Gruß
Daniel

rais
07-02-2012, 17:34
Moin Daniel,

Ansonsten verstehe ich aber nicht ganz, was du an dem Ansatz kritisierst, denn wenn ich das richtig verstehe, habe ich nur deinen Vorschlag umgesetzt, oder übersehe ich da grade etwas?

typischer Fall von Parallelentwicklung: während Du diese Idee weiterverfolgt hast, hatte ich mir überlegt, wie man diese Werte möglichst als Konstante -- bei vermeintlich unterschiedlich hohem bzw. tiefem Inhalt also Abstände nach oben/unten umsetzen kann.


Was du mit c) meinst, habe ich nicht ganz verstanden.

Nunja, der neue \ReEntry ist in Deinen Code mit eingeflossen: dort werden \crossabovedist und \crossbelowdist als eben Abstände behandelt ... d. h. wenn ich das richtig umgesetzt habe;-)
In Deinem \FormAbstand lässt Du die \raisebox seiner Umgebung vorgaukeln, sie sei \crossabovedist hoch und \crossbelowdist tief, da sind alleine die Namen der Längen schon irreführend...
Besser wäre imho, wenn Du hier andere Längen verwendest (\formheight/\formdepth vllt?) oder den einen Befehl an den anderen angleichst, also entweder \crossbelowdist/\crossabovedist aus \ReEntry rauswirfst und die beiden optionalen Parameter an dessen \raisebox gleich mit, oder indem Du \crossabovedist/\crossbelowdist als Abstände auswertest (wie das gehen kann, siehst Du am \ReEntry).


Und zu d): man kann es ja in Ausnahmefällen immer noch ändern. Aber Sind und Zweck von Latex ist doch auch, Formate zu vereinheitlichen und dokumentenweit identisch aussehen zu lassen und möglichst nicht für jeden Absatz eine eigene Formatierung?

das heißt aber nicht, daß jeder Absatz gleich hoch sein müsste.
BTW: der \ReEntry wächst mit zunehmenden Inhalt, aber deshalb müssen die Abstände nach oben/unten ja nicht kleiner -- oder gar angepasst -- werden.

MfG

zkn
07-02-2012, 18:36
Hallo Rainer,


Nunja, der neue \ReEntry ist in Deinen Code mit eingeflossen: dort werden \crossabovedist und \crossbelowdist als eben Abstände behandelt ... d. h. wenn ich das richtig umgesetzt habe;-)
Ach so. Aber in dem (deinem) überarbeitetem Code kommen die Variablen crossabovedist und crossbelowdist nicht mehr vor, daher habe ich sie jetzt für das raisebox "zweckentfremdet". aber stimmt, korrekterweise müsste man diese umbenennen, denn sie beschreiben den Abstand der Formnotation zum Text, nicht den Abstand eines einzelnen crosses.


BTW: der \ReEntry wächst mit zunehmenden Inhalt, aber deshalb müssen die Abstände nach oben/unten ja nicht kleiner -- oder gar angepasst -- werden.MfG
Stimmt. Deshalb verwende ich die variablen im \raisebox{0pt}[\crossabovedist][\crossbelowdist]-Befehl als "Konstanten", die den Abstand der Formnotation zum vorigen und folgenden Absatz konstant halten.

Gruß
Daniel

rais
07-02-2012, 21:18
Moin Daniel,


Aber in dem (deinem) überarbeitetem Code kommen die Variablen crossabovedist und crossbelowdist nicht mehr vor, daher habe ich sie jetzt für das raisebox "zweckentfremdet".

stimmt, das hast Du schon -- da hab ich wohl doch meinen eigenen Code zu fassen gehabt ... oder Tomaten auf den Augen :)


Deshalb verwende ich die variablen im \raisebox{0pt}[\crossabovedist][\crossbelowdist]-Befehl als "Konstanten", die den Abstand der Formnotation zum vorigen und folgenden Absatz konstant halten.

Formnotation? Du hältst damit, wenn ich das richtig sehe, den Abstand der Grundlinie einer solchen Zeile in Relation zu den beiden umliegenden konstant, unabhängig davon, was in ihr steht. Naja, wenn es das ist, was Du willst, was will ich denn;-)

MfG

zkn
07-02-2012, 21:26
Naja, wenn es das ist, was Du willst, was will ich denn;-)
Das weiß ich jetzt gar nicht mehr so genau. :-D aber im Moment glaube ich, dass das gemacht wird, was ich wollte.