PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abstände von eviroments verändern



kurztipp
16-01-2013, 12:32
Hallo,

ich suche eine Möglichkeit die Abstände vor und nach einer neuen Umgebung zu verändern.
Im Internet habe ich nur spezielle Pakete gefunden, die itemize o.ä. verändern.
Ich würde aber gerne alle vertikalen Abstände, die \begin{UMGEBUNG} und \end{UMGEBUNG} erzeugen (global) beeinflussen.

Wie geht das?

LG

klops
16-01-2013, 13:06
\begin{…} und \end{…} fügen nicht generell einen vertikalen Abstand ein. Stattdessen ist das abhängig von der jeweiligen Umgebung. So ist beispielsweise tabular gar keine Umgebung im vertikal-Modus, sondern im Horizontalmodus. Es fügt also noch nicht einmal einen Absatz ein. Du musst also schon genauer angeben, bei welchen Umgebungen Du eine Änderung herbei führen möchtest. Außerdem ist zu bedenken, dass einige grundlegende Umgebungen auch intern verwendet werden und dann an Stellen zu Änderungen führen, bei denen man das eher nicht haben will.

kurztipp
16-01-2013, 15:32
Hallo,


\begin{…} und \end{…} fügen nicht generell einen vertikalen Abstand ein.

Schade, das dem so ist. Wenn ich also verschiedene Umgebungen habe, die alle vertikale Abstände erzeugen, muss ich alle individuell anpassen?
Konkret möchte ich den Abstand der equation-, quote- und multicols-Umgebung verändern.

LG

Lilliane
16-01-2013, 15:47
Du musst die Abstände nicht individuell ändern. Eine Möglichkeit für die equation-Umgebung findest Du hier How can I decrease spaces between equations? (http://tex.stackexchange.com/questions/32918/how-can-i-decrease-spaces-between-equations).

Für die quote- und multicols-Umgebung wissen andere hier bestimmt eine Lösung.

klops
17-01-2013, 07:52
quote ist normalerweise eine list-Umgebung. Bei den Standardklassen und bei den KOMA-Script-Klassen, wird dabei am Anfang und am Ende ein \topsep oder ein \partopsep eingefügt. Welches davon hängt davon ab, ob die Umgebung im vertikalen oder im horizontalen Modus ausgerufen wird. Die Längen zu ändern hat dann Einfluss auf alle list- und alle tivlist-Umgebungen, beispielsweise auch auf center, flushleft, flushright, enumerate, itemize, verbatim, quoation u. v. m.

Für equation sind die Längen \abovedisplayskip, \abovedisplayshortskip, \belowdisplayskip und \belowdisplayshortskip zuständig. Das hat dann auch Auswirkungen auf andere Matheumgebungen.

All diese obigen Längen sind in source2e.pdf dokumentiert.

Vor und nach multicols-Umgebungen wird laut Seite 2 der multicol-Doku, multicol.pdf, ein Abstand von \multicolsep eingefügt.

Man muss das also schon individuell, nämlich je nach Umgebung anpassen. Für einige von Basisumgebungen abgeleitete Umgebungen gibt es aber gemeinsame Längen.

kurztipp
17-01-2013, 10:54
Hallo,

danke für diese hilfreiche Erklärung. Auch die Dokumentation ist bestimmt bei manch anderen Fragen nützlich.
Leider versteh ich noch nicht ganz, wie ich dieses Wissen nun nutzen kann, denn \multicolsep0pt bringt leider nicht den gewünschten Erfolg:


\documentclass[fontsize=12pt, paper=a4, parskip=half, headings=normal, landscape]{scrartcl}
% twoside=false ist Standard für article
% Deutsche Sprachunterstützung
\usepackage{ngerman}
\usepackage[utf8]{inputenc}

% Sonderzeichen verfügbar machen
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\usepackage{multicol}
\usepackage{longtable}
% Seitenränder
\usepackage{geometry}
\geometry{a4paper, top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm,
ignoreall,noheadfoot} % headsep=Abstand Kopfzeile-Text footskip=Abstand Fußzeile-Text

\usepackage{fancyheadings}
\pagestyle{empty}
\begin{document}

\begin{longtable}{*{2}{|p{0.49\textwidth}}|}
% BEGINN: Tabellenüberschrift erste Seite
\hline
Spalte A & Spalte B \\
\hline
\endhead
\hline

Dies das &
Mehrspaltiger Text \newline
\begin{multicols}{2}
\multicolsep0pt
\textbullet Abstand $\uparrow$ zu groß \newline
\textbullet B \columnbreak\newline
\textbullet C \newline
\textbullet Abstand $\downarrow$ i. O. könnte kleiner sein
\end{multicols}
Text danach \\
\hline


\end{longtable}

\end{document}

klops
17-01-2013, 15:24
Wenn Du den Abstand änderst, nachdem die Umgebung begonnen hat, also nachdem der Abstand bereits eingefügt wurde, ist es eigentlich nicht sehr verwunderlich, dass sich der Abstand nachträglich nicht mehr ändert …

In Deinem Beispiel wäre es übrigens ganz einfach, den Abstand zu verkleinern: Den Absatz vor der multicols-Umgebung weg lassen. Dann wird auch der Absatzabstand an der Stelle nicht eingefügt.

BTW: Was soll denn dieses Gefummel mit \textbullet und hartem Zeilenvorschub (\newline)? Für so etwas gibt es Listen wie itemize bzw. die entsprechenden Listen mit geringerem, konfigurierbarem Abstand der diversen Listen-Pakete.


\documentclass[fontsize=12pt, paper=a4, parskip=half, headings=normal, landscape]{scrartcl}
% twoside=false ist Standard für article
% Deutsche Sprachunterstützung
\usepackage[ngerman]{babel}% Das Paket ngerman wird nicht mehr weiter entwickelt.
\usepackage[utf8]{inputenc}

% Sonderzeichen verfügbar machen
\usepackage[T1]{fontenc}
\usepackage{blindtext}

\usepackage{multicol}
\usepackage{longtable}
\usepackage{enumitem}

% Seitenränder (Ränder kann man das wohl kaum noch nennen …)
\usepackage{geometry}
\geometry{a4paper, top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm,
ignoreall,noheadfoot} % headsep=Abstand Kopfzeile-Text footskip=Abstand Fußzeile-Text

\usepackage{fancyheadings}% Dieses Paket ist veraltet!!!! Bitte nicht mehr verwenden!!!
\pagestyle{empty}
\begin{document}

\begin{longtable}{*{2}{|p{0.49\textwidth}}|}
% BEGINN: Tabellenüberschrift erste Seite
\hline
Spalte A & Spalte B \\
\hline
\endhead
\hline
Dies das &
Mehrspaltiger Text
% Ohne Absatz fehlt hier schon einmal der Absatzabstand
\setlength{\multicolsep}{0pt}% Und jetzt gibt es gar keinen Abstand mehr
\begin{multicols}{2}
\begin{itemize}[nosep,leftmargin=1em]
\item Abstand $\uparrow$ zu groß
\item B
\columnbreak
\item C
\item Abstand $\downarrow$ i. O. könnte kleiner sein
\end{itemize}
\end{multicols}
Text danach \\
\hline
\end{longtable}

\end{document}

kurztipp
17-01-2013, 20:41
Hallo,

danke für die Hilfe. Welche Alternativen gibt es zu fancyheadings und babel? Ich dachte, babel mit der ngmeran option wäre das aktuellste.
Es sollen ja auch kaum noch Ränder überbleiben ;)
Ich brauch so viel Platz wie möglich auf einer Seite. Ist sowieso nur für den privatgebrauch - muss keinen typographischen Regeln folgen.
Letzte Frage: Es kommt zu einem Abstand zwischen multicols bzw. itemize und dem Zeilenende, auch wenn kein Text kommt.
Wie unterdrücke ich das?


