在 TikZ 中绘制矩形

在 TikZ 中绘制矩形

我知道如何制作一个矩形并填充它。

但是,要用 2 毫米间隙的细 45 度斜线来孵化这个矩形,该怎么做呢?

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
%\draw (0,0) rectangle (2,4);
\fill[blue] (0,0) rectangle (2,4);

\end{tikzpicture}

\end{document}

谢谢你,Altermundus,

我想在曲线下绘制区域。但我无法像使用

[图案=西北线,图案颜色=蓝色]

请对您的代码进行一些解释,以便我可以使用它。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
\begin{tikzpicture}
\draw[pattern=north west lines, pattern color=blue] (0,0) rectangle (2,4);
\end{tikzpicture}

\begin{tikzpicture}
\draw [thick,pattern=north west lines, pattern color=red] (1,0)--(1,1) to [bend left] (4,4) -- (4,0) --cycle;
\end{tikzpicture}

\end{document}

答案1

你可以使用库patterns。例如:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
\begin{tikzpicture}
\draw[pattern=north west lines, pattern color=blue] (0,0) rectangle (2,4);
\end{tikzpicture}

\end{document}

结果是:

在此处输入图片描述

您可以在文档(pgfmanual)中找到更多内容:第 62 章 图案库

答案2

不完全是答案,而是两个代码示例,用于获取没有 的交叉阴影矩形pattern。此代码是 pgf/tikz 的第一个版本所必需的。

使用 可以得到更好的代码clip。第二个使用 fp。

\documentclass[11pt]{scrartcl}
\usepackage{tikz,ifthen,fp,calc}

\makeatletter
\newlength{\tkz@size}
\newlength{\tkz@rect@A}
\newlength{\tkz@rect@B}
\newlength{\tkz@rect@C}
\newlength{\tkz@rect@D}
\newlength{\tkz@hachsep}
\newboolean{tkz@rect@inv}\setboolean{tkz@rect@inv}{false}

