
내부 테이블('매우 긴 설명')이 페이지 제한을 벗어납니다.
\documentclass{article}
\usepackage[margin=3cm]{geometry}
\usepackage{array}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{tabularx}
\begin{document}
\newenvironment{messageWithProperties}[1]
{
\noindent
\tabularx{\textwidth}{>{\bfseries}lX}
\toprule
\midrule
header &
$\left\{\tabular{>{\bfseries}l l >{\sffamily}p{\dimexpr\textwidth-12\tabcolsep-5\fboxsep-7.5cm\relax}}
\toprule
id & integer & desc \\
key & integer & desc \\
\bottomrule
\endtabular\right\}$ \\[4ex]
\midrule
#1 &
$\left\{\tabular{>{\bfseries}l l >{\sffamily}p{\dimexpr\textwidth-12\tabcolsep-5\fboxsep-7.5cm\relax}}
\toprule
}
{
\bottomrule
\endtabular\right\}$ \\[4ex]
\midrule
\bottomrule
\endtabularx
}
\begin{messageWithProperties}{someVeryLongName}
userId & string & desc \\
propertyName & veryLongStringType & a very very long description of the field \\
\end{messageWithProperties}
\end{document}
강제로 내부에 가두는 방법은 무엇입니까?
크기를 제한 \textwidth - \widthof{#1}
하고 사용 가능한 모든 공간을 채울 수 있도록 하는 것이 좋을 것입니다. 그렇게하는 방법?
답변1
서투른 방식으로 environ
중첩을 피하기 위해 사용합니다 .tabularx
\documentclass{article}
\usepackage[margin=3cm]{geometry}
\usepackage{array}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{tabularx,environ}
\newlength{\bracewidth}
\settowidth{\bracewidth}{$\left\{\vbox to 1in{}\right.\kern-\nulldelimiterspace$}
\newcommand{\innerMWP}[1]{%
$\left\{\begin{tabularx}{\dimexpr\hsize-2\bracewidth}{ >{\bfseries}l l >{\sffamily}X }
#1
\end{tabularx}\right\}$%
}
\NewEnviron{messageWithProperties}[1]
{\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}lX}
\toprule
\midrule
header & \innerMWP{%
\toprule
id & integer & desc \\
key & integer & desc \\
\bottomrule
}%
\\[4ex]
\midrule
#1 & \innerMWP{\toprule\BODY\bottomrule} \\[4ex]
\midrule
\bottomrule
\end{tabularx}%
}
\begin{document}
\begin{messageWithProperties}{someVeryLongName}
userId & string & desc \\
propertyName & veryLongStringType & a very very long description of the field \\
\end{messageWithProperties}
\end{document}
쓸모없는 중괄호 없이:
\documentclass{article}
\usepackage[margin=3cm]{geometry}
\usepackage{array}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{tabularx,environ}
\newcommand{\innerMWP}[1]{%
\begin{tabularx}{\hsize}{ >{\bfseries}l l >{\sffamily}X }
#1
\end{tabularx}%
}
\NewEnviron{messageWithProperties}[1]
{\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}lX}
\toprule\addlinespace
header & \innerMWP{%
\toprule
id & integer & desc \\
key & integer & desc \\
\bottomrule
}%
\\\addlinespace
\midrule
\addlinespace
#1 & \innerMWP{\toprule\BODY\bottomrule} \\
\addlinespace
\bottomrule
\end{tabularx}%
}
\begin{document}
\begin{messageWithProperties}{someVeryLongName}
userId & string & desc \\
propertyName & veryLongStringType & a very very long description of the field \\
\end{messageWithProperties}
\end{document}
답변2
이것이 적합한 솔루션인지는 모르겠지만 발견했습니다. 여기셀 너비를 지정하는 방법이 있으며 이 너비를 사용하여 중첩된 테이블 열의 너비를 설정했습니다.
\documentclass{article}
\usepackage[margin=3cm]{geometry}
\usepackage{array}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{tabularx}
% These code lines are from: https://tex.stackexchange.com/a/30673/101651
\makeatletter
\newcommand\cellwidth{\TX@col@width}
\makeatother
\begin{document}
\newenvironment{messageWithProperties}[1]
{
\noindent
\tabularx{\textwidth}{>{\bfseries}lX}
\toprule
\midrule
header &
$\left\{\tabular{>{\bfseries}p{.24\cellwidth} p{.27\cellwidth} >{\sffamily}p{.34\cellwidth}}
\toprule
id & integer & desc \\
key & integer & desc \\
\bottomrule
\endtabular\right\}$ \\[4ex]
\midrule
#1 &
$\left\{\tabular{>{\bfseries}p{.24\cellwidth} p{.27\cellwidth} >{\sffamily}p{.34\cellwidth}}
\toprule
}
{
\bottomrule
\endtabular\right\}$ \\[4ex]
\midrule
\bottomrule
\endtabularx
}
\begin{messageWithProperties}{someVeryLongName}
userId & string & desc \\
propertyName & veryLongStringType & a very very long description of the field \\
\end{messageWithProperties}
\end{document}
PS = 저는 이전에 중첩된 테이블을 해본 적도 없고, 새로운 환경을 만들어본 적도 없어서 연습삼아 답변했습니다.