\documentclass[fontsize=11pt, paper=a4, parskip=half, headings=normal, landscape]{scrartcl}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}

\usepackage[T1]{fontenc}
\usepackage{setspace}
\singlespacing

\usepackage{longtable}
\usepackage{array}

\usepackage{geometry}
\geometry{a4paper, top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm,
ignoreall,noheadfoot}

\usepackage{fancyheadings}
\pagestyle{empty}

\usepackage{enumitem}
\usepackage{multicol}

\setlength{\multicolsep}{0pt}
\setlength{\itemsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\parsep}{0pt}


\begin{document}
\begin{longtable}{*{2}{|p{0.49\textwidth}}|}
\hline
Spalte A & Spalte B \\
\hline
\endhead
\hline

Dies das &
Mehrspaltiger Text
\begin{multicols}{2}
\begin{itemize}[nosep,leftmargin=1em]
\item Abstand $\uparrow$ o.k.
\item B
\columnbreak
\item C
\item Abstand $\downarrow$ i. O. wenn Text kommt
\end{itemize}
\end{multicols}
Text danach \\
\hline

Dies das &
Mehrspaltiger Text
\begin{multicols}{2}
\begin{itemize}[nosep,leftmargin=1em]
\item Abstand $\uparrow$ o.k.
\item B
\columnbreak
\item C
\item Abstand $\downarrow$ zu Zeilenende zu groß, wenn kein Text kommt
\end{itemize}
\end{multicols}
\\
\hline

\end{longtable}
\end{document}

rstuby
18-01-2013, 05:08
babel ist nicht veraltet! Es wurde hier neu eingefügt anstatt des Paketes ngerman, das veraltet ist!

