粗斜線與常用寬度斜線的對齊

粗斜線與常用寬度斜線的對齊

我正在嘗試製作一個表格,其中某些單元格強調並在這些單元格周圍加厚邊框。我的嘗試\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}

上述程式碼的輸出

相關內容