编辑

编辑

我正在修改我的徽标,以便文本序列的第一个字母和最后一个字母之间的距离不那么窄。另外,我想替换 scalebox 命令,以便我们在图形和文本中都使用粗体。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{amsmath,  latexsym, amscd, amsthm}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric,calc}
\tikzset{my polygon/.style={regular polygon,regular polygon sides=#1,minimum size=4cm}}
\usepackage{tikz}         % altermundus.com/pages/tkz/tikzrput/
\usetikzlibrary{decorations,decorations.text}  % altermundus.com/pages/tkz/ornament/ 


\newcommand{\gear}[5]{%
\foreach \i in {1,...,#1} {%
  [rotate=(\i-1)*360/#1]  (0:#2)  arc (0:#4:#2) {[rounded corners=1.5pt]
             -- (#4+#5:#3)  arc (#4+#5:360/#1-#5:#3)} --  (360/#1:#2)
}}  

\usepackage{libertineotf}


\begin{document}


  \scalebox{.4}{
\begin{tikzpicture}[color=black, ultra thick]
\node[my polygon=6,draw,outer sep=0] (a){};
\foreach \x[remember=\x as \xp (initially 6)] in {1,...,6}{
\draw[] (a.corner \xp)
      ..controls ++(60*\x:2cm) ..
        ([shift={({60*(\x+1)+7.35}:1.55cm)}]a.corner \x); % This part needs tweaking for a 
                                                       % nice blend (or a derivative I think).
}

;
\draw \gear{16}{5}{5.2}{10}{2};

\path 
    [rotate=190,postaction={decoration={text along path,text format delimiters={|}{|}, text={|\huge|HEXAGON OF MATHEMATICS AND SCIENCE},
      text align=fit to path,reverse path}, decorate}]
     circle[radius=4.08742cm] ; 

\end{tikzpicture}}

\end{document}

答案1

  1. 为了分隔文本的开始和结束字符,您可以{\ }在末尾插入“强制”空格(即:)。
  2. 要“加粗”线条和文本,不能使用\scalebox。这将缩放图形的整个尺寸,从而保留线条宽度和图形宽度之间的比率,因此从视觉上看它们看起来相同。

也许您想要的方法是,首先使用 tikz 缩小 tikz 图片的尺寸scale(这将缩小尺寸而不影响线宽和文本,因此使其相对“更粗”),然后使用 放大整个 tikzpicture \scalebox。这种方法可以奏效,但在这种情况下,您的图形依赖于几个“硬编码”距离,这使得这种方法不可行。此外,如果您缩小 tikz 图片的尺寸,文本会太长而无法放入圆圈中。

因此,使图形更粗的另一种方法是:

  1. 用于\bfseries文本
  2. 例如,使用line width=2mm() 表示线条。请注意,您还必须设置line cap=round,以使齿轮处的线条接头更加平滑。

使用这些方法的结果是:

结果

代码如下:

\documentclass[12pt]{standalone}
\usepackage{amsmath,  latexsym, amscd, amsthm}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric,calc}
\tikzset{my polygon/.style={regular polygon,regular polygon sides=#1,minimum size=4cm}}
\usepackage{tikz}         % altermundus.com/pages/tkz/tikzrput/
\usetikzlibrary{decorations,decorations.text}  % altermundus.com/pages/tkz/ornament/ 


\newcommand{\gear}[5]{%
\foreach \i in {1,...,#1} {%
  [rotate=(\i-1)*360/#1]  (0:#2)  arc (0:#4:#2) {[rounded corners=1.5pt]
             -- (#4+#5:#3)  arc (#4+#5:360/#1-#5:#3)} --  (360/#1:#2)
}}  

\usepackage{libertineotf}


\begin{document}


\begin{tikzpicture}[color=black, line width=2mm, line cap=round]
\node[my polygon=6,draw,outer sep=0] (a){};
\foreach \x[remember=\x as \xp (initially 6)] in {1,...,6}{
\draw[] (a.corner \xp)
      ..controls ++(60*\x:2cm) ..
        ([shift={({60*(\x+1)+7.35}:1.55cm)}]a.corner \x); % This part needs tweaking for a 
                                                       % nice blend (or a derivative I think).
};
\draw \gear{16}{5}{5.2}{10}{2};
\path 
    [rotate=190,postaction={decoration={text along path,text format delimiters={|}{|}, text={|\huge\bfseries|\ HEXAGON OF MATHEMATICS AND SCIENCE\ },
      text align=fit to path,reverse path}, decorate}]
     circle[radius=4.08742cm] ; 
\end{tikzpicture}

\end{document}

如果文本不够粗,您必须使用小字体,但随后您必须调整周长(通过缩放图形)以便文本仍然填充它。

编辑

OP 后来在评论中问道:

我想在两个点内添加 SINCE 2009。该怎么做?

问题是你不能在装饰文本中切换到数学字体(也许你不能切换到任何字体,我不确定)。

因此,如果您尝试使用$\bullet$$\cdot$,编译器就会挂起。我也尝试了\textbullet,但我猜想这个宏在内部也尝试切换到数学字体,从而导致同样的挂起。

但是,由于您使用的libertineotf包包含多个 Unicode 字形,并且需要 (xe|lua)tex 进行编译,该包使用 utf-8 编码输入,因此您可以直接使用字符·(U+00B7,居中点) 作为文本的一部分。此字符不会导致字体切换,因为它包含在 libertine 字体中,因此它可以工作。您还可以使用字符(U+2022,项目符号),它也可以工作。如果您的键盘没有这些字符,如何输入这些字符取决于您的编辑器。例如,在 vim 中,您必须按Ctrl-V,然后u00b7按 o u2022。您也可以从此消息或任何其他网页复制并粘贴它们。

因此,在您的源代码中您将拥有:

% In the preamble
\def\mydot{•}  % This is U+2022

 % ...
 % Later ...
 \path 
    [rotate=190,postaction={decoration={text along path,text format delimiters={|}{|}, 
       text={|\huge|\ HEXAGON OF MATHEMATICS AND SCIENCE \mydot\ SINCE 2009 \mydot\ },
       text align=fit to path,reverse path}, decorate}]
    circle[radius=4.08742cm] ;

要得到:

结果2

更新

问题的根源不是字体切换,正如我最初所想的那样。正如Tikz 装饰文字中的数学有错误吗?问题在于沿路径解析文本,这限制了可以使用的数学表达式的类型。特别是,它们必须用括号括起来。因此,\mydot使用实际数学符号的替代定义将是:

\def\mydot{{$\bullet$}}

我已经测试过了并且它有效。

答案2

\只需在文本的开头和结尾添加一对 s 即可。奇怪的是\quad\hskip2mm诸如此类的事情会导致编译挂起。

\documentclass[12pt]{article}
\usepackage{amsmath, latexsym, amscd, amsthm}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric,calc}
\tikzset{my polygon/.style={regular polygon,regular polygon sides=#1,minimum size=4cm}}
\usepackage{tikz} % altermundus.com/pages/tkz/tikzrput/
\usetikzlibrary{decorations,decorations.text} % altermundus.com/pages/tkz/ornament/


\newcommand{\gear}[5]{%
\foreach \i in {1,...,#1} {%
  [rotate=(\i-1)*360/#1] (0:#2) arc (0:#4:#2) {[rounded corners=1.5pt]
             -- (#4+#5:#3) arc (#4+#5:360/#1-#5:#3)} -- (360/#1:#2)
}}

\usepackage{libertineotf}


\begin{document}


  \scalebox{.4}{
\begin{tikzpicture}[color=black, ultra thick]
\node[my polygon=6,draw,outer sep=0] (a){};
\foreach \x[remember=\x as \xp (initially 6)] in {1,...,6}{
\draw[] (a.corner \xp)
      ..controls ++(60*\x:2cm) ..
        ([shift={({60*(\x+1)+7.35}:1.55cm)}]a.corner \x); % This part needs tweaking for a
                                                       % nice blend (or a derivative I think).
}

;
\draw \gear{16}{5}{5.2}{10}{2};

\path
    [rotate=190,postaction={decoration={text along path,text format delimiters={|}{|}, text={|\huge|\ HEXAGON OF MATHEMATICS AND SCIENCE\ },
      text align=fit to path,reverse path}, decorate}]
     circle[radius=4.08742cm] ;

\end{tikzpicture}}

\end{document} 

在此处输入图片描述

相关内容