PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seltsames Verhalten bei Zeilenumbrüchen in Formeln



schoppenhauer
02-07-2006, 23:15
Hallo.

Ein Problem das ich schon bei meiner Facharbeit hatte (die deswegen Formfehler bemängelt bekam. weil es mir nicht überall aufgefallen ist) ist das seltsame Verhalten von LaTeX beim Umbrechen von Formeln im Fließtext. Manchmal will ich z.B. nicht, dass LaTeX eine Formel irgendwo umbricht, zum Beispiel ist es absolut hässlich, wenn ein Gleichheitszeichen das erste Zeichen in einer neuen Zeile ist. Nun, dies zu Verhindern geht mit geschweiften Klammern.
Andererseits trennt LaTeX dafür manchmal nicht dort die Zeile, wo ich es ggf. haben wollen würde. Zum Beispiel bei \times wird bei mir nicht automatisch umgebrochen. Gibt es da eine Möglichkeit, LaTeX zu sagen, es DARF an dieser Stelle die Zeile Umbrechen, ohne dieß gleich durch \\ oder was auch immer zu erzwingen (also dass LaTeX da wirklich nur umbricht wenn es notwendig ist - quasi wie bei + oder dem Gleichheitszeichen)?

Und das Andere ist... Oft wird die Formel zurecht nicht umgebrochen, weil ich dies nicht will, dafür geht dann aber das nicht-umgebrochene über den Zeilenrand hinaus. Das ist auch nicht schön. Da verstehe ich z.B. nicht, warum LaTeX nicht einfach genau wie bei Wörtern den entsprechenden Formelteil in die nächste Zeile setzt...
Und "manuell" nachhelfen finde ich zum Einen etwas... schlecht, da ich hin und wieder in letzter Sekunde noch die Schriftgröße verändern will - und wenn ich da dann einen Zeilenumbruch vor der Formel die über den Rand hinaus ginge erzwinge, dann kann es sein, dass es mit der kleineren Schrift garnicht notwendig wäre, und dass z.B. eine Zeile nur zur Hälfte ausgefüllt ist. Außerdem kann man mit \newline oder \\ die Zeile zwar Umbrechen und verhindern, dass die Formel über den Rand hinausgeht, also bewirken, dass sie in die nächste Zeile kommt. Aber dafür ist die Zeile, in der sie vorher stand, nichtmehr bündig formatiert - was in einem sonst bündig formatierten Text immens auffällt. Keine der Möglichkeiten die ich hier genannt habe ist also die Richtige. Was kann man da machen? Da gibts doch bestimmt irgendeinen Befehl.

sofa-surfer
02-07-2006, 23:51
Hallo,

ich hab bei Bedarf manchmal mit \mbox gearbeitet. Damit kann man zumindest steuern, wo nicht umgebrochen wird.

Matthias

schoppenhauer
03-07-2006, 00:33
Naja. Das kann man aber auch einfach dadurch, dass man das Betreffende in geschweifte Klammern setzt. Damit hatte ich ja kein Problem.

RedCloud
03-07-2006, 06:43
Ein Problem das ich schon bei meiner Facharbeit hatte (die deswegen Formfehler bemängelt bekam. weil es mir nicht überall aufgefallen ist) ist das seltsame Verhalten von LaTeX beim Umbrechen von Formeln im Fließtext. Manchmal will ich z.B. nicht, dass LaTeX eine Formel irgendwo umbricht, zum Beispiel ist es absolut hässlich, wenn ein Gleichheitszeichen das erste Zeichen in einer neuen Zeile ist. Nun, dies zu Verhindern geht mit geschweiften Klammern.
Andererseits trennt LaTeX dafür manchmal nicht dort die Zeile, wo ich es ggf. haben wollen würde. Zum Beispiel bei \times wird bei mir nicht automatisch umgebrochen. Gibt es da eine Möglichkeit, LaTeX zu sagen, es

du hast \usepackage[T1]{fontenc} ??



DARF an dieser Stelle die Zeile Umbrechen, ohne dieß gleich durch \\ oder was auch immer zu erzwingen (also dass LaTeX da wirklich nur umbricht wenn es notwendig ist - quasi wie bei + oder dem Gleichheitszeichen)?


hier kannst du um\-bre\-chen ...


Und das Andere ist... Oft wird die Formel zurecht nicht umgebrochen, weil ich dies nicht will, dafür geht dann aber das nicht-umgebrochene über den Zeilenrand hinaus. Das ist auch nicht schön. Da verstehe ich z.B. nicht, warum LaTeX nicht einfach genau wie bei Wörtern den entsprechenden Formelteil in die nächste Zeile setzt...


