![创建 stackoverflow 标签时出现 tikz 错误?](https://linux22.com/image/258399/%E5%88%9B%E5%BB%BA%20stackoverflow%20%E6%A0%87%E7%AD%BE%E6%97%B6%E5%87%BA%E7%8E%B0%20tikz%20%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我仍在研究我的模板stackexchange 类似简历,我注意到如果我\LaTeX
在 Tikz 框内发出宏,它A
就会被修剪。
我的文档的标题包含:
\usetikzlibrary{shapes.geometric}
\newcommand{\tagf}[2][]{
{
\scalefont{0.8}
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\strut};
\end{tikzpicture}
}
}
我想要执行以下操作:
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Makefile}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{GCC}\hspace{-0.25cm}
\tagf[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{Python}\hspace{-0.25cm}
\LaTeX
\tagfb[blue!80, fill=blue!20, rounded corners, font=\fontsize{0.1}{.1}]{\LaTeX}\hspace{-0.25cm}
奇怪的结果是:
更新
我编写了一个完整的代码片段,它可以起作用:
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{scalefnt}
\usepackage{times} %if use this, the macro is broken.
%\usepackage{times} %commenting this lines out works
\usetikzlibrary{shapes.geometric}
\newcommand{\tagf}[2][]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\vphantom{y}};
\end{tikzpicture}
}
\newcommand{\tagfb}[2][]{%
\begin{tikzpicture}[baseline={(TAG.base)}]
\node[draw,#1] (TAG) {#2};
\node[font=\tiny,draw,#1] (TAG) {#2\strut};
\end{tikzpicture}
}
\tikzset{My Tag Style/.style={blue!80, fill=blue!20, rounded corners, , font=\fontsize{0.1}{.1}}}
\begin{document}
\foreach \x in {SAMBA, Red Hat, Windows, NFS, Python, Shell, \LaTeX, MySQL} {%
\tagf[My Tag Style]{\x}
}
\foreach \x in {SAMBA, Red Hat, Windows, NFS, Python, Shell, \LaTeX, MySQL} {%
\tagfb[My Tag Style]{\x}
}
\end{document}
最初的问题是:这是一个错误吗?如果不是,我该如何修复此行为?
更新的问题:
我认为这不是 100% 的错误,如果是的话,不确定它是否在 中Tikz
,也许在times
包中。那么,我怎样才能使标签具有正确的字体,而文档的其余部分具有 字体times
?
答案1
这与 TikZ 无关,而是与标签样式中一个相当奇怪的命令有关:\fontsize{0.1}{.1}
。这表示“下次选择字体时,将其设置为 大小.1pt
。”(第二个还有其他内容.1
- 我认为这与行大小有关)。\LaTeX
宏内部是一个\selectfont
命令(用于A
),它会拾取声明的字体大小。但是,正如你如果您没有调用\selectfont
自己,则L TEX
仍然设置为当前字体大小,因此可见。出现这种情况times
而不是没有这种情况的原因是,这times
是一种可缩放字体,但现代计算机(默认)最低为 8pt 左右,因此当times
被问及“将字体大小设置为 .1pt”时,它会这样做,但当被问及现代计算机时,它会说“不,我使用的是 8pt”。
下面的代码演示了这个问题(请注意,我pgffor
只使用循环,这里没有涉及 TikZ)。
\documentclass{article}
%\url{http://tex.stackexchange.com/q/82601/86}
\usepackage{pgffor}
\usepackage{times} %<-- comment out or not to see the difference
\begin{document}
\foreach \fnt in {1,2,...,16} {
\fnt:\fontsize{\fnt}{\fnt}\selectfont\LaTeX
}
\end{document}
经过时间计算的结果:
使用 CM 的结果: