
Ich versuche, eine Tabelle zu erstellen, in der bestimmte Zellen durch einen dickeren Rahmen hervorgehoben werden. Mein Versuch \arrayrulewidth
war recht erfolgreich, außer dass die \cline
auf diese Weise verdickten Ränder nicht immer gut mit den Standardrändern übereinstimmen, wie man an diesem Beispiel sehen kann:
wie man erkennen kann, ragt der verdickte Rand aus der Unterseite heraus.
Gibt es Vorschläge, um dies zu verbessern?
Der Code, der das Beispiel erzeugt, ist
\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}
(unter Verwendung von XeLaTeX. Der Teil zur Handhabung des Japanischen ist für diese Frage nicht unbedingt erforderlich, wurde jedoch aufgenommen, um die ursprüngliche Verwendung besser zu veranschaulichen.)
Antwort1
Mit der neuesten Version nicematrix
(v. 5.19 vom 23.07.2021) ist es einfach, den erforderlichen Rahmen zu zeichneninnerhalb des Rechtecksmit einer Codezeile.
\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}
Die Zeile lautet:\Block[tikz=clip,tikz={draw,line width=4pt},hvlines]{1-2}{}
- Der Block hat eine Zeile und zwei Spalten (
1-2
). - Mit
tikz=clip
wird das dem Block entsprechende Rechteck zum Ausschneiden weiterer Konstruktionen genutzt. - Mit
tikz={draw,line width=4pt}
wird ein Rahmen mit einer Dicke von 4 pt gezeichnet. Beim Clipping wird jedoch nur der innere Teil dieses Rahmens angezeigt (mit einer Dicke von 2 pt). - Mit der Taste
hvlines
können alle Regeln innerhalb des Blocks gezeichnet werden (genauer gesagt nur eine: die vertikale in der Mitte).
Antwort2
Hier ist eine Lösung mit {NiceTabular}
von nicematrix
. Diese Umgebung basiert auf , {tabular}
fügt aber PGF/Tikz-Knoten unter den Zellen, Zeilen und Spalten hinzu. Mit diesen Knoten können Sie ganz einfach mit Tikz jede gewünschte Regel zeichnen.
\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}