我想通过将每个字符放在一个节点中并将它们相邻放置来“粘合” TikZ 中的单个字符。但是即使有和,inner sep=0
仍然outer sep=0
会留有一个空格。
以下 MWE 产生了这种情况:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\framebox{%
\begin{tikzpicture}[inner sep=0,outer sep=0]
\node (k) at (0,0) {K};
\node[anchor=north west] (n) at (k.north east) {N};
\end{tikzpicture}%
}
\end{document}
结果如附件所示:一个黑色的框,里面有一个空格,然后里面K
和N
旁边都有一个空格。
我希望K
和N
彼此粘在一起以便它们接触(就像将它们裁剪为字母的黑色部分一样),然后框架K
从N
各个侧面接触。
答案1
没有通用的方法来解决这个问题:每个字形的边界框由字体本身决定,TeX 无法改变它。(TeX 直接使用字形的边界框,而不关心“墨水”在框内 [或框外!] 的分布位置。)
TikZ 或普通的运行文本也存在同样的问题。解决该问题的唯一方法是使用手动字距调整或手动移位,这两者都取决于字体和字形设计。
em
通过使用相对单位(宽度和ex
高度),可以获得某种程度的通用性,但即使这样也不是完全完美的,因为字形在不同的点大小下可能具有不同的相对大小/形状。
一个说明性示例,字形周围有细线框:
\documentclass{article}
\usepackage{tikz}
\tikzset{every node/.style={inner sep=0,outer sep=0,draw,line width=1sp}}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{1sp}
\begin{document}
\begin{tikzpicture}
\node (k) at (0,0) {K};
\node[anchor=north west] (n) at (k.north east) {N};
\end{tikzpicture}
Ti\emph{k}Z, standard
\fbox{K}\fbox{N}
\TeX, standard
\begin{tikzpicture}
\node (k) at (0,0) {K};
\node[anchor=north west,xshift=-0.089em] (n) at (k.north east) {N};
\end{tikzpicture}
Ti\emph{k}Z, shifted
\fbox{K}\kern-0.089em\fbox{N}
\TeX, kerned
\end{document}
答案2
这只是使用库在 TiKZ 图片中绘制框架的另一种方法fit
,而不是使用\framebox{}
或\fbox{}
。它毫不掩饰地窃取了两个字母之间所需的调整Paul Gessler 的回答。如果您愿意,您显然可以进行进一步的调整,以消除字母与框架左侧和右侧之间的微小距离。然而,正如 Paul Gessler 所解释的那样,这必须根据具体情况手动完成。(例如,与框架右侧N
线的距离比与K
左侧线的距离略远。)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[inner sep=0pt, outer sep=0pt]
\node (k) at (0,0) {K};
\node[anchor=north west,xshift=-0.089em] (n) at (k.north east) {N};
\node [fit=(k) (n), draw=gray, ultra thin] {};
\end{tikzpicture}
\end{document}
答案3
使用 xshift
\documentclass{article}
\usepackage{tikz}
\begin{document}
\framebox{%
\begin{tikzpicture}[inner sep=0,outer sep=0]
\node (k) at (0,0) {K};
\node[anchor=north] (n) at (k.north east) {N};
\end{tikzpicture}%
}
\framebox{%
\begin{tikzpicture}[inner sep=0,outer sep=0]
\node (k) at (0,0) {K};
\node[anchor=north,xshift=2pt] (n) at (k.north east) {N};
\end{tikzpicture}%
}
\end{document}