![无需 tikz 即可创建圆形、旋转正方形和三角形等形状](https://linux22.com/image/303033/%E6%97%A0%E9%9C%80%20tikz%20%E5%8D%B3%E5%8F%AF%E5%88%9B%E5%BB%BA%E5%9C%86%E5%BD%A2%E3%80%81%E6%97%8B%E8%BD%AC%E6%AD%A3%E6%96%B9%E5%BD%A2%E5%92%8C%E4%B8%89%E8%A7%92%E5%BD%A2%E7%AD%89%E5%BD%A2%E7%8A%B6.png)
在上一篇文章中,我获得了有关创建带有黑色边框和自定义填充的框的帮助。
如何使用自定义填充创建其他形状,如三角形、圆形、旋转正方形等。
我现在不想使用 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}