klops
18-01-2013, 08:07
Mit einer KOMA-Script-Klasse ist das in der KOMA-Script-Anleitung erklärte Paket scrpage2 zu empfehlen. Der offizielle Nachfolger von fancyheadings wäre fancyhdr. Da ich fast nur KOMA-Script-Klassen verwende, verwende ich aber auch nur scrpage2 (auch, wenn ich mal eine andere Klasse nutze).

Bezüglich der weiteren Konfigurationsmöglichkeiten von itemize zusammen mit dem Paket enumitem sei ebenfalls auf dessen Anleitung verwiesen. Die Sache mit dem linken Rand und der Unterdrückung der vertikalen Abstände habe ich ja auch daher. Das kannst Du sicher genauso gut nachlesen wie ich.

kurztipp
18-01-2013, 11:28
Hallo,

natürlich ziehe ich auch die Dokumentationen zu rate, nur finde ich oft nicht das, was ich suche.
Beispielsweise finde ich nichts, was den vertikalen Abstand zu den Rändern der Tabellenspalte entfernt, wenn vor bzw. nach der itemize kein Text kommt. Es entsteht nämlich ein Abstand in Höhe einer Zeile, wenn kein Text vor oder nach der Umgebung steht. (s. MB oben)
Kommt Text vor oder nach itemize stellt das kein Problem dar, da die erste Zeile in diesen Leerraum geschrieben wird.
In der Dokumentation steht allerdings: nosep kills all vertical spacing -- was für mich eigentlich bedeutet, es sollte nichts kommen.
Und finde auch sonst keinen anderen Befehl/Option, um vertikale Abstände zu kontrollieren.

klops
18-01-2013, 13:29
Ach sorry, ich hatte nicht verstanden, dass Du den vertikalen Abstand zum Zellenende meinst. Weil Du etwas vom "Zeilenende" geschrieben hattest, dachte ich, dass Du einen horizontalen Abstand meinst.

Woher dieser Abstand genau kommt, kann ich Dir nicht sagen. Mir scheint jedoch, dass er von der itemize-Umgebung von enumitem kommt. Wenn ich die multicols-Umgebung weg lasse, bleibt er nämlich bestehen. Und wenn davor kein Text steht, dann wird es noch schlimmer. Man kann ihn aber offenbar mit einer \parbox verhindern:
\documentclass[fontsize=11pt, paper=a4, parskip=half, headings=normal, landscape]{scrartcl}

\usepackage[ngerman]{babel}% Das Paket ngerman wird nicht mehr weiter entwickelt.
\usepackage[utf8]{inputenc}

\usepackage[T1]{fontenc}
\usepackage{setspace}
\singlespacing

\usepackage{longtable}
\usepackage{array}

\usepackage{geometry}
\geometry{a4paper, top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm,
ignoreall,noheadfoot}

\usepackage{fancyheadings}% Dieses Paket ist veraltet!!!! Bitte nicht mehr verwenden!!!
\pagestyle{empty}

\usepackage{enumitem}
%\usepackage{multicol}% brauchen wir eigentlich gar nicht

%\setlength{\multicolsep}{0pt}
\setlength{\itemsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\parsep}{0pt}


\begin{document}
\begin{longtable}{|p{0.46\textwidth}*{2}{p{0.23\te xtwidth}}|}
\hline
Spalte A & \multicolumn{2}{l|}{Spalte B} \\
\hline
\endhead
\hline
Dies das &
Mehrspaltiger Text & \\
&\parbox{\linewidth}{%
\begin{itemize}[nosep,leftmargin=1em]
\item Abstand $\uparrow$ o.k.
\item B
\end{itemize}} &
\parbox{\linewidth}{\begin{itemize}[nosep,leftmargin=1em]
\item C
\item Abstand $\downarrow$ i. O. wenn Text kommt
\end{itemize}}
\\
\hline
\end{longtable}

\end{document}

Eventuell wäre das einen Anfrage an den Autor von enumitem wert.

kurztipp
18-01-2013, 15:24
Hallo,

das funktionier schon mal sehr gut, danke.
Gibt es noch eine Möglichkeit, dass man den parbox Befehl aufteilen kann?
Ich würde es nämlich gerne in der before und after Option einbauen, damit ich das nicht immer schreiben muss.
Leider funktioniert das direkte einfügen nicht, da der Inhalt zwischen den geschweiften Klammern stehen muss und die aber auf die beiden Optionen aufgeteilt werden.

\SetEnumitemKey{twocol}{
nosep,
leftmargin=1em,
before=\begin{multicols}{2}, %\parbox{\linewidth}{
after=\end{multicols}} %}

\begin{enumerate}[twocol]
\item A
\item B
\item C
\item D
\end{enumerate}

rais
18-01-2013, 17:33
Moin moin,


Gibt es noch eine Möglichkeit, dass man den parbox Befehl aufteilen kann?

die Umgebung dazu heißt minipage, also statt


\parbox{\linewidth}{...}

kannst Du auch


\begin{minipage}{\linewidth}
...
\end{minipage}

verwenden.

MfG