
Estoy intentando hacer una tabla con ciertas celdas enfatizadas con un borde engrosado alrededor de esas celdas. Mi intento \arrayrulewidth
fue bastante exitoso, excepto que los \cline
engrosados de esta manera no siempre se alinean bien con los estándar, como se puede ver en este ejemplo:
Como se puede ver, el borde engrosado sobresale de la parte inferior.
¿Hay alguna sugerencia para mejorar esto?
El código que produce el ejemplo es
\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}
(Usando XeLaTeX. La parte de manejo japonés no es esencial para esta pregunta, pero se incluye para demostrar mejor el uso original).
Respuesta1
Con la última versión de nicematrix
(v. 5.19 del 23-07-2021), es fácil dibujar el marco requeridodentro del rectángulocon una línea de código.
\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}
La línea es:\Block[tikz=clip,tikz={draw,line width=4pt},hvlines]{1-2}{}
- El bloque tiene una fila y dos columnas (
1-2
). - Con
tikz=clip
, el rectángulo correspondiente al bloque se utiliza para recortar otras construcciones. - Con
tikz={draw,line width=4pt}
, se dibuja un marco con un espesor igual a 4 pt. Sin embargo, con el recorte solo aparecerá la parte interior de ese marco (con un grosor igual a 2 pt). - La clave
hvlines
se utiliza para dibujar todas las reglas dentro del bloque (de hecho, solo una: la vertical central).
Respuesta2
Aquí hay una solución con {NiceTabular}
of nicematrix
. Este entorno está construido {tabular}
pero agrega nodos PGF/Tikz debajo de las celdas, filas y columnas. Es fácil usar estos nodos para dibujar con Tikz cualquier regla que desees.
\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}