Seite 1 von 1

[parbox] inner postion beeinflusst auch Rand

Verfasst: Fr 23. Jan 2015, 21:56
von MoonKid
%% box.tex
\documentclass{scrartcl}

% Sprache
\usepackage{xltxtra}
\defaultfontfeatures{Mapping=tex-text}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

% Seitenränder
\usepackage[
    showframe,
    paper=a4paper,
    top=6cm,
    left=1.5cm,
    bottom=0cm,
    right=0cm,
    includehead=false,
    includefoot=false,
    bindingoffset=0mm]{geometry}

% Absatzeinrückung aus
\parindent=0pt

% -- Document --
\begin{document}
\fbox{\parbox[tt][2cm][tt]{4.5cm}{Text}}
\fbox{\parbox[tt][2cm][c]{4.5cm}{\centering{}Text}}
\end{document}
Hier ist zu sehen, dass ich zwei Boxen (zur Hilfe mit fbox visualisiert) der gleichen Größe nebeneinander setze.

Bei der zweiten Box soll der Text horizontal und vertikal zentriert sein. Das ist er auch. Jedoch verschiebt dies auch die Box selbst etwas nach Unten, wie im Vergleich mit der ersten Box zu sehen ist.

Warum ist das so und wie kann ich es verhindern?

Verfasst: Sa 24. Jan 2015, 02:28
von esdd
Ursache ist die Kombination aus innerer und äußerer Positionierung. Mit dem ersten optionalen Argument t gibst Du vor, dass die jeweilige `\parbox` mit der Grundlinie ihrer ersten Zeile auf der umgebenden Grundlinie eingefügt wird. In der linken Box (mit innerer t Ausrichtung) ist das die Grundlinie unter "Text". In der rechten Box (mit innerer vertikaler Zentrierung) ist es dagegen der obere Rand der \parbox. Sehen kannst Du das, wenn Du zum einen \fboxsep gleich Null setzt und zum anderen in der linken Box und zwischen den Boxen ein \hrulefill einfügst.

Bild
\documentclass{scrartcl} 
\setlength\fboxsep{0pt}

\begin{document} 
\fbox{\parbox[tt][2cm][tt]{4.5cm}{Text\hrulefill}}%
\hrulefill
\fbox{\parbox[tt][2cm][c]{4.5cm}{\centering{}Text}} 
\end{document}

Die einfachste Lösung wäre es, die beiden Boxen vertikal aneinander zu zentrieren, d.h. bei beiden im ersten Argument c anzugeben.
\documentclass{scrartcl}
\usepackage{showframe} 
\setlength\fboxsep{0pt}

\begin{document} 
\fbox{\parbox[c][2cm][tt]{4.5cm}{Text\hrulefill}}%
\hrulefill
\fbox{\parbox[c][2cm][c]{4.5cm}{\centering{}Text}} 
\end{document}
Bild

Wenn Du die äußere Ausrichtung nicht ändern kannst, dann könntest Du in der linken Box am Anfang ein \strut einfügen und dann die rechte Box um \ht\strutbox nach oben schieben.
\documentclass{scrartcl}
\usepackage{showframe} 
\setlength\fboxsep{0pt}

\begin{document} 
\fbox{\parbox[tt][2cm][tt]{4.5cm}{\strut Text\hrulefill}}%
\hrulefill
\fbox{\raisebox{\ht\strutbox}{\parbox[tt][2cm][c]{4.5cm}{\centering{}Text}}} 
\end{document}
Und dann gibt es da noch das Paket adjustbox, dass sich dafür eventuell auch verwenden lässt.

Gruß
Elke

Verfasst: Sa 24. Jan 2015, 11:02
von MoonKid
esdd hat geschrieben:Ursache ist...
Ok, verstehe ich gerade so. Auch wenn mir der Grund bzw. die Design-Überlegung dahinter klar ist.
esdd hat geschrieben:Die einfachste Lösung wäre es, die beiden Boxen vertikal aneinander zu zentrieren, d.h. bei beiden im ersten Argument c anzugeben.
Die cm sind in meinem Dokument sehr wichtig, da es später in ein vorgedrucktest (also auf Papier vorhandenem) Formular hineingedruckt werden soll. Deswegen ist der obere Rand (6cm) auch so wichtig. Beeinflussen diese Ausrichtungen irgendwie diesen Rand?

Verfasst: Sa 24. Jan 2015, 14:46
von Besserwisser
Für Formulare, bei denen die genaue Position auf dem Papier wichtig ist, würde ich ja eher textpos, eso-pic, scrlayer o. ä. verwenden.

Verfasst: Mo 26. Jan 2015, 18:57
von MoonKid
Danke, ich werde mir das in Zukunft mal anschauen.

Jedoch merke ich gerade wieder, dass es keinen Sinn hat unter Linux einen Canon-Drucker laufen zu lassen. Es gibt immer minimale Skalierungen bzw. Verschiebungen hier, egal welcher PDF-Reader und welche Einstellungen. Milimetergenaues Drucken ist unmöglich.

Und Lust auf Windows zu switchen, nur um zu Drucken habe ich da auch nicht.