我正在修改我的徽标,以便文本序列的第一个字母和最后一个字母之间的距离不那么窄。另外,我想替换 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
- 为了分隔文本的开始和结束字符,您可以
{\ }
在末尾插入“强制”空格(即:)。 - 要“加粗”线条和文本,不能使用
\scalebox
。这将缩放图形的整个尺寸,从而保留线条宽度和图形宽度之间的比率,因此从视觉上看它们看起来相同。
也许您想要的方法是,首先使用 tikz 缩小 tikz 图片的尺寸scale
(这将缩小尺寸而不影响线宽和文本,因此使其相对“更粗”),然后使用 放大整个 tikzpicture \scalebox
。这种方法可以奏效,但在这种情况下,您的图形依赖于几个“硬编码”距离,这使得这种方法不可行。此外,如果您缩小 tikz 图片的尺寸,文本会太长而无法放入圆圈中。
因此,使图形更粗的另一种方法是:
- 用于
\bfseries
文本 - 例如,使用
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] ;
要得到:
更新
问题的根源不是字体切换,正如我最初所想的那样。正如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}