
特定のセルを太い枠線で強調した表を作成しようとしています。この試みは\arrayrulewidth
非常に成功しましたが、\cline
この例からわかるように、この方法で太くすると、必ずしも標準のものと一致するとは限りません。
ご覧のとおり、太い縁が下から突き出ています。
これを改善するための提案はありますか?
この例を生成するコードは
\documentclass[border=10pt,11pt]{standalone}
\usepackage{setspace}
\usepackage{array,booktabs,multirow,makecell}
\newlength{\Oldarrayrulewidth}
\newcommand{\Cline}[2]{%
\noalign{\global\setlength{\Oldarrayrulewidth}{\arrayrulewidth}}%
\noalign{\global\setlength{\arrayrulewidth}{#1}}\cline{#2}%
\noalign{\global\setlength{\arrayrulewidth}{\Oldarrayrulewidth}}}
%%% Japanese support
\usepackage{xeCJK}
\usepackage{zxjatype}
\usepackage{fontspec}
\def\cjkfontscale{1.0}
\setmainfont{Kozuka Mincho Pr6N}
\setCJKmainfont[Scale=\cjkfontscale]{Kozuka Mincho Pr6N}
\setCJKsansfont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
\setCJKmonofont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
\newCJKfontfamily\boldmincho{Hiragino Mincho ProN W6}
\begin{document}
\def\heavyrulewidth{2pt}
\def\strongvline{\vline width \heavyrulewidth}
\def\arraystretch{2.0}
\def\padcaption#1{\hspace{1.6em}#1\hspace{1.6em}}
\begin{tabular}{|c|r|c|r|}
\cline{1-4}
\multicolumn{1}{|c|}{\raisebox{-8pt}{\padcaption{件名}}}
& \multicolumn{1}{|l|}{\parbox[t][3em]{12em}{Subject}}
& \multirow{2}{*}[-10.8pt]{\hspace{1em}{納品先}\hspace{1em}}
& \multirow{2}{*}{\parbox[t][4em]{14em}{Address}} \\
\Cline{\heavyrulewidth}{1-2}
\multicolumn{1}{!{\strongvline}c|}{\hspace{-1.5em}\padcaption{納品日}}
& \multicolumn{1}{|r!{\strongvline}}{\boldmincho\Large 2020/1/1}
& \multicolumn{1}{c|}{} & \multicolumn{1}{c|}{} \\
\Cline{\heavyrulewidth}{1-2}\cline{3-4}
\end{tabular}
\def\arraystretch{1.0}
\vspace{1em}
\end{document}
(XeLaTeX を使用。日本語処理部分はこの質問に必須ではありませんが、本来の使い方をよりよく示すために含まれています。)
答え1
最新バージョンnicematrix
(2021-07-23のv.5.19)では、必要なフレームを簡単に描画できます。長方形の内側1 行のコードで。
\documentclass[border=10pt,11pt]{standalone}
\usepackage{setspace}
\usepackage{array,booktabs,multirow,makecell}
\usepackage{nicematrix}
\usepackage{tikz}
%%% Japanese support
\usepackage{xeCJK}
\usepackage{zxjatype}
\usepackage{fontspec}
\def\cjkfontscale{1.0}
\setmainfont{Kozuka Mincho Pr6N}
\setCJKmainfont[Scale=\cjkfontscale]{Kozuka Mincho Pr6N}
\setCJKsansfont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
\setCJKmonofont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
\begin{document}
\def\heavyrulewidth{2pt}
\def\strongvline{\vline width \heavyrulewidth}
\def\arraystretch{2.0}
\def\padcaption#1{\hspace{1.6em}#1\hspace{1.6em}}
\begin{NiceTabular}{|c|r|c|r|}% [hvlines]
\hline
\raisebox{-8pt}{\padcaption{件名}}
& \multicolumn{1}{l}{\parbox[t][3em]{12em}{Subject}}
& \multirow{2}{*}[-10.8pt]{\hspace{1em}{納品先}\hspace{1em}}
& \multirow{2}{*}{\parbox[t][4em]{14em}{Address}} \\
\Block[tikz=clip,tikz={draw,line width=4pt},hvlines]{1-2}{}
\hspace{-1.5em}\padcaption{納品日}
& \Large 2020/1/1 \\
\hline
\end{NiceTabular}
\def\arraystretch{1.0}
\vspace{1em}
\end{document}
行は次のとおりです。\Block[tikz=clip,tikz={draw,line width=4pt},hvlines]{1-2}{}
- ブロックには 1 行 2 列 (
1-2
) があります。 - では
tikz=clip
、ブロックに対応する四角形を使用して、さらに構造をクリップします。 - では
tikz={draw,line width=4pt}
、4 pt の太さのフレームが描画されます。ただし、クリッピングを使用すると、そのフレームの内側部分のみが表示されます (太さは 2 pt です)。 - キーは、
hvlines
ブロック内のすべてのルールを描画するために使用されます (実際には、中央の垂直ルール 1 つだけ)。
答え2
{NiceTabular}
以下はを使用したソリューションですnicematrix
。この環境は に基づいて構築されています{tabular}
が、セル、行、列の下に PGF/Tikz ノードが追加されています。これらのノードを使用して、必要なルールで Tikz で描画するのは簡単です。
\documentclass[border=10pt,11pt]{standalone}
\usepackage{setspace}
\usepackage{array,booktabs,multirow,makecell}
\usepackage{nicematrix}
\usepackage{tikz}
%%% Japanese support
\usepackage{xeCJK}
\usepackage{zxjatype}
\usepackage{fontspec}
\def\cjkfontscale{1.0}
\setmainfont{Kozuka Mincho Pr6N}
\setCJKmainfont[Scale=\cjkfontscale]{Kozuka Mincho Pr6N}
\setCJKsansfont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
\setCJKmonofont[Scale=\cjkfontscale]{Kozuka Gothic Pr6N}
% \newCJKfontfamily\boldmincho{Hiragino Mincho ProN W6}
\begin{document}
\def\heavyrulewidth{2pt}
\def\strongvline{\vline width \heavyrulewidth}
\def\arraystretch{2.0}
\def\padcaption#1{\hspace{1.6em}#1\hspace{1.6em}}
\begin{NiceTabular}{|c|r|c|r|}
\hline
\raisebox{-8pt}{\padcaption{件名}}
& \multicolumn{1}{l}{\parbox[t][3em]{12em}{Subject}}
& \multirow{2}{*}[-10.8pt]{\hspace{1em}{納品先}\hspace{1em}}
& \multirow{2}{*}{\parbox[t][4em]{14em}{Address}} \\
\hspace{-1.5em}\padcaption{納品日}
& \Large 2020/1/1 \\
\CodeAfter
\begin{tikzpicture}
\draw (3-|1) -- (3-|5) ;
\draw [very thick] (2-|1) rectangle (3-|3) ;
\end{tikzpicture}
\end{NiceTabular}
\def\arraystretch{1.0}
\vspace{1em}
\end{document}