테이블이 있고 열 너비가 동일하다면 LaTeX가 자동으로 열 너비를 결정하기를 원한다고 가정합니다. 이러한 문제는 다음과 같이 새로운 컬럼 유형을 정의함으로써 해결될 수 있습니다 \newcolumntype{C}{ >{ \arraybackslash \Centering } X }
. 그러나 이러한 명령을 사용하면 LaTeX는 열 너비를 동일하게 만들지 만 이로 인해 다음과 같이 차선의 출력이 발생할 수 있습니다.
다음 코드를 사용하여 생성됩니다.
\documentclass{report}
\usepackage{amsmath}
\usepackage{amssymb, amsfonts}
\usepackage[flushleft]{threeparttable}
\usepackage{makecell}
\usepackage{ragged2e}
\usepackage{tabularx}
\newcolumntype{L}{ >{ \arraybackslash \RaggedRight } X } % left justified
\newcolumntype{C}{ >{ \arraybackslash \Centering } X } % centered
\newcolumntype{R}{ >{ \arraybackslash \RaggedLeft } X } % right justified
\newcolumntype{J}{ >{ \arraybackslash \justifying } X } % justified
\renewcommand \tabularxcolumn [1] { >{ \centering } m{#1} }
\usepackage{booktabs}
\newcolumntype{A}[1]{ >{ \arraybackslash \RaggedRight } m{#1} }
\newcolumntype{S}[1]{ >{ \arraybackslash \Centering } m{#1} }
\newcolumntype{D}[1]{ >{ \arraybackslash \RaggedLeft } m{#1} }
\newcolumntype{F}[1]{ >{ \arraybackslash \justifying } m{#1} }
\usepackage{multirow}
\begin{document}
\begin{table*}[]
% Table options
\caption{Elasticity Values}
\label{table:PV_mod_STC_comp2}
% Center the table
\centering
% Stretch the table (vertically)
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{1\textwidth}{ D{2.6cm}@{\quad} |C|C|C|C }
\toprule
\multirow{2}{*}{
\textbf{Customer type}
} &
\multicolumn{2}{c}{
\multirow{2}{*}{\textbf{Set 1}}
}
&
\multicolumn{2}{|c}{
\multirow{2}{*}{\textbf{Set 2}}
}
\\
\multicolumn{1}{c|}{} &
\multicolumn{2}{c}{} &
\multicolumn{2}{|c}{}
\\
\Xhline{0.2 mm}
\textbf{Residential} &
$-0.09$ to $-0.5$ &
$-0.12$ to $-1.56$ & $1$ & $2$
\\
\Xhline{0.2 mm}
\textbf{Commercial} & $-0.019$ to $-0.25$ & $-0.44$ to $-0.97$ & $3$ & $4$
\\
\Xhline{0.2 mm}
\textbf{Industrial} & $-0.005$ to $-0.14$ & $-0.34$ to $-5.48$ & $5$ &
$6$
\\
\bottomrule
\end{tabularx}
\end{table*}
\end{document}
최적화된 코드는 다음과 같은 결과를 가져옵니다.
이는 마지막 두 열을 각각 1cm의 일정한 너비로 대체하여 생성됩니다. 그러나 나는 LaTeX가 마지막 두 열을 자동으로 작게 만들고(내용이 작기 때문에) 두 열을 동일하게 만들고 싶습니다. 즉, 새 열 유형을 정의하고 이름이 이라고 가정 NewCol
하고 이를 테이블 명령에서 사용하고 싶습니다 \begin{tabularx}{1\textwidth}{ D{2.6cm}@{\quad} |C|C| NewCol|NewCol }
. NewCol
여기서는 너비는 동일하지만 열 유형과 크기가 다른 열이 생성되어야 합니다 C
. NewCol
및 너비는 C
열의 내용과 구문에 정의된 허용 길이에 따라 자동으로 결정되어야 합니다.
답변1
이 솔루션은 결합된 열을 측정한 다음 테이블 형식에 해당 너비를 사용합니다. 단점은 데이터를 두 번 입력해야 한다는 것입니다. 세트 2의 제목은 데이터보다 넓습니다.
나는 주로 코드를 단순화하기 위해 여러 가지 불필요한 변경을 했습니다.
\documentclass{report}
\usepackage{amsmath}
\usepackage{amssymb, amsfonts}
\usepackage[flushleft]{threeparttable}
\usepackage{makecell}
\usepackage{ragged2e}
\usepackage{multirow}
% none of the above are used here
\usepackage{booktabs}
%\usepackage{array}% already loaded
\newcolumntype{C}[1]{ >{\hfil} m{#1} }
\newcolumntype{D}[1]{ >{\hfill} m{#1} }
\newcommand{\bigstrut}{\rule[\dimexpr -\arraystretch\dp\strutbox-1ex]{0pt}{0pt}%
\rule{0pt}{\dimexpr \arraystretch\ht\strutbox+1ex}}
\begin{document}
\begin{table*}[]
\sbox0{\begin{tabular}{@{}l@{}}% measure set 1
$-0.09$ to $-0.5$\\
$-0.12$ to $-1.56$\\
$-0.019$ to $-0.25$\\
$-0.44$ to $-0.97$\\
$-0.005$ to $-0.14$\\
$-0.34$ to $-5.48$
\end{tabular}}
\sbox1{\begin{tabular}{@{}l@{}}% measure set 2
1\\
2\\
3\\
4\\
5\\
6
\end{tabular}}
% Table options
\caption{Elasticity Values}
\label{table:PV_mod_STC_comp2}
% Center the table
\centering
% Stretch the table (vertically)
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{ D{2.7cm}@{\quad} |C{\wd0}|C{\wd0}|C{\wd1}|C{\wd1}}
\toprule
\bigstrut\textbf{Customer type} &
\multicolumn{2}{c}{\bigstrut\textbf{Set 1}} &
\multicolumn{2}{|c}{\bigstrut\textbf{Set 2}} \\
\midrule
Residential & $-0.09$ to $-0.5$ & $-0.12$ to $-1.56$ & 1 & 2 \\
\midrule
Commercial & $-0.019$ to $-0.25$ & $-0.44$ to $-0.97$ & 3 & 4 \\
\midrule
Industrial & $-0.005$ to $-0.14$ & $-0.34$ to $-5.48$ & 5 & 6 \\
\bottomrule
\end{tabular}
\end{table*}
\end{document}
답변2
이와 같이? 나는 열의 >{\hsize=xₖ\hsize}X
너비를 조정하곤 했는데 X
, 계수의 조건 xₖ
은 그 합이 X 열의 수와 같다는 것입니다(이것은 무게 중심 좌표 시스템으로 작동합니다).
\documentclass{report}
\usepackage{amsmath}
\usepackage{amssymb, amsfonts}
\usepackage[flushleft]{threeparttable}
\usepackage{makecell, caption}
\captionsetup{skip=6pt}
\usepackage{ragged2e}
\usepackage{tabularx}
\newcolumntype{L}{ >{ \arraybackslash \RaggedRight } X } % left justified
\newcolumntype{C}{ >{ \arraybackslash \Centering\hsize=1.6\hsize} X } % centered
\newcolumntype{y}{ >{ \arraybackslash \Centering\hsize=0.4\hsize} X } % centered
\newcolumntype{R}{ >{ \arraybackslash \RaggedLeft } X } % right justified
\newcolumntype{J}{ >{ \arraybackslash \justifying } X } % justified
\renewcommand \tabularxcolumn [1] { >{ \centering } m{#1} }
\usepackage{booktabs}
\newcolumntype{A}[1]{ >{ \arraybackslash \RaggedRight } m{#1} }
\newcolumntype{S}[1]{ >{ \arraybackslash \Centering } m{#1} }
\newcolumntype{D}[1]{ >{ \arraybackslash \RaggedLeft } m{#1} }
\newcolumntype{F}[1]{ >{ \arraybackslash \justifying } m{#1} }
\usepackage{multirow}
\begin{document}
\begin{table*}[]
% Table options
\caption{Elasticity Values}
\label{table:PV_mod_STC_comp2}
% Center the table
\centering
% Stretch the table (vertically)
\renewcommand{\arraystretch}{1.3}
\begin{tabularx}{1\textwidth}{ D{2.6cm}@{\quad} |C|C|y|y }
\toprule
\multirow{2}{*}{
\textbf{Customer type}
} &
\multicolumn{2}{c}{
\multirow{2}{*}{\textbf{Set 1}}
}
&
\multicolumn{2}{|c}{
\multirow{2}{*}{\textbf{Set 2}}
}
\\
\multicolumn{1}{c|}{} &
\multicolumn{2}{c}{} &
\multicolumn{2}{|c}{}
\\
\Xhline{0.2 mm}
\textbf{Residential} &
$-0.09$ to $-0.5$ &
$-0.12$ to $-1.56$ & $1$ & $2$
\\
\Xhline{0.2 mm}
\textbf{Commercial} & $-0.019$ to $-0.25$ & $-0.44$ to $-0.97$ & $3$ & $4$
\\
\Xhline{0.2 mm}
\textbf{Industrial} & $-0.005$ to $-0.14$ & $-0.34$ to $-5.48$ & $5$ &
$6$
\\
\bottomrule
\end{tabularx}
\end{table*}
\end{document}
답변3
tabularx
표준 표 형식 열과 같이 X 열( tabulary
요청한 내용에 더 가깝습니다)은 p
다음을 허용하도록 설계되었습니다.줄 바꿈열 내에서 지정되거나 계산된 너비로 지정되지만 숫자 데이터 테이블에서는 자동 줄 바꿈을 거의 원하지 않습니다. 표준 tabular
l,r,c 열은 열 내용의 너비에 맞게 자동으로 조정됩니다.
\documentclass{report}
\usepackage{amsmath}
\usepackage{amssymb, amsfonts}
\usepackage[flushleft]{threeparttable}
\usepackage{makecell}
\usepackage{booktabs}
\begin{document}
\begin{table*}
% Table options
\caption{Elasticity Values}
\label{table:PV_mod_STC_comp2}
% Center the table
\centering
% Stretch the table (vertically)
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{>\bfseries rcccc }
\toprule
Customer type&
\multicolumn{2}{c}{\textbf{Set 1}}&
\multicolumn{2}{c}{\textbf{Set 2}}\\
\midrule
Residential&
$-0.09$ to $-0.5$ &
$-0.12$ to $-1.56$ & $1$ & $2$
\\
\midrule
Commercial & $-0.019$ to $-0.25$ & $-0.44$ to $-0.97$ & $3$ & $4$
\\
\midrule
Industrial & $-0.005$ to $-0.14$ & $-0.34$ to $-5.48$ & $5$ &
$6$
\\
\bottomrule
\end{tabular}
\end{table*}
\end{document}
답변4
당신에게 필요한 것은 tabulary
. 열 너비는 tabulary
각 열에서 가장 긴 항목의 기본 너비에 비례합니다. 여기서는 수동으로 아무것도 계산하지 않습니다. 허용되는 헤더는 이며 LCJR
, 세 개는 L,C,R
이름에서 알 수 있는 것과 J
같으며 모두 대문자로 되어 있습니다 p
.
노트:
- 를 사용할 때
\multicolumns
결합된 열의 너비는 개별 열의 기본 너비를 초과해서는 안 됩니다.\makebox[.7em]{$1$}
너비를 약간 늘리는 데 사용한 것을 관찰하십시오 . 또한c,l,r,p
결합된 열에는 일반 문자가 사용됩니다. - 첫 번째 행의 높이를 높이려면 간단한 방법으로
\parbox{0pt}{\rule{0pt}{1cm}}
이를 수행할 수 있습니다. - 마지막으로 수직선은
\toprule
또는 와 함께 사용하면 안 됩니다\bottomrule
. 수평선 아래/위에 작은 간격이 생기기 때문입니다.
-
\documentclass{report}
\usepackage{amsmath}
\usepackage{amssymb, amsfonts}
\usepackage[flushleft]{threeparttable}
\usepackage{makecell,tabulary}
\usepackage{ragged2e}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{table*} % [ ] Table options
\caption{Elasticity Values}
\label{table:PV_mod_STC_comp2}
\centering % Center the table
\renewcommand{\arraystretch}{1.3} % Stretch the table (vertically)
\begin{tabulary}{\textwidth}{ R|C|C|C|C}
\Xhline{1pt}
\textbf{Customer type}\parbox{0pt}{\rule{0pt}{1cm}}&\multicolumn{2}{c|}{\textbf{Set 1}} & \multicolumn{2}{c}{\textbf{Set 2}}\\
\hline\textbf{Residential} & $-0.09$ to $-0.5$ & $-0.12$ to $-1.56$ & \makebox[.7em]{$1$} & $2$\\
\hline\textbf{Commercial} & $-0.019$ to $-0.25$ & $-0.44$ to $-0.97$ & $3$ & $4$ \\
\hline\textbf{Industrial} & $-0.005$ to $-0.14$ & $-0.34$ to $-5.48$ & $5$ & $6$ \\
\Xhline{1pt}
\end{tabulary}
\end{table*}
\end{document}