\hbox in "p"-Spalte (tabular) zerstört Zeilenlayout

\hbox in "p"-Spalte (tabular) zerstört Zeilenlayout

Der folgende Beispielcode zeigt ein Problem mit meinem \vertgapBefehl, der lediglich dazu gedacht ist, oberhalb und unterhalb des obligatorischen Arguments etwas Platz hinzuzufügen, nachdem es in ein \hbox(für hohe Inhalte) gekapselt wurde. Es funktioniert gut in lSpalten vom Typ -, aber offensichtlich nicht in pSpalten vom Typ -. Bei meinen ersten Versuchen habe ich das nicht erkannt, weil es in (Hinweis: dem Beispielcode fehlen Kopf- und Fußzeilen) funktioniert longtable, ohne das automatisch eingefügte zu ignorieren \centering.

Mein Ziel ist in zu sehen longtable: Alle drei Tabellenzeilen haben die gleiche Höhe. Ist es möglich, dieses Verhalten tabularauch in zu erreichen?

Nachtrag: Die einfache Verwendung von \hboxin einer pSpalte vom Typ reicht aus, um das Problem aufzuzeigen.

\documentclass{article}
\usepackage{longtable}
\usepackage{array}

\newcommand{\vertgap}[1]{\hbox{\vbox{\kern0.25ex\vtop{\hbox{#1}\kern0.25ex}}}}%
%\newcommand{\vertgap}[1]{\hbox{\vbox{\hrule height0.25ex\vtop{\hbox{#1}\hrule height0.25ex}}}}%
% The commented-out command above shows the inserted gaps - these seem to be ok.

\begin{document}

\begin{tabular}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{tabular}

\begin{longtable}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{longtable}

\end{document}

Antwort1

\hboxist ein TeX-Grundelement und sollte nicht in LaTeX verwendet werden, es sei denn, Sie wissen im Detail, wie es funktioniert (Sie können bei Dingen wie Farben oder Platzierung in Schwierigkeiten geraten – wie bei Ihnen). Der entsprechende zu verwendende LaTeX-Befehl lautet \mboxund behebt Ihr Problem.

Der Hauptgrund ist, dass \hboxim vertikalen Modus kein Absatz beginnt, sondern einfach linksbündig hinzugefügt wird. \centeringHat daher keine Auswirkung. \mboxstellt sicher, dass die Box Teil des Absatzes wird.

Aktualisieren

Vielleicht sollte ich hinzufügen, dass das Gleiche für \kern, \vbox, \vtop, gilt, d. h., es handelt sich nicht um unterstützte LaTeX-Befehle auf „Dokumentebene“. All dies sind natürlich Befehle, die man zum Erstellen von Paketen usw. benötigt, aber auf Benutzerebene sollten sie vorzugsweise vermieden werden.

Allerdings gibt es in LaTeX kein Äquivalent dafür, \vtop{\kern...\hbox{#1}\kern...}da dies eine vertikale Box erzeugt, die so breit ist wie die hbox darin. LaTeX bietet nur vertikale Boxen mit einer definierten Breite, z. B. \parboxund sobald Sie einen Absatz innerhalb der definierten Breite beginnen, wird die Breite der Box unabhängig vom Inhalt beibehalten. Nun, man könnte \shortstack{..\\[..] ...}wohl verwenden, aber das wäre auch eine Art Hack. Daher ist die Codierung in dieser Form wahrscheinlich der einfachste Weg, um die gewünschten Ergebnisse zu erzielen (solange man die Nebenwirkungen dieser Befehle kennt).

verwandte Informationen