![具有多种形状的 TikZ 节点](https://linux22.com/image/246779/%E5%85%B7%E6%9C%89%E5%A4%9A%E7%A7%8D%E5%BD%A2%E7%8A%B6%E7%9A%84%20TikZ%20%E8%8A%82%E7%82%B9.png)
我的用例是绘制一个与普通文本对齐的勾选框,例如:“Hello ☒ World。”(unicode 示例,您的里程可能会有所不同)。我想出的一个解决方案是以下相当冗长的表达式。
Hello \tikz{
\node[draw,rectangle,minimum size=1.5ex] {};
\node[draw,cross out,minimum size=1.5ex] {};
} World.
有没有更优雅的方式来描述这张图片,例如将两个形状叠加在一个节点上?
或者,是否存在cross out
类似于的路径操作rectangle
,允许类似下面的操作?
\tikz \draw rectangle (1.5ex,1.5ex) cross out (0,0);
(注意:这个问题主要是美学和学术性质的,因为第一个例子确实按预期工作。)
澄清:这是一次性的,所以创建新的命令不是我想要的(感谢彼得)。
答案1
关于这个问题和我的答案的一些解释:一个节点只有一个形状,因此要修改与节点相关联的形状,您可以定义一个新形状,\pgfdeclareshape
例如,可以组合两个定义的形状,另一种解决方案是修改使用的形状。在下一个代码中,我在矩形中添加了两条线。可以使用该选项执行此操作path picture
。使用此选项,可以使用边界框的一些锚点,但其他解决方案也是可能的。
\documentclass{article}
\usepackage{tikz}
\tikzset{squarecross/.style={draw,path picture={%
\draw[black]
(path picture bounding box.north west) -- (path picture bounding box.south east)
(path picture bounding box.south west) -- (path picture bounding box.north east);
}}}
\begin{document}
Hello \tikz \node[squarecross] (mynode) {}; World.
\end{document}
答案2
不确定这是否更好,但你可以画出这个形状:
\documentclass{article}
\usepackage{tikz}
\newcommand{\CrossOut}{%
\tikz [x=1.5ex,y=1.5ex]
\draw (0,0) -- (1,0) -- (1,1) -- (0,1) -- cycle
(0,0) -- (1,1)
(0,1) -- (1,0)
;
}%
\begin{document}
Hello \CrossOut World.
\end{document}
答案3
非 Tikz 解决方案,使用包\XBox
中的符号wasysym
,我认为这更优雅。
\documentclass{article}
\usepackage{wasysym}
\begin{document}
\CheckedBox \Square \Huge \XBox
\end{document}
非 Tikz 解决方案的优点是符号可以根据字体大小缩放并且更加简单。
答案4
还有一个:
\documentclass{article}
\usepackage{amssymb}
\begin{document}
Hello $\boxtimes$ Word
\end{document}
不含软件包的小写版本:
\documentclass{article}
\def\BoxedTimes{\fboxrule=.04em\fboxsep=-0.11em\fbox{\makebox[.725em]{$\times$}}}
\begin{document}
Hello \BoxedTimes{} Word
\end{document}