
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{caption}
\begin{document}
\begin{center}
\begin{tabularx}{100pt}{c|c|c|}
\multicolumn{1}{c}{ } &\multicolumn{1}{c}{$r$} &\multicolumn{1}{c}{$b$} \\ \cline{2-3}
$r$ & $\frac{4}{9}$ & $\frac{2}{9}$ \\ \cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{1}{9}$ \\ \cline{2-3} \multicolumn{3}{c}{2 red 1 blue}
\end{tabularx}\hskip 1.7cm
\begin{tabularx}{100pt}{c|c|c|}
\multicolumn{1}{c}{ } &\multicolumn{1}{c}{$r$} &\multicolumn{1}{c}{$b$} \\ \cline{2-3}
$r$ & $\frac{1}{9}$ & $\frac{2}{9}$ \\ \cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{4}{9}$ \\ \cline{2-3} \multicolumn{3}{c}{2 blue 1 red}
\end{tabularx}
\end{center}
\end{document}
내 의도는 하위 차트 아래와 중간에 "2 빨간색 1 파란색"을 배치하는 것입니다. 그런데 세 번째 열은 왜 그렇게 넓습니까?
답변1
내가 코멘트에서 말했듯이, 테이블의 적어도 하나의 열은 유형 tabularx
이어야 합니다 X
. 즉, 귀하의 경우 테이블은 예를 들어 다음과 같아야 합니다.
\documentclass{article}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\NewExpandableDocumentCommand\mcc{O{1}m}%
{\multicolumn{#1}{c}{#2}}
\begin{document}
\begin{center}
\begin{tabularx}{100pt}{c | C|C|}
\mcc{} & \mcc{$r$} & \mcc{$b$} \\
\cline{2-3}
$r$ & $\frac{4}{9}$ & $\frac{2}{9}$ \\
\cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{1}{9}$ \\
\cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabularx}
\hskip 21mm
\begin{tabularx}{100pt}{C | C|C|}
\mcc{} & \mcc{$r$} & \mcc{$b$} \\
\cline{2-3}
$r$ & $\frac{4}{9}$ & $\frac{2}{9}$ \\
\cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{1}{9}$ \\
\cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabularx}
\end{center}
\end{document}
보시다시피, 첫 번째 테이블에는 두 번째와 세 번째 열의 너비가 동일하지만 첫 번째 열의 너비가 더 좁습니다. 두 번째 테이블에서는 모든 열의 너비가 동일합니다.
열 c
, 열의 셀 내용 중 가장 넓은 너비를 갖습니다 l
. r
반대로, tabularx
테이블 너비를 지정해야 하며 테이블에서 최소한 하나의 열 너비는 LaTeX로 계산해야 합니다. 이 기능 X
에는 파생된 열이 있습니다(가운데 정렬, 셀 내용 왼쪽 또는 오른쪽 정렬). 이것이 활성화되지 않은 경우 일반적으로 \hline
또는 \cline
테이블 밖으로 튀어나옵니다(따라서 귀하의 경우에는 이런 일이 발생하지 않은 것이 행운입니다).
그러나 내용이 자연 너비 범위 열의 합보다 넓은 셀이 있는 경우 \multicolumn
마지막 열 너비보다 셀 너비에 지정된 양만큼 늘어납니다 \multicolumn
. 따라서 이러한 일이 발생하지 않도록 주의해야 합니다(스팬 열의 너비를 더 크게 정의).
tabularray
제 생각에는 패키지를 사용하고 마지막 두 열 아래에 ˙\multicolum` 셀을 중앙에 배치 하면 테이블이 더 멋질 것입니다 .
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{center}
\begin{tblr}{hline{2-Y}={2-Z}{solid},
vline{2-Z}={2-Y}{solid},
colspec={c *{2}{Q[c,wd=2em,mode=math]}},
row{Z} = {mode=text},
rowsep=3pt
}
& r & b \\
r & \frac{4}{9} & \frac{2}{9} \\
b & \frac{2}{9} & \frac{1}{9} \\
& \SetCell[c=2]{c} 2 red 1 blue
\end{tblr}
\hskip 21mm
\begin{tblr}{hline{2-Y}={2-Z}{solid},
vline{2-Z}={2-Y}{solid},
colspec={c *{2}{Q[c,wd=2em,mode=math]}},
row{Z} = {mode=text},
rowsep=3pt
}
& r & b \\
r & \frac{4}{9} & \frac{2}{9} \\
b & \frac{2}{9} & \frac{1}{9} \\
& \SetCell[c=2]{c} 2 red 1 blue
\end{tblr}
\end{center}
\end{document}
부록:
지금까지 Overleaf는 여전히 패키지 저장소를 새로 고치지 않은 것 같습니다. 바라건대 이것은 가까운 기능에서 작동할 것입니다. 패키지 array
를 사용하여 "클래식" 접근 방식을 사용할 수 있을 때까지 makecell
:
\documentclass{article}
\usepackage{array, makecell}
\NewExpandableDocumentCommand\mcc{O{1}m}%
{\multicolumn{#1}{c}{#2}}
\begin{document}
\begin{center}
\setcellgapes{3pt}
\makegapedcells
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{} & \mcc{$r$} & \mcc{$b$} \\
\cline{2-3}
r & \frac{4}{9} & \frac{2}{9} \\
\cline{2-3}
b & \frac{2}{9} & \frac{1}{9} \\
\cline{2-3}
\mcc{} & \mcc[2]{2 red 1 blue}
\end{tabular}
\hskip 21mm
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{} & \mcc{$r$} & \mcc{$b$} \\
\cline{2-3}
r & \frac{4}{9} & \frac{2}{9} \\
\cline{2-3}
b & \frac{2}{9} & \frac{1}{9} \\
\cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabular}
\end{center}
\end{document}
컴파일 결과는 패키지 사용 시와 매우 유사합니다 tabularray
.
스타일 비교를 위해 두 표 모두 약간 다릅니다. 처음에는 "2 red 1 blue"라는 텍스트가 두 번째와 세 번째 열 아래에 있고, 두 번째에서는 세 열 모두 아래에 있습니다.
답변2
미리 설명: 샘플 테이블의 어떤 열도 셀 내에서 자동 줄 바꿈이 필요한 것으로 보이지 않으므로 환경을 사용하는 것은 좋은 생각이 아니라고 생각합니다 tabularx
.
당신은 물었습니다.
그런데 세 번째 열은 왜 그렇게 넓습니까?
먼저 몇 가지 용어:
l
,c
또는 유형 열의 전체 너비는 (a) 열에서 가장 넓은 셀의 "기본" 너비와 (b) (또는 환경이 사용 중인 경우 )r
의 합계입니다 . 매개변수는 -like 또는 환경이 사용 중인지 여부에 따라 LaTeX가 열 가장자리에 삽입하는 공백 패딩의 양을 결정합니다 .2\tabcolsep
2\arraycolsep
array
\tabcolsep
\arraycolsep
tabular
array
다중 열
tabular
또는array
환경의 총 너비는 거의 정의에 따라 개별 총 열 너비의 합과 수직선(있는 경우)의 결합 너비로 제공됩니다.
귀하의 tabular
환경에는 다음과 같은 3열 항목도 포함되어 있습니다.
\multicolumn{3}{c}{2 red 1 blue}
당신이 "발견한" 것처럼, 이 항목은 환경의 전체 또는 전체 너비를 결정합니다 tabular
. 너비가 세 개의 개별 열 너비의 합을 초과하므로 뭔가를 제공해야 합니다. LaTeX가 선택한 솔루션은 초과 너비를 최종 열에 할당하는 것입니다. 이 선택은 임의적으로 보일 수 있지만, 3개의 열 각각에 동일한 부분으로 초과 너비를 할당하는 등의 다른 솔루션도 마찬가지로 임의적일 수 있습니다.
나는 당신이 열 2와 3의 너비가 동일하기를 원한다고 생각합니다. 두 가지 선택 사항을 통해 목표를 달성할 수 있습니다. (a) \tabcolsep
(또는 환경이 사용 중인 \arraycolsep
경우 ) 값을 늘리 array
거나 (b) "자연스러운" 너비 이상으로 열 너비를 늘리는 것입니다. 세 개의 행이 포함된 다음 스크린샷에는 두 가지 가능성이 모두 설명되어 있습니다.
맨 위 행은 초기 설정을 보여줍니다. (코드 혼란을 줄이고 수많은 기호를 제거하기 위해 환경 으로
$
전환했습니다 .) 분명히 열 3은 열 2보다 훨씬 넓습니다.tabular
array
\arraycolsep
가운데 행은 기본 열 유형을 유지하면서 값을 증가시키는 효과를 보여줍니다c
. 기본값\arraycolsep
(5pt이기도 함)에 5pt를 추가하면 작업이 완료됩니다. (여담: 이 접근 방식은 2열과 3열의 자연 너비가\frac
너비가 같은 항에 의해 결정되기 때문에 "작동"합니다.)맨 아래 행은
w
기본값array
인\arraycolsep
.wc
( "중앙"을 의미하는) 열의 너비가 "충분히 크게" 선택되는 한c
(여기서는 14pt가 대략 맞는 것 같습니다) 두 번째와 세 번째 열의 너비가 동일한 테이블이 생성됩니다.
한 솔루션이 항상 다른 솔루션보다 나은가요? 일반적으로 그렇지 않습니다. 그러나 특정 사례의 경우 첫 번째 해결 방법도 결국 열 1의 전체 너비를 늘리는 반면 두 번째 솔루션의 경우에는 그렇지 않습니다. 첫 번째 열의 최대 간결성이 중요한 경우 두 번째 솔루션 방법을 사용하는 것이 좋습니다.
\documentclass{article}
\usepackage{array} % for 'w' column type and \extrarowheight macro
\setlength\extrarowheight{2pt}
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}
Initial setup
\[
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]
\bigskip
Solution 1: Increase \texttt{\string\arraycolsep} or \texttt{\string\tabcolsep}
\[
\addtolength{\arraycolsep}{5pt} % default value: 5pt
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]
\bigskip
Solution 2: Increase usable column widths
\[
\begin{array}{ c |wc{14pt} | wc{14pt} | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm
\begin{array}{ c |wc{14pt} | wc{14pt} | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9} \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9} \\ \cline{2-3}
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]
\end{document}