표에서 셀의 세로 방향 지정

표에서 셀의 세로 방향 지정

여러 셀을 수직으로 구성하는 tabularx 테이블에 상자를 추가하고 싶습니다. 셀을 수평으로 프레임하는 방법을 보여주는 이 게시물이 있습니다(테이블의 셀 프레이밍) 그러나 상자를 여러 행으로 확장하는 방법을 알 수 없습니다. 내가 대략적으로 얻고 싶은 것은 다음과 같습니다(좋은 상자와 함께).

Column 1 & Column 2 & Column 3
                      +-----+
bla      & bla      & |bla  |
                      |     |
bla      & bla      & |bla  |
                      +-----+

내가 어떻게 그렇게 할 수 있는지 아시나요?

편집: 아래 제안된 솔루션은 매우 훌륭합니다. 그러나 이는 tabularx 및 booktab과 호환되지 않고 tabular 환경에서만 호환되는 것 같습니다. 아래는 내가 사용한 코드입니다. 이러한 솔루션을 tabularx 스타일로 확장하는 방법에 대한 아이디어가 있는 사람이 있습니까? 그렇지 않다면 간단한 표 형식을 사용하여 모든 테이블을 다시 작성하겠습니다.

   \documentclass{article}
   \usepackage{tabularx, booktabs}
   \usepackage{tikz}
   \usetikzlibrary{calc}

   \newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
   \newcommand{\DrawBox}[1][]{%
        \tikz[overlay,remember picture]{
        \draw[black,#1]
           ($(left)+(-0.5em,2.0ex)$) rectangle
           ($(right)+(0.75em,-0.75ex)$);}
          }

   \begin{document}
   \begin{table}[H]
   \centering
    \begin{tabularx}{0.3\textwidth}{Y*{4}{c}}
        \toprule
         & Masc  & Fem & Neut\\ 
        \midrule  \cline{4-4}
        Nom & hic & haec & \multicolumn{1}{|c|}{hoc} \\ 
        Acc & hunc & hanc & \multicolumn{1}{|c|}{hoc} \\ \cline{4-4}
        \bottomrule 
    \end{tabularx} 
   \end{table}
     \begin{table}[H]
   \centering
    \begin{tabularx}{0.3\textwidth}{Y*{4}{c}}
        \toprule
         & Masc  & Fem & Neut\\ 
        \midrule  
        Nom & hic & haec & \tikzmark{left}hoc \\ 
        Acc & hunc & hanc & hoc\tikzmark{right} \\ 
        \bottomrule 
    \end{tabularx} 
     \end{table}
    \end{document}

답변1

\documentclass{article}

\begin{document}
  \begin{tabular}{*6{c}}\hline
    Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\cline{1-1}
    \multicolumn{1}{|c|}{bla}   & bla   & bla   & bla   & bla   & bla \\
    \multicolumn{1}{|c|}{bla}   & bla   & bla   & bla   & bla   & bla \\ 
    \multicolumn{1}{|c|}{ble} & ble & ble & bla & bla & bla \\ \cline{1-1}
    bla   & bla   & bla   & bla   & bla   & bla \\ \hline
  \end{tabular}
\end{document}

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

와 :tabularxbooktabs

   \documentclass{article}
   \usepackage{tabularx, booktabs}
   \begin{document}
   \begin{table}[H]
   \centering
    \begin{tabularx}{0.4\textwidth}{X*{4}{c}}      %% 0.3\textwidth too narrow 
                                                   %% and Y column type not known
        \toprule
         & Masc  & Fem & Neut\\
        \midrule  \cline{4-4}
        Nom & hic & haec & \multicolumn{1}{|c|}{hoc} \\
        Acc & hunc & hanc & \multicolumn{1}{|c|}{hoc} \\ \cline{4-4}
        \bottomrule
    \end{tabularx}
   \end{table}
    \end{document}

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

답변2

항상 해결책이 있습니다 tikz. 다음은 기본적으로 동일한 코드를 사용하는 코드입니다. 행렬의 요소 강조 표시하지만 더 유연한 \DrawBox매크로를 사용합니다. 그리고 이것이 가능하기 때문에 tikz다음과 같은 추가적인 유연성을 얻을 수 있습니다.

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

용법:

  1. 를 사용하여 \tikzmark{<name>}특정 위치를 "표시"합니다 <name>.
  2. \DrawMacro이러한 명명된 위치는 이를 도면의 경계로 사용하는 에 전달됩니다 . 한 번의 \DrawBox전화가 필요합니다 .당신이 그리고 싶은 상자.

메모:

암호:

\documentclass{article}
\usepackage{tikz}
\usepackage{booktabs}
\usetikzlibrary{calc}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[3][]{%
    \tikz[overlay,remember picture]{
    \draw[black,#1]
      ($(#2)+(-0.5em,2.0ex)$) rectangle
      ($(#3)+(0.75em,-0.75ex)$);}
}

\begin{document}
\begin{tabular}{*{7}{c}}\toprule
    Col 1 &  Col 2                   &       Col  3                 & Col 4                   & Col 5 & Col 6                         & Col 7 \\
    \cmidrule(lr){2-6}
     0    &   1                      & \tikzmark{top left 1}abcd    &   0                     &   0   &   0                           &   1   \\
     1    &   \tikzmark{top left 3}0 & www                          &   0                     &   0   &   0                           &   1   \\
     0    &   1                      & xyz\tikzmark{bottom right 1} &  \tikzmark{top left 2}1 &   0   &   0                           &   0   \\
     0    &   0                      & 1                            &   0                     &   0   &   0\tikzmark{bottom right 3}  &   0   \\
     0    &   0                      & 0                            &   0                     &   0   &   1                           &   0\tikzmark{bottom right 2} \\
     0    &   0                      & 1                            &   0                     &   0   &   0                           &   0 \\
     \bottomrule
  \end{tabular}

\DrawBox[ultra thick, red]{top left 1}{bottom right 1}
\DrawBox[ultra thick, blue]{top left 2}{bottom right 2}
\DrawBox[ultra thick, draw=green, dotted, fill=yellow!15, fill opacity=0.3]{top left 3}{bottom right 3}
\end{document}

답변3

환경에는 {NiceTabular}셀 을 병합할 수 있지만 셀 직사각형 주위에 프레임을 그리는 데에도 사용할 수 있는 nicematrix명령이 있습니다 .\Block

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{ccc}
Column 1 & Column 2 & Column 3 \\
bla & bla & \Block[draw=red,rounded-corners]{2-1}{} bla \\
bla & bla & bla 
\end{NiceTabular}

\end{document}

여러 컴파일이 필요합니다( nicematrix내부적으로 PGF/Tikz 노드를 사용하기 때문에).

첫 번째 코드 출력

셀 내용에 맞게 조정된 프레임을 선호하는 경우 셀, 행 및 열 아래 \CodeAfter에 생성된 PGF/Tikz 노드를 사용하여 Tikz로 이를 수행할 수 있습니다.nicematrix

\documentclass{article}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit}

\begin{document}

\begin{NiceTabular}{ccc}
Column 1 & Column 2 & Column 3 \\
bla & bla & bla \\
bla & bla & bla 
\CodeAfter 
  \tikz \node [draw=red,rounded corners,fit=(2-3)(3-3)] {} ; 
\end{NiceTabular}

\end{document}

위 코드의 출력

관련 정보