TikZ 中的地图标记符号(带有 em 和 ex 单位的符号无法正确缩放)

TikZ 中的地图标记符号(带有 em 和 ex 单位的符号无法正确缩放)

由于符号列表中没有地图标记符号(至少我找不到它),我决定用 TikZ 绘制它。就是这样:

\documentclass{article}
\usepackage{tikz}
    \newcommand{\point}{\tikz{
       \draw [rounded corners,blue, fill=blue](0,0) .. controls (-.05em,.2ex) and (-.3em,1.2ex) .. (0em,2.2ex) .. controls (.3em,1.2ex) and (.05em,.2ex) .. (0,0);
       \draw [blue,fill=white](0,1.15ex) circle (0.12em);}
}
\begin{document}
\tiny tiny \point text

\normalsize normal \point text

\Huge huge \point text
\end{document}

问题是,如果我更改字体大小,它就无法正确缩放,例如{\Large text \point text}

扩展问题

我是否需要为使用的每种尺寸绘制不同的符号,或者有没有办法让它正确缩放?

答案1

问题在于rounded corners部分,它与字体大小无关。因此解决方案是设置rounded corners=<x>ex,然后它取决于字体大小。以下示例展示了一个解决方案,并用简单的角说明了该问题:\cornerI以绝对相同的半径进行圆角处理,而\cornerII以与字体大小成比例的半径进行圆角处理。

\documentclass{article}

\usepackage{tikz}

\newcommand{\point}{\tikz{
    \filldraw [rounded corners=0.6ex,blue] (0,0)
        .. controls (-.05em,.2ex) and (-.3em,1.2ex)
        .. (0em,2.2ex) .. controls (.3em,1.2ex) and (.05em,.2ex) .. (0,0);
    \draw [blue,fill=white](0,1.15ex) circle (0.12em);
}}

\newcommand{\cornerI}{\tikz{
    \draw [rounded corners] (0,0) -| (2ex,2ex);
}}
\newcommand{\cornerII}{\tikz{
    \draw [rounded corners=0.6ex] (0,0) -| (-2ex,2ex);
}}

\begin{document}
\tiny text \point\ text \cornerI\,\cornerII

\normalsize text \point\ text \cornerI\,\cornerII

\Huge text \point\ text \cornerI\,\cornerII
\end{document}

圆角


em此外,混合使用和并不是一个好主意,ex因为它们的缩放方式不同。请看以下示例:非常\Square适合\Huge但不适合较小的尺寸。

正方形

原因是 1em/1ex 的比例对于所有字体大小来说并不相同……

字体大小

…甚至它还取决于字体本身。

字体系列

\documentclass[fleqn]{article}
\usepackage{tikz,parskip}


\makeatletter
\newlength{\tmpa}
\newlength{\tmpb}
\newlength{\tmpc}
\newcommand{\EmExTest}[2][Computer Modern]{{%
   #2%
   \setlength{\tmpa}{1em}%
   \setlength{\tmpb}{1ex}%
   \pgfmathsetmacro\tmpc{\tmpb/\tmpa}%
   \normalsize#1 at \textbackslash\expandafter\@gobble\string#2:
   \[
      \frac{1\,\mathrm{ex}}{1\,\mathrm{em}}
      = \frac{\strip@pt\tmpb\,\mathrm{pt}}{\strip@pt\tmpa\,\mathrm{pt}}
      = \tmpc
   \]\par
}}
\makeatother

\newcommand{\Square}{\tikz{
    \fill (0,0) rectangle (10em,21.31ex);
}}

\begin{document}
\EmExTest{\tiny}
\EmExTest{\normalsize}
\EmExTest{\Huge}

\tiny \Square\quad
\normalsize \Square\quad
\Huge \Square

\EmExTest{\normalsize}% Computer Modern
\EmExTest[Palatino]{\normalsize\fontfamily{pxr}\selectfont}
\EmExTest[Helvetica]{\normalsize\fontfamily{phv}\selectfont}
\end{document}

相关内容