es gibt nicht nur LaTeX, es gibt auch eine umfangreiche Doku dazu, beisielsweise

http://www.dante.de/CTAN/info/math/voss/mathmode/Mathmode.pdf

da steht am Anfang was von Trennung im Inline mode

rc

schoppenhauer
03-07-2006, 13:36
es gibt nicht nur LaTeX, es gibt auch eine umfangreiche Doku dazu, beisielsweise
http://www.dante.de/CTAN/info/math/voss/mathmode/Mathmode.pdf
da steht am Anfang was von Trennung im Inline mode
Ähm... Nunja... Da steht drin, wie man erreichen kann, dass getrennt bzw. nicht getrennt wird... Das ist ok. Bzw. ist das sogar gut. Aber: Ich habe ja genau das Problem, dass ich in einer Inline-Formel nicht will, dass etwas getrennt wird, und LaTeX dieses dann aber über den Zeilenrand hinaus setzt, und sich wegen einer "underfull hbox" oder so beschwert. Das ist ziemlich nervig. Ich will ja, dass die Formel nicht getrennt wird. Nur will ich gleichzeitig nicht, dass sie über den Rand hinaus geht. Lieber soll sie dann in eine neue Zeile eingesezt werden. Ich hatte aber btw das gleiche Problem bereits bei längeren Wörtern wie "dementsprechend", die ich nicht trennen wollte (und dann aber letztendlich trennen lassen musste), aber einfach mal eben über den Zeilenrand hinaus gesetzt werden.

Lieber sollen die dann in die nächste Zeile und der Abstand der Wörter in der vorherigen Zeile soll halt etwas größer sein. Aber einfach \\ dementsprechend ... ging auch nicht, denn dann wird die obige Zeile nicht bündig formatiert.

Auch \sloppy (was zwar generell irgendwie be******en aussieht, aber ggf. wenigstens bündig formatieren sollte) hat nichts gebracht.
Mir ist es ehrlichgesagt lieber, dass mal in einer Zeile der Wortabstand jeweils etwas größer ist, als dass sie nicht bündig formatiert ist.

RedCloud
03-07-2006, 14:20
Ähm... Nunja... Da steht drin, wie man erreichen kann, dass getrennt bzw. nicht getrennt wird... Das ist ok. Bzw. ist das sogar gut. Aber: Ich habe ja genau das Problem, dass ich in einer Inline-Formel nicht will, dass etwas getrennt wird, und LaTeX dieses dann aber über den Zeilenrand hinaus setzt, und sich wegen einer "underfull hbox" oder so beschwert. Das ist ziemlich nervig. Ich will ja, dass die Formel nicht getrennt wird. Nur will ich gleichzeitig nicht, dass sie über den Rand hinaus geht. Lieber soll sie dann in eine neue Zeile eingesezt werden. Ich hatte aber btw das gleiche Problem bereits bei längeren Wörtern wie "dementsprechend", die ich nicht trennen wollte (und dann aber letztendlich trennen lassen musste), aber einfach mal eben über den Zeilenrand hinaus gesetzt werden.


Sehe kein Problem ...



\documentclass[a5,ngerman,12pt]{scrartcl}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\setlength\parindent{0pt}
\emergencystretch=3em
\begin{document}

\rule{\linewidth}{1pt}

Ich hatte aber nebenbei das gleiche Problem bereits bei längeren Wörtern wie
\mbox{dementsprechend}, die ich nicht trennen wollte

\end{document}


rc

sofa-surfer
03-07-2006, 14:27
Hallo,

ich denke auch, dass das eigentlich kein wirkliches Problem ist, was du da beschreibst. In speziellen Fällen hilft eigentlich immer das Hantieren mit \mbox und eventuell bei Bedarf noch \sloppy. Das geht natürlich insgesamt negativ in den Satz ein, aber so kann man schon ganz gut erzwingen was wo getrennt wird und was nicht. Und was natürlich immer geht, ist das Umstellen/Umschreiben des Textes ...

Matthias

schoppenhauer
03-07-2006, 14:41
Also danke für die vielen Antworten, aber ich glaube irgendwie ihr versteht das eigentliche Problem nicht...

Ich habe kein Problem damit, zu verhindern, dass ein Wort getrennt wird (ich mach das immer mit \nohyphen, bzw. lasse ich generell idR keine Worttrennung zu).

Und mit dem Trennen von Inline-Formeln habe ich inzwischen dank der ersten Antwort auch keine Probleme mehr.

Aber ich habe das Problem, dass längere Wörter und Formelteile, bei denen ich ebendies - nämlich die Trennung - verhindere, dann über den Zeilenrand hinausgehen.

