Seltsame Ausrichtungsprobleme in longtable

Seltsame Ausrichtungsprobleme in longtable

Ich habe einige Umgebungen für Formatierungsanwendungsfälle geschrieben. Aus irgendeinem Grund habe ich seltsame Ausrichtungsprobleme in meinem longtable. Ich denke, dass dort ein unsichtbarer Platzhalter ist, der alles durcheinander bringt, aber nach mehreren Stunden und nachdem ich alle unnötigen Leerzeichen entfernt habe, kann ich ihn nicht finden.

Hier sind meine Umgebungen:

\newenvironment{ucflowofevents}{%
\newcommand{\event}[1]{\item{##1}}%
\begin{enumerate}
}{%
\end{enumerate}
}

\newenvironment{ucentryconditions}{%
\newcommand{\cond}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{ucexitconditions}{%
\newcommand{\cond}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{ucrequirements}{%
\newcommand{\req}[1]{\item{##1}}%
\begin{itemize}
}{%
\end{itemize}
}

\newenvironment{pcusecase}[1]{%
    \newcommand{\row}[3][\hline]{##2 & ##3 \\ ##1}
    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}p{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}b{10cm}}%
    \newcommand{\giveninitactors}{REQUIRED!!!}%
    \newcommand{\givenevents}{REQUIRED!!!}%
    \newcommand{\givencommswith}{}%
    \newcommand{\givenentries}{}%
    \newcommand{\givenexits}{}%
    \newcommand{\givenreqs}{}%
    \newcommand{\initactors}[1]{\gdef\giveninitactors{##1}}%
    \newcommand{\commswith}[1]{\gdef\givencommswith{##1}}%
    \newcommand{\events}[1]{\gdef\givenevents{\begin{ucflowofevents}##1\end{ucflowofevents}}}%
    \newcommand{\entries}[1]{\gdef\givenentries{\begin{ucentryconditions}##1\end{ucentryconditions}}}%
    \newcommand{\exits}[1]{\gdef\givenexits{\begin{ucexitconditions}##1\end{ucexitconditions}}}%
    \newcommand{\reqs}[1]{\gdef\givenreqs{\begin{ucrequirements}##1\end{ucrequirements}}}%
    \let\givencommswith\empty%
    \let\givenentries\empty%
    \let\givenexits\empty%
    \let\givenreqs\empty%
    \centering%
    \begin{longtable}{|LR|}\hline %
        \row{Use Case:}{#1}
}{%
        \row{Initiating Actors:}{\giveninitactors}%
        \ifx\givencommswith\empty\else \row[]{Communicates With:}{\givencommswith} \fi %\hline %
        \hline\row{Flow of Events:}{\givenevents} %
        \ifx\empty\givenentries\else \row{Entry Conditions:}{\givenentries} \fi %
        \ifx\empty\givenexits\else \row{Exit Conditions:}{\givenexits} \fi %
        \ifx\empty\givenreqs\else \row{Quality Requirements:}{\givenreqs} \fi%
    \end{longtable}%
}

Die ersten vier erstellen lediglich Listen für den Ereignisfluss, die Ein- und Ausstiegsbedingungen sowie die Qualitätsanforderungen. Aber pcusecaseerstellt die longtable.

Beachten Sie die \newcolumntypeDefinitionen:

    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}p{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}b{10cm}}%

Eigentlich möchte ich, dass beide oben ausgerichtet sind, aber ich habe dies bfür die rechte (R) Spalte angegeben, weil es das Geschehen übertreibt. Hier ist mein Anwendungsfall:

\begin{pcusecase}{TestUseCase}%
    \initactors{Rider, Admin}%
    \commswith{GPSService}%
    \events{\item{Event 1}%
                    \item{Event 2}}%
    \entries{\cond{Entry Condition 1}%
                     \cond{Entry Condition 2}}%
    \exits{\cond{Exit Condition 1}%
                 \cond{Exit Condition 1}}%
    \reqs{\req{Requirement 1}%
                \req{Requirement 2}
                \req{Requirement 3}}%
\end{pcusecase}

Das Ergebnis ist:

links oben ausgerichtet? rechts unten ausgerichtet?

Beachten Sie, dass in den ersten drei Zeilen die rechten Zellen wie vorgesehen unten ausgerichtet sind, in den übrigen Zeilen jedoch die linken Zellen unten und die rechten Zellen oben ausgerichtet sind.

Wenn ich spezifiziere, dass links unten ausgerichtet sein soll, und rechts oben ausgerichtet sein soll mit

    \newcolumntype{L}{>{\vspace{-1.0\baselineskip}\flushleft\arraybackslash}b{4cm}}%
    \newcolumntype{R}{>{\vspace{-1.0\baselineskip}\raggedright\arraybackslash}p{10cm}}%

Ich bekomme Folgendes:

links oben ausgerichtet? rechts unten ausgerichtet?

Die linke Seite ist irgendwie oben ausgerichtet und die rechte Seite unten. Am seltsamsten und wahrscheinlich auch am auffälligsten ist es, wenn ich angebe, dass beide unten ausgerichtet sein sollen, und dann Folgendes bekomme:

Was zum Teufel?

In allen drei Versionen hat sich die Ausrichtung in den drei oberen linken Zellen nicht geändert. Ich starre schon seit Stunden darauf. Ich brauche einen frischen Blick darauf. Ihre Hilfe wird sehr geschätzt …

Antwort1

Hier ist eine Demonstration, wie die Standardoptionen für die vertikale Ausrichtung funktionieren:

\documentclass{article}
\usepackage{tikz}
\begin{document}
  \newcommand\demobox[1]{%
  \fbox{%
    \begin{minipage}[#1]{.25\textwidth}
      \tikz[baseline=(n.base)]{%
        \node (n) [inner sep=0pt, outer sep=0pt, text width=\linewidth] {Top};
        \draw [red] (n.west |- n.base) -- (n.east |- n.base);}
      \par
      This is a box with some content which should be longer than can be accommodated on one line.
      \par
      \tikz[baseline=(n.base)]{%
        \node (n) [inner sep=0pt, outer sep=0pt, anchor=base, text width=\linewidth] {Bottom};
        \draw [red] (n.west |- n.base) -- (n.east |- n.base);}
    \end{minipage}}}
\demobox{t}
\demobox{b}
\demobox{c}
\end{document}

Ausrichtungen

Die roten Linien markieren die Grundlinien der ersten und letzten Zeile von jedem minipage. Da die erste mit ausgerichtet ist tund die zweite mit b, sind die Grundlinie der ersten Zeile des ersten und die Grundlinie der letzten Zeile des zweiten ausgerichtet. ( cdient nur zum Vergleich.)

Dasselbe passiert, wenn die Ausrichtung an der Grundlinie einer Zeile normalen Textes erfolgt:

This is a line of regular text across the page. Here we go\dots\par
and some text \demobox{t}
and some more \demobox{b}\par

Ausrichtungen mit Text

Die andere Komplikation besteht darin, dass enumerateUmgebungen standardmäßig einen vertikalen Abstand vor dem ersten und nach dem letzten Element enthalten:

\documentclass{article}
\begin{document}
  \fbox{%
    \parbox[t]{.25\textwidth}{%
      \begin{enumerate}
        \item Item
        \item Item
        \item Item
      \end{enumerate}}} and here is the line of text.
  \fbox{%
    \parbox[t]{.25\textwidth}{%
      Top line of text.\par Next line.\par Bottom line.}}

  \fbox{%
    \parbox[b]{.25\textwidth}{%
      \begin{enumerate}
        \item Item
        \item Item
        \item Item
      \end{enumerate}}} and here is the line of text.
  \fbox{%
    \parbox[b]{.25\textwidth}{%
      Top line of text.\par Next line.\par Bottom line.}}
\end{document}

Aufzählungsausrichtungen

verwandte Informationen