Länge eines Zeichens messen (zwecks \not-Positionierung)

Formelsatz für Mathematik, Naturwissenschaften und Technik


guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Länge eines Zeichens messen (zwecks \not-Positionierung)

Beitrag von guy.brush™ »

Hallo,

ich habe jetzt ein wenig gesucht und leider keine komplette Lösung gefunden. Zuerst einmal: Ich habe hier ein paar längere Pfeile (\xrightarrow) und möchte diese nun negieren. Im Paket stmaryrd werden netterweise die Zeichen \arrownot und \Arrownot definiert, die einen passenderen/schöneren Strich für Pfeile zur Verfügung stellen als \not.

Auf Seite 8 im Manual zu stmaryrd werden diese verwendet, um für \longrightarrow und \Longrightarrow richtig positionierte nicht-Striche zu definieren:

Code: Alles auswählen

\stmry@if\def\longarrownot{\mathrel{\mkern5.5mu\arrownot\mkern-5.5mu}}\fi
\stmry@if\def\Longarrownot{\mathrel{\mkern5.5mu\Arrownot\mkern-5.5mu}}\fi
Da komme ich gleich auch zu meinen ersten 3 kleinen Fragen: Was ist/macht genau \mkern, welche Einheit ist "mu" und wieso definieren die hier den Strich als \mathrel?

Für beliebig lange Pfeile, z.B. mittels \xrightarrow erstellte, habe ich jedoch keinen mittig positionierten nicht-Strich. Hier ein Beispiel, das das Problem verdeutlicht:

Code: Alles auswählen

\documentclass{scrartcl}

% --------------------- Einbinden benötigter Pakete ---------------------
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[intlimits]{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsopn}
\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{stmaryrd}


\begin{document}

\begin{align*}
  \intertext{L"osung mittels den neuen Befehlen von \texttt{stmaryrd} und den normalen Pfeilen:}
  A &\longarrownot\longrightarrow B\\
  A &\Longarrownot\Longrightarrow B
  \intertext{Probleme bekommt man aber in folgender Situation:}
  A &\longarrownot\xrightarrow{n \rightarrow \infty} B\\
  A &\arrownot\xrightarrow{n \rightarrow \infty} B
\end{align*}


\end{document}
Meine Idee war jetzt, die Definition von \longarrownot und \Longarrownot zu übertagen auf andere Symbole. Dazu würde ich zum einen gerne den Code verstehen, zum anderen aber benötige ich die genaue Länge meines Symbols, welche ich dann durch 2 teilen darf, dann müsste der Strich eigentlich mittig sitzen (wenn ich das richtig verstehe).

Ich habe etwas von dem Paket "calc" gelesen, dass das angeblich könne, aber alle meine Versuche scheiterten :).


Kann mir da jemand helfen :)?


Viele Grüße,

\\ guy.brush
Zuletzt geändert von guy.brush™ am Sa 19. Nov 2011, 20:36, insgesamt 1-mal geändert.
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Ich habe jetzt nicht so viel Zeit und muss auch noch ein Referat vorbereiten, daher nur ein paar Tips auf die Schnelle.

Das mu ist eine Längeneinheit für den Mathemodus, mehr dazu solltest du im (frei verfügbaren) TeX Book finden.
\mkern ist vermutlich das Matheanalogon zu \kern, was es erlaubt, den Abstand zwischen zwei Zeichen zu kontrollieren.

Für deine Längenmessung müsstest du einen Hilfslängenbefehl (\newlength{\hilfslaenge}) definieren und dann solltest du mit \settowidth{\hilfslaenge}{Pfeilbefehl} arbeiten können. Bin grad aber nicht scher, ob das auch im Mathemodus geht. Im Zweifel kannst du versuchen, das Argument um $…$ ergänzen. Dann kannst du mit \mkern{0.5*\hilfslaenge} (wenn das nicht geht musst du mit calc eine zweite Hilfslänge berechnen) auf die Hälfte der Pfeillänge springen, deinen Not-Strich setzten und mit \mkern{-0.5*\hilfslaenge} zurück zur Ausgangsposition gehen, um dann ganz normal den \xleftarrow oder was auch immer anzuschließen.
Versuche damit mal, an Minimalbeispiel zu erstellen, an dem wir dann weiterarbeiten können – spätestens Mittwoch nach meinem Referat …

Gute Nacht!
Tobi

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Code: Alles auswählen

\documentclass{scrartcl}

% --------------------- Einbinden benötigter Pakete ---------------------
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[intlimits]{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsopn}
\usepackage{amsthm}
\usepackage{mathtools}
\usepackage{stmaryrd}

\newlength{\hilfslaenge}
\settowidth{\hilfslaenge}{$\xrightarrow[n \rightarrow \infty]{\text{L}_r}$}
% \newlength{\hilfe}
% \settowidth{\hilfe}{0.5 * \hilfslaenge}
\def\blabla{\mathrel{\mkern{\hilfslaenge mu}\arrownot\mkern-{\hilfslaenge mu}}}

\begin{document}

