테이블 상단, 상단, 중앙의 세 열을 수직으로 정렬하는 방법

테이블 상단, 상단, 중앙의 세 열을 수직으로 정렬하는 방법

세 번째 열의 수식을 가운데에 수직으로 정렬하고 싶습니다. 즉, 수식이 설명의 두 줄 중간에 수직으로 정렬되어야 합니다.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx,booktabs}
\usepackage{caption}
\begin{document}
\begin{table}[htb]
    \centering
    \caption{I would like the formulae here to be vertically at the middle of the two lines of text}
    \begin{tabularx}{\linewidth}{lX>{$}c<{$}}
        \toprule
        Name & Description & \multicolumn{1}{c}{Formula}\\
        \midrule
        Ducks & Something which goes on two lines, something which goes on two lines &
        A=\dfrac{B}{C}\\
        Lions & Something which goes on two lines, something which goes on two lines &
        D=\dfrac{E}{F}\\
        \bottomrule
    \end{tabularx}
\end{table}
\begin{table}[htb]
    \centering
    \caption{Here the formulae are correctly aligned with the description, but I would like the name at the top like in the previous table}
    \begin{tabular}{lm{24em}>{$}c<{$}}
        \toprule
        Name & Description & \multicolumn{1}{c}{Formula}\\
        \midrule
        Ducks & Something which goes on two lines, something which goes on two lines &
        A=\dfrac{B}{C}\\
        Lions & Something which goes on two lines, something which goes on two lines &
        D=\dfrac{E}{F}\\
        \bottomrule
    \end{tabular}
\end{table}
\end{document}

여기에 이미지 설명을 입력하세요

답변1