Und ich habe ja bereits in den Text geschrieben, dass \sloppy nicht immer geht - da ist es wenig sinnvoll mir nochmal zu \sloppy zu raten :D .

Und den Satz umzustellen ist wohl auch keine gute Lösung, vor Allem, da ja LaTeX kein WYSIWYG-System ist. Da könnte man ja gleich Word oder OpenOffice verwenden... Das wäre dann sogar besser, da ja das compilieren grade bei größeren Sachen recht lange dauert.

Also nochmal das eigentliche Problem: Lange Wörter und Formeln werden über den Zeilenrand (und Teilweise sogar über den Seitenrand) hinausgesetzt. Und: NEIN, ich will diese Sachen NICHT trennen, ich will, dass sie ungetrennt sind, und dann lieber in die neue Zeile gesetzt werden. Das Ganze aber OHNE dass die vorherige Zeile nicht richtig formatiert wird.

Ich hoff dass meine Frage jetzt deutlich ist.

Trotzdem natürlich vielen Dank für die bisherigen zahlreichen Antworten und entschuldigung, wenn ich irgendwas undeutlich geschrieben habe.

RedCloud
03-07-2006, 14:45
Also danke für die vielen Antworten, aber ich glaube irgendwie ihr versteht das eigentliche Problem nicht...

Ich habe kein Problem damit, zu verhindern, dass ein Wort getrennt wird (ich mach das immer mit \nohyphen, bzw. lasse ich generell idR keine Worttrennung zu).

Und mit dem Trennen von Inline-Formeln habe ich inzwischen dank der ersten Antwort auch keine Probleme mehr.

Aber ich habe das Problem, dass längere Wörter und Formelteile, bei denen ich ebendies - nämlich die Trennung - verhindere, dann über den Zeilenrand hinausgehen.


mein Beispiel zeigt genau, wie man eine Trennung verhindert und nicht über den Rand geschrieben wird!

rc

Kojak
03-07-2006, 17:05
Ich kenn das Problem, das zB bei Titeln und Namen oder Zahlen mit Einheiten (die ja zusammengehören) an der falschen Stelle getrennt wird. In die \mbox Umgebung packen, bewirkt das nicht getrennt, aber über den Rand geschrieben wird.
Ich hab mir dann mit dem \linebreak -Befehl vor \mbox geholfen, der die vorhergehende Zeile bündig abschliessen lässt und erst dann die \mbox schreibt.

Gruß,
Stephan

countbela666
03-07-2006, 17:39
Ich kenn das Problem, das zB bei Titeln und Namen oder Zahlen mit Einheiten (die ja zusammengehören) an der falschen Stelle getrennt wird.Für Titel ein hartes Leerzeichen verwenden ("~" non-breaking space), für Einheiten das Paket units einbinden und als \unit[1]{m} angeben, zwischen Komponenten von Abkürzungen ein Spatium setzen ("\,"). Überall keine \mbox nötig.

Grüße,
Marcel

schoppenhauer
03-07-2006, 19:21
mein Beispiel zeigt genau, wie man eine Trennung verhindert und nicht über den Rand geschrieben wird!Nein! Das tut es nicht!

Gegenbeispiel:

\documentclass[a4paper]{article}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{pstricks}
\pagestyle{fancy}
\usepackage{amsfonts}
\usepackage{bbm}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\oddsidemargin50mm
\textwidth121mm
\textheight240mm
\topmargin-10mm

\begin{document}
\begin{itemize}
\item blabla
\begin{enumerate}
\item blabla \\
Was offenbar zutrifft. Gelte nun als
Induktionsvoraussetzung \mbox{${k(i+n)=}$}$i^2+2in+g(x)$
\end{enumerate}
\end{itemize}
\end{document}
Ist quasi genau das was du gesagt hast, und geht nicht. Die Zeile wird über den Rand hinaus gesetzt. (Das Gleiche passiert ohne \mbox auch.) Der Breite Rand links soll dahin (nur falls das irgendwie stört).

Wie dem auch sei. Kojaks Anweisung \linebreak ist schon mal ein wenig mehr das was ich suche. Nur dass da jetzt immer umgebrochen wird, ich will ja nur dann dass umgebrochen wird, wenn das ding nicht mehr in die Zeile passt. Und da LaTeX doch Turingmächtig ist, müsste das doch gehen, ohne dass ich zwanzigmal compiliere... :/

\linebreak wird ja als \linebreak[4] angesehen. Aber bereits \linebreak[3] ist anscheinend zu wenig, um dies zu erreichen - bei \linebreak[3] wird nicht umgebrochen, sondern auch über den Zeilenrand hinausgeschrieben... das ist irgendwie doch ein wenig idiotisch... also sorry, sonst ist latex ja sehr gut, aber da kapier ich den Sinn nicht.

