创建 stackoverflow 标签时出现 tikz 错误?

创建 stackoverflow 标签时出现 tikz 错误?

我仍在研究我的模板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}

奇怪的结果是:

Latex trimmed

更新

我编写了一个完整的代码片段,它可以起作用:

\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

enter image description here

答案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}

经过时间计算的结果:

scaled font with times

使用 CM 的结果:

computer modern version

相关内容