내부 테이블이있는 Tcolorbox 규칙 너비
Aug 20 2020
분명히이 boxrule
명령은 tcolorbox
내부에 표 형식 이있는 향상된 기능에는 효과가 없습니다 .
표에서 프레임의 너비를 어떻게 지정할 수 있습니까?
MWE는 다음과 같습니다.
\documentclass{article}
\usepackage[skins]{tcolorbox}
\usepackage{array,tabularx}
\usepackage{colortbl}
\begin{document}
% \usepackage{array,tabularx}
% \usepackage{colortbl} - or - \usepackage[table]{xcolor}
\tcbset{enhanced,fonttitle=\bfseries\large,fontupper=\normalsize\sffamily,
colback=yellow!10!white,colframe=red!50!black,colbacktitle=red!30!white,
coltitle=black,center title,
boxrule=10pt, % NO EFFECT
}
\begin{tcolorbox}[tabularx*={\arrayrulewidth0.5mm}{X|X|X},title=My table]
One
& Two
& Three \\\hline\hline
1000.00 & 2000.00 & 3000.00\\\hline
2000.00 & 3000.00 & 4000.00
\end{tcolorbox}
% EDIT : with a multicolumn as 1st cell this does not compile anymore
\begin{tcolorbox}[boxrule=2pt,tabularx*={\arrayrulewidth2pt}{YY|YY|YY},
title=My table
]
\multicolumn{2}{c|}{title}
& \multicolumn{2}{c|}{title}
& \multicolumn{2}{c}{title} \\\hline
2 & d & 3 & e & 4 & f \\\hline
title & \multicolumn{3}{|l|}{h} & \multicolumn{1}{c|}{title} & j \\
\end{tcolorbox}
\end{document}
편집 : 첫 번째 대답은 MWE의 첫 번째 테이블에 대해 괜찮지 만 multicolumn
첫 번째 셀로 사용하고 있으며 Misplaces \omit
오류가 발생합니다. MWE가 문제가있는 테이블로 수정되었습니다.
답변
6 Marijn Aug 20 2020 at 19:05
tabularx
스타일 의 정의는에 대한 설정 boxrule
으로 있습니다 0.5mm
. 소스에서 스타일을 복사하고이 부분을 제거하여 설정을 덮어 쓸 수 있습니다.
\documentclass{article}
\usepackage[skins]{tcolorbox}
\usepackage{array,tabularx}
\usepackage{colortbl}
\begin{document}
% \usepackage{array,tabularx}
% \usepackage{colortbl} - or - \usepackage[table]{xcolor}
\tcbset{enhanced,fonttitle=\bfseries\large,fontupper=\normalsize\sffamily,
colback=yellow!10!white,colframe=red!50!black,colbacktitle=red!30!white,
coltitle=black,center title,
boxrule=10pt, % NO EFFECT
}
\makeatletter
\tcbset{tabularx*/.style 2 args={%
boxsep=\z@,top=\z@,bottom=\z@,leftupper=\z@,rightupper=\z@,
toptitle=1mm,bottomtitle=1mm,% boxrule setting here removed
before upper={\arrayrulecolor{tcbcol@frame}\def\arraystretch{1.1}#1%
\tcb@hack@currenvir\tabularx{\linewidth}{#2}},
after upper=\endtabularx\arrayrulecolor{black}}}
\makeatother
\begin{tcolorbox}[tabularx*={\arrayrulewidth0.5mm}{X|X|X},title=My table]
One
& Two
& Three \\\hline\hline
1000.00 & 2000.00 & 3000.00\\\hline
2000.00 & 3000.00 & 4000.00
\end{tcolorbox}
\end{document}
결과:

편집 : 최신 버전의 tcolorbox
정의가 약간 변경되었습니다. 이 경우 새 정의는 다음과 같아야합니다.
\tcbset{tabularx*/.style 2 args={%
boxsep=\z@,top=\z@,bottom=\z@,leftupper=\z@,rightupper=\z@,
toptitle=1mm,bottomtitle=1mm,
before upper*={%
\let\tcb@CT@arc@save\CT@arc@%
\arrayrulecolor{tcbcolframe}\def\arraystretch{1.1}#1%
\tcb@hack@currenvir\tabularx{\linewidth}{#2}},
after upper*={\endtabularx\global\let\CT@arc@\tcb@CT@arc@save}%
}
}
muzimuzhiZ Aug 21 2020 at 08:01
필요성의 값으로 변경하는 경우 boxrule
옵션으로 지정을 tabularx*
하고 tabularx*/.append style={boxrule=<dimen>}
있는, 간단 .append style
미리 정의 중 하나입니다 pgfkeys
핸들러.
전체 예 :
\documentclass{article}
\usepackage[skins]{tcolorbox}
\usepackage{array,tabularx}
\usepackage{colortbl}
\tcbset{
enhanced,
fonttitle=\bfseries\large,
fontupper=\normalsize\sffamily,
colback=yellow!10!white,
colframe=red!50!black,
colbacktitle=red!30!white,
coltitle=black,
center title,
% change boxrule set by "tabularx*", by default it's 0.5mm
tabularx*/.append style={boxrule=10pt}
}
\begin{document}
\begin{tcolorbox}[tabularx*={\arrayrulewidth0.5mm}{X|X|X}, title=My table]
One
& Two
& Three \\\hline\hline
1000.00 & 2000.00 & 3000.00\\\hline
2000.00 & 3000.00 & 4000.00
\end{tcolorbox}
\end{document}

최신 정보
재미로. 여기에 패키지 에서 내부적으로 사용되는 새로운 pgfkeys
핸들러 가 정의됩니다..patch code={<search>}{<replace>}
\xpatchcmd
xpatch
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{xpatch}
\usepackage{array,tabularx}
\usepackage{colortbl}
\makeatletter
% usage:
% <key>/.patch code={search}{replace}
% similar to def of /handlers/.add code/.code 2 args={...}
\pgfkeys{/handlers/.patch/.code 2 args=%
% Find out, whether with args or not.
\pgfkeysifdefined{\pgfkeyscurrentpath/.@args}%
{% Yes, so add to body and reuse args
\pgfkeyspatchvalue{\pgfkeyscurrentpath/.@body}{#1}{#2}%
% Redefine code
{%
\pgfkeysgetvalue{\pgfkeyscurrentpath/.@args}{\pgfkeys@tempargs}%
\pgfkeysgetvalue{\pgfkeyscurrentpath/.@body}{\pgfkeys@tempbody}%
\def\pgfkeys@marshal{\expandafter\gdef\expandafter\pgfkeys@global@temp\pgfkeys@tempargs}%
\expandafter\pgfkeys@marshal\expandafter{\pgfkeys@tempbody}%
}%
\pgfkeysifdefined{\pgfkeyscurrentpath/.@@body}{%
% support for \pgfkeysndefargs:
\pgfkeyslet{\pgfkeyscurrentpath/.@@body}{\pgfkeys@global@temp}%
}{%
% support for \pgfkeysdefargs:
\pgfkeyslet{\pgfkeyscurrentpath/.@cmd}{\pgfkeys@global@temp}%
}%
}{% No, so single argument (simple \pgfkeysdef). Redefine accordingly.
\edef\pgf@expanded@path{\pgfkeyscurrentpath}%
{%
\pgfkeysifdefined{\pgf@expanded@path/.@cmd}{%
\expandafter\expandafter\expandafter\pgfkeys@temptoks
\expandafter\expandafter\expandafter{%
\csname pgfk@\pgf@expanded@path/.@body\endcsname}%
}{%
\expandafter\pgfkeys@temptoks\expandafter{%
\expandafter\pgfkeyssetvalue\expandafter{\pgf@expanded@path}{##1}}%
}%
\edef\pgfkeys@temp{\the\pgfkeys@temptoks}%
\pgfkeyspatchvalue\pgfkeys@temp{#1}{#2}%
\global\let\pgfkeys@global@temp\pgfkeys@temp
}%
\def\pgf@temp{\pgfkeyssetvalue{\pgf@expanded@path/.@body}}%
\expandafter\pgf@temp\expandafter{\pgfkeys@global@temp}%
\expandafter\long\expandafter\def\expandafter\pgfkeys@temp\expandafter##\expandafter1\expandafter\pgfeov\expandafter{\pgfkeys@global@temp}%
\pgfkeyslet{\pgf@expanded@path/.@cmd}\pgfkeys@temp
}%
}
% usage:
% \pgfkeyspatchvalue{<key>}{<search>}{<replace>}
% similar to \pgfkeysaddvalue
\long\def\pgfkeyspatchvalue#1#2#3{%
\pgfkeysifdefined{#1}{%
\expandafter\xpatchcmd\csname pgfk@#1\endcsname{#2}{#3}{}
{\PackageError{pgfkeys}{Patching for key #1 fails}}%
}{}%
}
\makeatother
\begin{document}
\tcbset{
colframe=black!25,
colbacktitle=black!75
}
\begin{tcolorbox}[boxrule=5pt, tabularx*={\arrayrulewidth0.5mm}{X|X|X}, title=Before patching]
One & Two & Three \\ \hline\hline
1000.00 & 2000.00 & 3000.00 \\ \hline
2000.00 & 3000.00 & 4000.00
\end{tcolorbox}
% patch option "tabularx*", remove "boxrule=0.5mm"
\tcbset{
tabularx*/.patch={boxrule=0.5mm}{}
}
\begin{tcolorbox}[boxrule=5pt, tabularx*={\arrayrulewidth0.5mm}{X|X|X}, title=After patching]
One & Two & Three \\ \hline\hline
1000.00 & 2000.00 & 3000.00 \\ \hline
2000.00 & 3000.00 & 4000.00
\end{tcolorbox}
\end{document}
