如何自动缩放和对齐 /tikzpicture 字体大小

如何自动缩放和对齐 /tikzpicture 字体大小

我用 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) {};}}

TikZ 图标

现在它终于看起来符合预期,但整个过程相当繁琐,必须为每种字体大小和新图标重复。因此,我真的很想知道是否有可能

  • 自动将 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)。

但请注意,缩放 TiZ 环境仅缩放坐标系。如果您还需要缩放节点和/或线宽等,则需要另外使用选项transform shapetransform 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}

在此处输入图片描述

相关内容