RedCloud
03-07-2006, 22:25
Nein! Das tut es nicht!

wenn du dich natürlich weigerst, mein Beispiel 1. auszuprobieren und 2. mal zu sehen, welche Zeilen _ich_ habe, aber _du_ nicht, dann ist dir wohl nicht zu helfen....



Gegenbeispiel:

\documentclass[a4paper]{article}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{pstricks}
\pagestyle{fancy}
\usepackage{amsfonts}
\usepackage{bbm}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\oddsidemargin50mm
\textwidth121mm
\textheight240mm
\topmargin-10mm





\emergencystretch=3em
...


Und nu ... was ist mit deinem Gegenbeispiel??? Wahrscheinlich hast du überhaupt keine Ahnung was \emergencystretch macht ...


rc

RedCloud
03-07-2006, 22:25
Ich kenn das Problem, das zB bei Titeln und Namen oder Zahlen mit Einheiten (die ja zusammengehören) an der falschen Stelle getrennt wird. In die \mbox Umgebung packen, bewirkt das nicht getrennt, aber über den Rand geschrieben wird.
Ich hab mir dann mit dem \linebreak -Befehl vor \mbox geholfen, der die vorhergehende Zeile bündig abschliessen lässt und erst dann die \mbox schreibt.


Gruselige Lösung und absolut nicht LaTeX-würdig ...

schoppenhauer
03-07-2006, 22:32
Und nu ... was ist mit deinem Gegenbeispiel???Ja. Jetzt gehts.

Wahrscheinlich hast du überhaupt keine Ahnung was \emergencystretch macht ...Nein. Aber ansonsten hätte ich wohl keinen Grund gehabt zu fragen, oder?


Gruselige Lösung und absolut nicht LaTeX-würdig ...:confused:

RedCloud
03-07-2006, 22:37
Ja. Jetzt gehts.


Die Lösung hatte ich dir schon im Beispiel von 14.20Uhr angegeben ...

rc

~Anja~
15-08-2006, 14:40
Hallo,
ich habe genau das gleiche Problem wie schoppenhauer. Mit dem Beispiel von RedCloud scheint es aber vernünftig zu funktionieren, wenn man eine \mbox um die jeweilige Formel setzt.





\documentclass[a5,ngerman,12pt]{scrartcl}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\setlength\parindent{0pt}
\emergencystretch=3em
\begin{document}

\rule{\linewidth}{1pt}

Ich hatte aber nebenbei das gleiche Problem bereits bei längeren Wörtern wie
\mbox{dementsprechend}, die ich nicht trennen wollte

\end{document}


Nur ist mir hierbei nicht klar, was "\rule{\linewidth}{1pt}" genau macht. Ich habe es zunächst weggelassen und es funktioniert trotzdem.
"\emergencystretch=3em" habe ich mit eingebunden, habe jedoch keinen Schimmer was das genau macht.
Gruß,
Anja

RedCloud
15-08-2006, 14:50
Nur ist mir hierbei nicht klar, was "\rule{\linewidth}{1pt}" genau macht. Ich habe es zunächst weggelassen und es funktioniert trotzdem.
"\emergencystretch=3em" habe ich mit eingebunden, habe jedoch keinen Schimmer was das genau macht.


\rule{\linewidth}{1pt} das erzeugt nur eine Testlinie, um genau zu sehen, wie breit ein Absatz ist. \emergencystretch=3em gibt vor, welchen Freiraum TeX beim Trennen maximal lassen kann:

"TEX will make up to three attempts to break a paragraph into lines. The first two use \pretolerance and \tolerance [97]. TeX only makes the third attempt if \emergencystretch is positive. In that case TeX adds \emergencystretch to the stretch in the line when the text must stretch to fill an hbox of the correct width. This decreases \badness [107]. "

rc

~Anja~
15-08-2006, 15:15
\rule{\linewidth}{1pt} das erzeugt nur eine Testlinie, um genau zu sehen, wie breit ein Absatz ist.

ah, alles klar.



\emergencystretch=3em gibt vor, welchen Freiraum TeX beim Trennen maximal lassen kann:

"TEX will make up to three attempts to break a paragraph into lines. The first two use \pretolerance and \tolerance [97]. TeX only makes the third attempt if \emergencystretch is positive. In that case TeX adds \emergencystretch to the stretch in the line when the text must stretch to fill an hbox of the correct width. This decreases \badness [107]. "

ok. recht kompliziert. Aber das Ergebnis sieht zumindest gut aus...
Gruß,
Anja