我用 TikZ 创建了一些符号(其中一些使用了shapes.geometric
)以在文本中使用,例如这个:
\newcommand{\kttriangle}{\tikz{\node[regular polygon, regular polygon sides=3, draw, fill=black] at (0,0) {};}}
但是,它太大了所以我把它缩小了:
\newcommand{\kttriangle}{\tikz{\node[regular polygon, regular polygon sides=3, draw, fill=black, scale=0.55] at (0,0) {};}}
缩放版本的垂直对齐看起来不太好,因此我也对其进行了调整:
\newcommand{\kttriangle}{\tikz[baseline=-2.5]{\node[regular polygon, regular polygon sides=3, draw, fill=black, scale=0.55] at (0,0) {};}}
现在它终于看起来符合预期,但整个过程相当繁琐,必须为每种字体大小和新图标重复。因此,我真的很想知道是否有可能
- 自动将 tikzpicture 缩放到周围的字体大小
- 自动调整基线/垂直对齐以适应周围的字体?
答案1
我的建议是不要用节点形状来绘制这样一个简单的符号,因为 Ti钾在任何情况下,Z 节点都不会随坐标系缩放。
相反,我只需使用以 em 为单位的坐标来绘制三角形,em 是一个随字体大小缩放的单位:
\documentclass{article}
\usepackage{tikz}
\newcommand{\kttriangle}{%
\tikz{
\fill (0:0em) -- (0:0.8em) -- (60:0.8em) -- cycle;
}%
}
\begin{document}
{ \Huge Foo \kttriangle{} bar }
{ Foo \kttriangle{} bar }
{ \footnotesize Foo \kttriangle{} bar }
\end{document}
如果您想使用节点,可以使用相同的逻辑。您需要确保节点形状正好是 1em(或以 em 为单位的其他值)高。因此,您应该将其设置inner sep
为 0pt,并将其设置minimum height
为 1em。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\newcommand{\kttriangle}{%
\tikz{
\node[fill, regular polygon, regular polygon sides=3,
minimum height=0.9em, inner sep=0pt] at (0,0) {};
}%
}
\begin{document}
{ \Huge Foo \kttriangle{} bar }
{ Foo \kttriangle{} bar }
{ \footnotesize Foo \kttriangle{} bar }
\end{document}
最后,虽然我不建议这样做,但你能使用scale
选项,但要使其工作,您需要计算缩放因子。您可以通过将当前长度 1em 除以 1cm(这是 Ti 中的默认单位)来执行此操作钾Z)。
但请注意,缩放 Ti钾Z 环境仅缩放坐标系。如果您还需要缩放节点和/或线宽等,则需要另外使用选项transform shape
或transform canvas
。
\documentclass{article}
\usepackage{tikz}
\newlength{\emunit}
\newcommand{\kticon}{%
\setlength{\emunit}{1em}%
\pgfmathsetmacro{\ktscale}{\the\emunit/1cm}%
\tikz[scale={\ktscale}]{
\draw[fill] (0,0) rectangle (0.8,0.8);
}%
}
\begin{document}
{ \Huge Foo \kticon{} bar }
{ Foo \kticon{} bar }
{ \footnotesize Foo \kticon{} bar }
\end{document}