다음은 열 유형의 재정의 X와 첫 번째 열에 대한 두 가지 가능한 해킹을 기반으로 한 솔루션입니다(실제 내용에 맞게 조정해야 할 수도 있음).

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx, booktabs, makecell}
\renewcommand{\tabularxcolumn}[1]{m{#1}}

\begin{document}

\begin{table}[htb]
    \centering
    \begin{tabularx}{\linewidth}{lX>{$}c<{$}}
        \toprule
        Name & Description & \multicolumn{1}{c}{Formula}\\
        \midrule
       \makecell[l]{Ducks\\\mbox{}} & Something which goes on two lines, something which goes on two lines &
        A=\dfrac{B}{C}\\
\addlinespace
        \makecell[l]{Lions\\\mbox{}} & Something which goes on two lines, something which goes on two lines &
        D=\dfrac{E}{F}\\
\addlinespace
       \raisebox{1.4ex}{Lions} & Something which goes on two lines, something which goes on two lines &
        D=\dfrac{E}{F}\\
        \bottomrule
    \end{tabularx}
\end{table}

\end{document} 

여기에 이미지 설명을 입력하세요

답변2

이것은 다소 어렵습니다. 문제는 중간 상자를 기준선을 따라 왼쪽으로, 중앙을 따라 오른쪽으로 정렬하려는 것입니다. 이 유형의 테이블은 일반적으로 테이블 중첩(tabularx에서는 어렵습니다)이나 \llap 트릭을 사용하기 위해 일부 내용을 측정해야 합니다.

핸들이 두 개 이상인 xcoffins를 기반으로 한 표 형식 코드가 여기에 없습니다.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx,booktabs}
\usepackage{caption,xcoffins}
\newlength\colA

\begin{document}
\begin{table}[htb]
    \centering
    \renewcommand{\tabularxcolumn}[1]{m{#1}}
    \settowidth\colA{\begin{tabular}{l}Name\\Ducks\\Lions\end{tabular}}
    \caption{I would like the formulae here to be vertically at the middle of the two lines of text}
    \begin{tabularx}{\linewidth}{p{\dimexpr\colA-2\tabcolsep}X>{$}c<{$}}
        \toprule
        Name & Description & \multicolumn{1}{c}{Formula}\\
        \midrule
             &\leavevmode\llap{\makebox[\colA][l]{Ducks}}Something which goes on two lines, something which goes on two lines &
        A=\dfrac{B}{C}\\
             &\leavevmode\llap{\makebox[\colA][l]{Lions}}Something which goes on two lines, something which goes on two lines and on one more line and on one more line and on one more line &
        D=\dfrac{E}{F}\\
        \bottomrule
    \end{tabularx}
\end{table}

%Only for show some coffin code:

\NewCoffin\CoffinA
\NewCoffin\CoffinB
\NewCoffin\CoffinC

\SetHorizontalCoffin\CoffinA{Ducks}
\SetHorizontalCoffin\CoffinC{$D=\dfrac{E}{F}$}

\SetVerticalCoffin\CoffinB{\dimexpr \textwidth-\CoffinWidth\CoffinA-\CoffinWidth\CoffinC-6\tabcolsep}{\noindent Something which goes on two lines, something which goes on two lines and on one more line and on one more line and on one more line}

\JoinCoffins\CoffinA[H,r]\CoffinB[T,l](2\tabcolsep,0pt)
\JoinCoffins\CoffinA[vc,r]\CoffinC[vc,l](2\tabcolsep,0pt)
\noindent\hspace*{\tabcolsep}\TypesetCoffin\CoffinA
\end{document}

여기에 이미지 설명을 입력하세요

답변3

이와 같이:

여기에 이미지 설명을 입력하세요

편집하다:

열 내용의 위치는 행 기준선에 따라 결정되며, 안타깝게도 이는 열마다 변경할 수 없습니다.

지금까지는 기준선을 정렬하는 마지막 열이나 첫 번째 열의 상자를 사용하는 것 외에는 다른 가능성이 없습니다. 특정 사례에 적합한 후보는 다음과 같습니다 \adjustbox.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabularx,booktabs}
\usepackage{caption}

\usepackage{adjustbox}

\begin{document}
\begin{table}[htb]
    \centering
    \caption{I would like the formulae here to be vertically at the middle of the two lines of text}
    \begin{tabularx}{\linewidth}{lXc}
        \toprule
        Name & Description & Formula    \\
        \midrule
        Ducks & Something which goes on two lines, something which goes on two lines &
        \adjustbox{valign=t}{$A=\dfrac{B}{C}$}\\
        Lions & Something which goes on two lines, something which goes on two lines &
        \adjustbox{valign=t}{$D=\dfrac{E}{F}$}\\
        \bottomrule
    \end{tabularx}
\end{table}
\end{document}

테이블을 보다 편리하게 작성하기 위해 새 열 유형을 정의할 수 있습니다.

\newcolumntype{E}{>{\begin{adjustbox}{valign=t}$}c<{$\end{adjustbox}}}

그런 다음 테이블(본문)을 다음과 같이 작성합니다.

    \begin{tabularx}{\linewidth}{lXE}
        \toprule
        Name & Description & Formula    \\
        \midrule
        Ducks & Something which goes on two lines, something which goes on two lines &
        A=\dfrac{B}{C}\\
        Lions & Something which goes on two lines, something which goes on two lines &
        D=\dfrac{E}{F}\\
        \bottomrule
    \end{tabularx}

중간 열 셀의 텍스트에 임의 개수의 줄이 있거나 방정식에 한 줄만 있으면 결과가 더 나쁩니다. 이러한 경우 가능한 해결책은 첫 번째 열에서 를 사용 multirow하고 해당 셀이 걸쳐 있는 열 수를 수동으로 조정하고 두 번째 열에서는 수직 중간에 기준선을 설정하는 것입니다.

\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs, multirow, tabularx}
\usepackage{caption}

\usepackage{adjustbox}
\usepackage{lipsum}

\begin{document}
\begin{table}[htb]
    \centering
    \renewcommand\tabularxcolumn[1]{m{#1}} % <---
    \caption{I would like the formulae here to be vertically at the middle of the two lines of text}
    \begin{tabularx}{\linewidth}{lX>{$}c<{$}}
        \toprule
        Name & Description & Formula    \\
        \midrule
\multirow{-6}{*}{Ducks} % <--- manually adjusted
      & \lipsum[66] & A=\dfrac{B}{C}\\
        \bottomrule
    \end{tabularx}
\end{table}
\end{document}

여기에 이미지 설명을 입력하세요

또는 @Bernard의 답변에서 제안된 솔루션을 사용하십시오.

답변4

가능성에 대한 완전한 그림을 갖기 위해 다음의 도움으로 테이블 조판을 포함시켰습니다.칼로리. 를 사용하여 이러한 정렬을 갖는 것은 매우 쉽습니다 calstable. OP 테이블을 생성하는 데 반드시 필요한 것은 아니지만 코드를 추가하는 왼쪽 및 오른쪽 베어링을 제거했습니다.

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{cals, caption, amsmath}
\usepackage{lmodern}

\begin{document}

\begin{table*}
\caption{I would like the formulae here to be vertically at the middle of the two lines of text}
\begin{calstable}[c]
% Defining columns relative to each other and relative to the margins
\colwidths{{\dimexpr(\columnwidth)/6\relax}
            {\dimexpr(\columnwidth)/6*4\relax}
            {\dimexpr(\columnwidth)/6\relax}
            }

% Set up the tabular
\makeatletter
\def\cals@framers@width{0.8pt}   % Outside frame rules, reduce if the rule is too heavy
\def\cals@bodyrs@width{0.6pt}
\def\cals@cs@width{0pt}             % Inside rules, reduce if the rule is too heavy
\def\cals@rs@width{0.4pt}

\def\bb{\ifx\cals@borderB\relax     % Botton border switch (off-on)
    \def\cals@borderB{0pt}
\else \let\cals@borderB\relax\fi}

\def\lp{\ifdim\cals@paddingL=0.0pt\relax    % Left padding switch (off-on)
    \cals@setpadding{Ag}
\else \setlength{\cals@paddingL}{0pt}\fi}

\def\rp{\ifdim\cals@paddingR=0.0pt\relax    % Right padding switch (off-on)
    \cals@setpadding{Ag}
\else \setlength{\cals@paddingR}{0pt}\fi}


% R1H1
\thead{\small%
\brow
    \lp\alignL\cell{Name}\lp
    \alignL\cell{Description}
    \rp\alignR\cell{Formula}\rp
\erow
\normalsize%
}
\tfoot{\lastrule\strut}
%R2B1
\brow
    \lp\bb\alignL\cell{Ducks}\lp
    \alignL\cell{Something which goes on two lines, something which goes on two lines}
    \rp\alignR\cell{\vfil$A=\dfrac{B}{C}$}\rp
\erow
%R3B2
\brow
    \bb\lp\alignL\cell{Gnus}\lp
    \alignL\cell{Something which goes on two lines, something which goes on two lines and on one more line and on one more line and on one more line}
    \rp\alignR\cell{\vfil$D=\dfrac{E}{F}$}\rp\bb
\erow
%R4B3
\brow
    \lp\alignL\cell{Gnats}\lp
    \alignL\cell{Something which goes on two lines, something which goes on two lines and on one more line and on one more line and on one more line}
    \rp\alignR\cell{\vfil $D=\dfrac{E}{F}$}\rp
\erow
\makeatletter
\end{calstable}\par
\end{table*}
\end{document}

관련 정보