\begin{align*}
  \intertext{L"osung mittels den neuen Befehlen von \texttt{stmaryrd} und den normalen Pfeilen:}
  A &\longarrownot\longrightarrow B\\
  A &\Longarrownot\Longrightarrow B
  \intertext{Probleme bekommt man aber in folgender Situation:}
  A &\longarrownot\xrightarrow{n \rightarrow \infty} B\\
  A &\arrownot\xrightarrow{n \rightarrow \infty} B
\end{align*}

Versuche zur Probleml"osung:

\[
  \blabla\xrightarrow{n \rightarrow \infty}
\]

\end{document}

Hm ... irgendwie bekomme ich es so nicht hin :).



PS: Viel Erfolg (oder Glück? ;P) beim Referat! :)
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Damit gehts:

Code: Alles auswählen

\documentclass{scrartcl} 

% --------------------- Einbinden benötigter Pakete --------------------- 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\usepackage[utf8]{inputenc} 
\usepackage[intlimits]{amsmath} 
\usepackage{amssymb} 
\usepackage{amsfonts} 
\usepackage{amsopn} 
\usepackage{amsthm} 
\usepackage{mathtools} 
\usepackage{stmaryrd} 

\newlength{\xarrlenI}% Hilfslänge I
\newlength{\xarrlenII}% Hilfslänge 2
\newcommand{\xarrnot}[1]{%
	\settowidth{\xarrlenI}{\ensuremath{\textstyle#1}}% Hilfslänge I setzten
	\setlength{\xarrlenII}{0.45\xarrlenI}% Hilflänge II = 0.5*Hilfslänge I
	\mkern-5.5mu% \mathrel-Abstand ausgleichen (?)
	\kern\xarrlenII% in die Mitte gehen
	\arrownot% Nicht-Strich setzen
	\kern-\xarrlenII% von der Mitte zurück zum Anfang
	\mkern5.5mu% zweiter Ausgleich (?)
	#1% Pfeil (Argument) ausgeben
}


\begin{document} 
\[ 
  |a\xarrnot{\xrightarrow{n \rightarrow \infty}}b|
\]
\[ 
  |a\xarrnot{\xrightarrow{i,j,k,l,m \rightarrow \infty}}b|
\]
\[ 
  |a\xarrnot{\xrightleftharpoons{\text{irgend was komischs passiert}}}b|
\]
\end{document}
Frag mich nicht, warum diese Ausgleichslängen (\mkern±5.5mu) nötig sind …

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Irgendwie verstehe ich nicht, wie bzw. dass das funktionieren soll :D.

Also bei meinem im Startpost schon erwähnter Definition kann ich auch die Zahlen bei \mkern ändern und somit den Strich verschieben. Aber irgendwie geht das scheinbar nicht über eine Variable. [Eine Möglichkeit müsste also die fast komplett manuelle sein: Länge des Zeichens in mu messen, ausgeben lassen und in Definition für jeden benötigten Fall eintragen, dann hat man halt n \in \mathbb{N} viele Definitionen ;).]

Du verwendest zum einen hier 0.45 anstelle von 0.5, was mich stutzig macht. Zum anderen darf man die 5.5 bei \mkern nicht verändern. Hä?^^

Und wieso nutzt du \textstyle?


Der Strich wirkt aber irgendwie auch nicht 100%-ig in der Mitte ... oder täuscht das?


Irgendwie ... der Code darf doch gar nicht funktionieren/richtig sein :D.
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Das \textstyle ist übrig geblieben und kann gelöscht werden.

Das es so funktioniert finde ich auch mehr als seltsam. Finde auch, dass es so nicht richtig sein dar. Aber hey, es geht …
Ich vermute, dass es was mit TeX Mathesatz zu tun (siehe TeX Book, u. a. Stichwort atoms). Wenn du mehr dazu wissen willst, kannst du dich mit der Lösung ja nochmal an tex.stackexchange wenden, da weiß bestimmt jemand mehr Rat als ich.

Ist denn den Problem gelöst mit der Lösung, die es eigentlich nicht geben kann? Dann könntest du noch den Status anpassen ;-)

guy.brush™
Forum-Century
Forum-Century
Beiträge: 185
Registriert: So 8. Aug 2010, 19:43
Wohnort: Earth

Beitrag von guy.brush™ »

Ich habe das ganze einmal ausgedruckt, um mein Augenmaß zu bestätigen oder zu widersprechen. Ich wurde dabei allerdings bestätigt. Die Lösung setzt den Strich nicht exakt in die Mitte.


Vielleicht sollten wir doch erst folgenden Schritt machen: Wüsstest du denn einen Weg, die Länge eines Zeichens zu messen und diese Länge dann in einer beliebigen Maßeinheit (hier mu) ausgeben zu lassen? Dann könnte ich diese manuell gemäß obiger (im Startpost) Definition eintragen.
Arch Linux - KDE - TeXLive - Kile - \me = Advanced Newbie

Interessensschwerpunkte: Mathematik- und Formelsatz sowie mathematische (Mikro-)Typographie
Offenes Problem: negierte \xarrow-Pfeile beliebiger Länge

Benutzeravatar
iTob
Forum-Meister
Forum-Meister
Beiträge: 1221
Registriert: Mo 19. Apr 2010, 22:19
Kontaktdaten:

Beitrag von iTob »

Ne. Da weiß ich so ad hoc keinen Weg …

Ich stelle bei Gelegenheit mal einen Frage auf tex.sx, dann sehen wir weiter.

Antworten