
我正在嘗試製作一個表格,其中某些單元格強調並在這些單元格周圍加厚邊框。我的嘗試\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),可以輕鬆繪製所需的框架長方形裡面用一行程式碼。
\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
)。 - 對於
tikz=clip
,與區塊相對應的矩形用於裁剪進一步的結構。 - 使用 時
tikz={draw,line width=4pt}
,將繪製一個粗細為 4 pt 的框架。但是,透過剪裁,只會顯示該框架的內部部分(厚度等於 2 pt)。 - 鍵
hvlines
用於繪製區塊內的所有規則(實際上,只有一個:中央垂直的規則)。
答案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}