![TikZ 节点中的打字机](https://linux22.com/image/275133/TikZ%20%E8%8A%82%E7%82%B9%E4%B8%AD%E7%9A%84%E6%89%93%E5%AD%97%E6%9C%BA.png)
一个小例子:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{\node[text width=1cm]{\tt totot\\t t t};}
\tikz{\node{\parbox{1cm}{\tt totot\\t t t}};}
\end{document}
如您所见,第一个 TikZ 节点不遵循对齐,但在 中却遵循对齐\parbox
。这是 TikZ 的一个错误吗?为什么会有差异?
答案1
由于某些我无法真正理解的原因,在\node
参数中\spaceskip
和\xspaceskip
被设置为非零值;当\spaceskip
非零时,TeX 将其用于单词间空间,而不是当前字体信息中存储的默认值。
尝试以下示例
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{\node[text width=3cm]{\ttfamily
totot\\
t t t\\
\the\spaceskip\ \the\xspaceskip\\
\spaceskip=0pt totot\\t t t};}
\end{document}
并看到该设置\spaceskip=0pt
可以解决问题。
要设置的选项是text badly ragged
(显然 TikZ 不喜欢正常的参差不齐,并且在调用时将 LaTeX 定义也添加到 Plain TeX 中,text ragged
这是默认值)。
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\node[text width=1cm,font=\ttfamily,text badly ragged]{totot\\t t t};
\node[font=\ttfamily] at (1.5,0){\parbox{1cm}{totot\\t t t}};
\end{tikzpicture}
\end{document}
如果 TikZ 中不存在用于决定的选项\spaceskip
,则应该存在。
答案2
在parbox
中文本对齐,在node
中文textwidth
本对齐raggedright
。您可以在 内对齐文本node
。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{ragged2e}
\begin{document}
\tikz{\node[text width=1cm]{\justifying\tt totot\\t t t};}
\tikz{\node{\parbox{1cm}{\tt totot\\t t t}};}
\end{document}
因此,在我看来这不是一个错误。
不相关,但您可以考虑使用\ttfamily
而不是两个字母\tt
。