无需 tikz 即可创建圆形、旋转正方形和三角形等形状

无需 tikz 即可创建圆形、旋转正方形和三角形等形状

在上一篇文章中,我获得了有关创建带有黑色边框和自定义填充的框的帮助。

如何使用自定义填充创建其他形状,如三角形、圆形、旋转正方形等。

我现在不想使用 tikz。

\documentclass[11pt,a4paper]{article}%
\usepackage{xcolor}

% some color definitions
\definecolor{cblue}{RGB}{16,78,139}
\definecolor{cred}{RGB}{139,37,0}
\definecolor{cgreen}{RGB}{0,139,0} 

% normal box
\newcommand{\sqboxs}{1.2ex}% the square size
\newcommand{\sqboxf}{0.6pt}% the border in \sqboxEmpty
\newcommand{\sqbox}[1]{\textcolor{#1}{\rule{\sqboxs}{\sqboxs}}}
\newcommand{\sqboxblack}[1]{\setlength{\fboxsep}{0pt}\fbox{\sqbox{#1}}}

% empty box
\newcommand{\sqboxEmpty}[1]{%
  \begingroup
  \setlength{\fboxrule}{\sqboxf}%
  \setlength{\fboxsep}{-\fboxrule}%
  \textcolor{#1}{\fbox{\rule{0pt}{\sqboxs}\rule{\sqboxs}{0pt}}}%
  \endgroup
}

\newcommand{\sqboxEmptyblack}[1]{\setlength{\fboxsep}{0pt}\fbox{\sqboxEmpty{#1}}}

\begin{document}
I like these.
\sqbox{cred}  \sqbox{cgreen} \sqbox{cblue}

And also these.
\sqboxEmpty{cred}  \sqboxEmpty{cgreen}  \sqboxEmpty{cblue}

\end{document} 

答案1

我赞同你不使用 TikZ 的决定。你可以使用低级 PDF 命令创建各种形状,就像我在这里的代码中使用的一样。我们定义了\sqbox正方形、\trianbox三角形、\uptrianbox旋转三角形、\circbox圆形和\diabox菱形。所有这些宏都有两个参数:第一个参数是0我们需要轮廓形状还是1需要实心形状。第二个参数是定义的颜色\def\nameCOLOR

\def\sqPDF#1#2{0 0 m #1 0 l #1 #1 l 0 #1 l h}
\def\trianPDF#1#2{0 0 m #1 0 l #2 4.5 l h}
\def\uptrianPDF#1#2{#2 0 m #1 4.5 l 0 4.5 l h}
\def\circPDF#1#2{#1 0 0 #1 #2 #2 cm .1 w .5 0 m
   .5 .276 .276 .5 0 .5 c -.276 .5 -.5 .276 -.5 0 c
   -.5 -.276 -.276 -.5 0 -.5 c .276 -.5 .5 -.276 .5 0 c h}
\def\diaPDF#1#2{#2 0 m #1 #2 l #2 #1 l 0 #2 l h}

\def\credCOLOR   {.54 .14 0}
\def\cblueCOLOR  {.06 .3 .54}
\def\cgreenCOLOR {0 .54 0}

\def\genbox#1#2#3#4#5#6{% #1=0/1, #2=color, #3=shape, #4=raise, #5=width, #6=width/2
    \leavevmode\raise#4bp\hbox to#5bp{\vrule height#5bp depth0bp width0bp
    \pdfliteral{q .5 w \csname #2COLOR\endcsname\space RG
                       \csname #3PDF\endcsname{#5}{#6} S Q
             \ifx1#1 q \csname #2COLOR\endcsname\space rg 
                       \csname #3PDF\endcsname{#5}{#6} f Q\fi}\hss}}

                                    % shape     raise width  width/2
\def\sqbox      #1#2{\genbox{#1}{#2}  {sq}       {0}   {4.5}  {2.25}}
\def\trianbox   #1#2{\genbox{#1}{#2}  {trian}    {0}   {5}    {2.5}}
\def\uptrianbox #1#2{\genbox{#1}{#2}  {uptrian}  {0}   {5}    {2.5}}
\def\circbox    #1#2{\genbox{#1}{#2}  {circ}     {0}   {5}    {2.5}}
\def\diabox     #1#2{\genbox{#1}{#2}  {dia}      {-.5} {6}    {3}}

%% usage:

squares: \sqbox0{cgreen}, \sqbox1{cred}, \sqbox0{cblue}.

triangles: \trianbox0{cgreen}, \trianbox1{cred}, \trianbox0{cblue}.

triangles: \uptrianbox0{cgreen}, \uptrianbox1{cred}, \uptrianbox0{cblue}.

circles: \circbox0{cgreen}, \circbox1{cred}, \circbox0{cblue}.

diamonds: \diabox0{cgreen}, \diabox1{cred}, \diabox0{cblue}.

结果:

形状

您不需要任何软件包。也不需要xcolor。所有工作都是在 PDF 低级命令中完成的。如果您使用的是 XeTeX(没有 pdfTeX),那么您需要\pdfliteral通过以下方式定义:

\def\pdfliteral#1{\special{pdf:literal #1}}

我在纯 TeX 中尝试过这个,但我希望代码也能在 LaTeX 中运行(添加\documentclass等序列之后)。

答案2

在此处输入图片描述

\documentclass{article}
\usepackage{MnSymbol,xcolor}
\begin{document}
    How about this?
    \rlap{\color{green}$\filledlargestar$}\color{red}$\largepentagram$
\end{document}

相关内容