查看我的文档的日志文件时,我看到很多成对的错误消息行,如下所示(可能存在轻微的不准确,由于原因我在另一台计算机上输入了此信息,我不会详细说明):
Missing character: There is no . in font nullfont!
Missing character: There is no 5 in font nullfont!
它们成对出现,总是一个是“。”,另一个是“5”,并且总是按此顺序出现。通常,它们会同时出现在一个地方。从其他问题中,我了解到,此错误消息通常发生在 tikzpicture 环境中输入无关文本(即既不是 TikZ 命令也不是 TeX 注释的文本)时。日志文件中出现这些错误的位置确实似乎与我的文档中找到 tikzpictures 的位置相对应。此外,它们的集合越大,通常似乎对应于更大的 tikzpictures(在更多 TikZ 代码的意义上)。但是,据我所知,我的 tikzpicture 环境中没有无关文本。在这个问题提问者在不知不觉中将两组以 - 分隔的选项放在同一个位置,从而导致了这种错误[]
,但我不认为这是这里发生的情况。
如果有帮助的话,我可以尝试在今天晚些时候整理一个示例文件。我说“尝试”是因为我不能确定我是否能够创建另一个足够小的文档来展示相同的行为(日志文件显示此问题的文档太大,无法在此处以内联方式发布,不太实际。)
更新
事实证明,这与另一位 TeX/LaTeX Stack Exchange 用户慷慨地为我编写的代码有关,以回应另一个问题我问道。因此,这有点令人尴尬,因为如果我指出别人免费给我的东西的缺陷(如果确实如此),我会显得有点不知感恩。但在我问这个问题之前,我并不知道出了什么问题。不过,我很想知道出了什么问题。
无论如何,如果您编译下面的示例文档(未经修改地取自 Qrrbrbirlbel 对链接问题的回答)并查看之后的日志,您将看到以下几行:
Missing character: There is no . in font nullfont!
Missing character: There is no 0 in font nullfont!
Missing character: There is no . in font nullfont!
Missing character: There is no 0 in font nullfont!
Missing character: There is no . in font nullfont!
Missing character: There is no 0 in font nullfont!
Missing character: There is no . in font nullfont!
Missing character: There is no 0 in font nullfont!
(为什么这次是 0 而不是 5?我不知道。)
\documentclass[tikz,border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\makeatletter
\tikzset{nomorepostaction/.code = \let\tikz@postactions\pgfutil@empty}
\def\pgf@arrowset#1#2{%
\pgfutil@ifundefined{pgf@arrow@code@#2}
{\PackageError{pgf}{Arrow #1 type ``#2'' unknown}{}}
{%
\edef\pgf@arrow@temp{#2}%
\ifx\pgf@arrow@temp\pgfutil@empty% ah. clear!
\expandafter\let\csname pgf@#1arrow\endcsname=\pgfutil@empty%
\expandafter\let\csname pgf@shorten@#1\endcsname=\pgfutil@empty%
\else%
%\pgf@arrow@prepare{#2}%
\expandafter\def\csname pgf@#1arrow\endcsname{\multiply\pgflinewidth by \pgflinewidth@arrow\relax\pgf@arrow@call{#2}}%
\expandafter\edef\csname pgf@shorten@#1\endcsname{\multiply\pgflinewidth by \noexpand\pgflinewidth@arrow\relax\expandafter\noexpand\csname pgf@arrow@right@#2\endcsname}%
\fi%
}%
}
\tikzset{
bigdiagramarrow/.style = {
-latex,
arrow thick
},
arrow line width/.code={
\pgfmathsetmacro\pgflinewidth@arrow{#1}
},
arrow line width=1,
arrow ultra thin/.style={arrow line width=0.25},
arrow very thin/.style={arrow line width=0.5},
arrow thin/.style={arrow line width=1},
arrow semithick/.style={arrow line width=1.5},
arrow thick/.style={arrow line width=2},
arrow very thick/.style={arrow line width=3},
arrow ultra thick/.style={arrow line width=4},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node [draw] (A) at (0, 0) {$A$};
\node [draw] (B) at (0, 1) {$B$};
\node [draw] (C) at (2, 1) {$C$};
\draw [bigdiagramarrow] (A) to (B);
\draw [out = 0, in = 180][bigdiagramarrow] (A) to (C);
\end{tikzpicture}
\end{document}
答案1
\multiply
测试您的示例后,这些警告似乎是代码中命令的结果。命令中的\pgf@arrowset
后面的表达式必须是整数。如果它扩展为十进制数,则和后面的数字将被视为文本。应进行以下更改:更改by
\multiply
.
\multiply\pgflinewidth by \pgflinewidth@arrow\relax
到
\pgflinewidth = \pgflinewidth@arrow \pgflinewidth \relax
和
\multiply\pgflinewidth by \noexpand\pgflinewidth@arrow\relax
到
\pgflinewidth = \noexpand\pgflinewidth@arrow \pgflinewidth \relax
这些函数利用了这样一个事实:一个维度(\pdflinewidth
在本例中)前面可以有一个因子(\pgflinewidth@arrow
在本例中存储在宏中),以实现乘法。我对 pgf 了解不多,所以我不能说这不会有其他问题。
答案2
如果你接受我的tikz 答案0.5pt
并在两个命令之间添加\draw
,您不会收到任何错误,并且输出看起来相同,但日志发出警告:
Missing character: There is no 0 in font nullfont!
Missing character: There is no . in font nullfont!
Missing character: There is no 5 in font nullfont!
Missing character: There is no p in font nullfont!
Missing character: There is no t in font nullfont!
如果你想看错误在哪里,你可以让\nullfont
字符添加
\font\nullfont=cmr10
然后您再次没有收到任何错误,但这次日志中没有警告,但输出非常混乱,您可以看到有问题的字符。
不要\nullfont
在生产代码中使用重新定义,而是在调试时将其作为临时重新定义,这样会很有用。