\def\tkzhachrect[#1](#2,#3)(#4,#5){%
% A(#2,#3) D(#4,#5)

\draw (#2,#3) rectangle (#4,#5) ;
\setboolean{tkz@rect@inv}{false}
\setlength{\tkz@hachsep}{#1 cm}% sep des hach.
\setlength{\tkz@rect@A}{#2 cm + #3 cm}
\setlength{\tkz@rect@B}{#2 cm + #5 cm}
\setlength{\tkz@rect@C}{#4 cm + #3 cm}

\ifthenelse{\lengthtest{\tkz@rect@B > \tkz@rect@C}}%
{\setlength{\tkz@rect@C}{#2 cm + #5 cm}
\setlength{\tkz@rect@B}{#4 cm + #3 cm}
\setboolean{tkz@rect@inv}{true}%
}{}%
\setlength{\tkz@rect@D}{#4 cm + #5 cm}
\setlength{\tkz@size}{\tkz@rect@A}

\whiledo{\lengthtest{\tkz@size < \tkz@rect@D}}%
{\ifthenelse{\lengthtest{\tkz@size < \tkz@rect@B}}
    {\draw[hstyle] (#2 cm,\tkz@size-#2 cm) -- (\tkz@size-#3 cm,#3 cm);}%else
    {\ifthenelse{\lengthtest{\tkz@size < \tkz@rect@C}}
       {\ifthenelse{\boolean{tkz@rect@inv}}
       {\draw[hstyle] (#2 cm,\tkz@size-#2 cm) -- (#4 cm,\tkz@size-#4 cm);}
       {\draw[hstyle] (\tkz@size - #5 cm,#5 cm) -- (\tkz@size-#3 cm,#3 cm);}%
       }%
    {\draw[hstyle] (\tkz@size - #5 cm,#5 cm) -- (#4 cm,\tkz@size-#4 cm);}}% fi
    \addtolength{\tkz@size}{\tkz@hachsep}
}% end whiledo
}% end def

\def\tkzhachrectfp[#1](#2,#3)(#4,#5){%
\setboolean{tkz@rect@inv}{false}
\FPadd{\deb}{#2}{#3}
\FPtrunc\deb{\deb}{2}
\FPadd{\fin}{#4}{#5}
\FPtrunc\fin{\fin}{2} 
\FPadd{\sone}{#2}{#5}
\FPtrunc\sone{\sone}{2}
\FPadd{\stwo}{#4}{#3}
\FPtrunc\stwo{\stwo}{2} 
\FPifgt{\sone}{\stwo}
\FPset{\temp}{\sone}
\FPset{\sone}{\stwo}
\FPset{\stwo}{\temp}
\setboolean{tkz@rect@inv}{true}%
\else
\fi
\FPadd{\hach}{\deb}{#1}%
\FPtrunc\hach{\hach}{2}%

\draw (#2,#3) rectangle (#4,#5);

\foreach \s in {\deb ,\hach,...,\sone}
   {\FPadd{\oo}{\s}{-#2} 
    \FPtrunc\oo{\oo}{2}%
    \FPadd{\aa}{\s}{-#3} 
    \FPtrunc\aa{\aa}{2}%
    \draw[hstyle] (#2,\oo) -- (\aa,#3);}%
 \FPifeq{\sone}{\stwo}%
\else
   \FPadd{\sone}{\sone}{#1}
   \FPadd{\hach}{\sone}{#1}
   \FPtrunc\hach{\hach}{2}
   %
     \foreach \s in {\sone ,\hach,...,\stwo}
    {\ifthenelse{\boolean{tkz@rect@inv}}
       {\FPadd{\oo}{\s}{-#2} 
       \FPtrunc\oo{\oo}{2}
        \FPadd{\aa}{\s}{-#4} 
        \FPtrunc\aa{\aa}{2}
        \draw[hstyle] (#2,\oo) -- (#4,\aa);}
       {\FPadd{\oo}{\s}{-#5} 
       \FPtrunc\oo{\oo}{2}
        \FPadd{\aa}{\s}{-#3} 
        \FPtrunc\aa{\aa}{2}
        \draw[hstyle] (\oo,#5) -- (\aa,#3);}%
    }% fin de la boucle
\fi%

\FPadd{\stwo}{\stwo}{#1}
\FPadd{\hach}{\stwo}{#1}
\FPtrunc\hach{\hach}{2}

 \foreach \s in {\stwo,\hach,...,\fin}
 {\FPadd{\oo}{\s}{-#5} \FPtrunc\oo{\oo}{2}
  \FPadd{\aa}{\s}{-#4} \FPtrunc\aa{\aa}{2}
    \draw[hstyle] (\oo,#5) -- (#4,\aa);}
 }% end def

\begin{document} 
 \tikzset{hstyle/.style={blue,dashed}}
 \begin{tikzpicture}  
        \tkzhachrect[0.1](2,1)(6,3)
\end{tikzpicture} 
 \tikzset{hstyle/.style={red,dotted}}  
 \begin{tikzpicture}
       \tkzhachrectfp[0.2](2,1)(6,3)
\end{tikzpicture} 

 \tikzset{hstyle/.style={solid,thin}}  
 \begin{tikzpicture}
       \tkzhachrectfp[0.2](2,1)(6,3)
\end{tikzpicture}
 \tikzset{hstyle/.style={solid,thick}}  
 \begin{tikzpicture}
       \tkzhachrectfp[0.2](2,1)(6,3)
\end{tikzpicture}  

\end{document}

在此处输入图片描述

答案3

新库比patterns.meta旧库具有更大的灵活性。patterns它定义了几种类型的图案,,,,,,Lines所有这些都可以自定义。可以单独指定角度、间隔、线宽、点/星的大小HatchStarsDots

例如,将选项添加pattern={Lines[angle=45]}到路径的选项中将用对角线填充路径。像往常一样,括号Lines[..]是为了确保解析器不会认为]选项的右括号位于路径本身中。

一个完整的例子。

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{patterns.meta}
\begin{document}
\begin{tikzpicture}
\fill [
       pattern={Lines[
                  distance=2mm,
                  angle=45,
                  line width=0.7mm
                 ]},
        pattern color=blue
       ] (0,0) rectangle (5,5);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容