Longtable의 이상한 정렬 문제

Longtable의 이상한 정렬 문제

나는 사용 사례 형식을 지정하기 위한 몇 가지 환경을 작성했습니다. 어떤 이유로 내 longtable. 거기에 보이지 않는 자리 표시자가 있어서 모든 것을 엉망으로 만든 것 같지만 몇 시간이 지나고 불필요한 공간을 모두 제거한 후에도 찾을 수 없습니다.

내 환경은 다음과 같습니다.

\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}%
}

처음 4개는 이벤트 흐름, 진입 및 퇴출 조건, 품질 요구 사항에 대한 목록을 설정합니다. 그러나 .pcusecaselongtable

정의를 확인하세요 \newcolumntype.

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

내가 정말로 원하는 것은 둘 다 상단 정렬되는 것이지만, b무슨 일이 일어나는지 과장하기 때문에 오른쪽(R) 열에 지정했습니다. 내 사용 사례는 다음과 같습니다.

\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}

이는 다음과 같은 출력을 제공합니다.

왼쪽 상단 정렬? 오른쪽 하단 정렬?

처음 세 행의 경우 오른쪽 셀은 원래대로 아래쪽에 정렬되지만 나머지 행의 경우 왼쪽 셀은 아래쪽에 정렬되고 오른쪽 셀은 위쪽에 정렬됩니다.

왼쪽이 아래쪽에 정렬되고 오른쪽이 위쪽에 정렬되도록 지정하면

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

나는 이것을 얻습니다 :

왼쪽 상단 정렬? 오른쪽 하단 정렬?

왼쪽은 어떻게든 위쪽에 정렬되고 오른쪽은 아래쪽에 정렬됩니다. 가장 이상한 것, 그리고 아마도 누군가에게 단서를 줄 수 있는 것은 둘 다 아래쪽 정렬되어야 한다고 지정하고 다음과 같은 결과를 얻는 것입니다.

뭐야?

세 가지 버전 모두 왼쪽 상단 셀 3개의 정렬이 변경되지 않았습니다. 나는 몇 시간 동안 쳐다보고 있었다. 이것에 대한 새로운 시각이 필요합니다. 귀하의 도움에 크게 감사드립니다...

답변1

다음은 표준 수직 정렬 옵션이 작동하는 방식을 보여줍니다.

\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}

선형

빨간색 선은 각 의 첫 번째 줄과 마지막 줄의 기준선을 표시합니다 minipage. 첫 번째 줄은 로 정렬되고 t두 번째 줄은 로 정렬되므로 b첫 번째 줄의 첫 번째 줄 기준선과 두 번째 줄의 마지막 줄 기준선이 정렬됩니다. ( c단순히 비교가 가능합니다.)

일반 텍스트 줄의 기준선에 맞춰 정렬하는 경우에도 같은 일이 발생합니다.

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

텍스트와 정렬

또 다른 문제는 enumerate환경이 기본적으로 첫 번째 항목 앞과 마지막 항목 뒤에 세로 간격을 포함한다는 것입니다.

\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}

열거형 정렬

관련 정보