我在我的 TikZ 代码中犯了一个愚蠢的错误并修复了它,但我仍然不知道为什么,所以我会在这里发布我的问题。
首先假设我生成了像这样带有箭头的背景的东西。
\documentclass[border={10mm}]{standalone}
\usepackage[american,siunitx,RPvoltages]{circuitikz}
\usetikzlibrary {shapes.misc}
\usetikzlibrary{decorations.markings, arrows.meta}
\usetikzlibrary{backgrounds}
\usetikzlibrary {shadows,shapes.symbols}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}[
]
\begin{scope}[on background layer, very thick ]
\draw[ultra thick, red!50, -{Stealth[scale=0.8]}] --(1,0) -- ( 3,0) ;
\end{scope}
\end{tikzpicture}
\end{document}
(1,0)
请注意,我在as前添加了两个破折号,这是一个错误--(1,0)
。但是,在 Overleaf 上编译仍然正常,没有错误,并且箭头在 Overleaf PDF 面板上看起来不错。
但是,如果你将其保存为 PDF 并使用 PDF 阅读器(例如 Forxit Reader 或 Adobe Acrobat Reader)打开它,你会发现箭头显示不正确。我实际上不知道为什么。
更令人困惑的是,如果你将上面的 PDF 保存为arrow.pdf
(只有箭头的箭头)并将其包含在如下所示的文档中,编译仍然正常,并且 Overleaf 面板上的箭头 PDF 看起来不错。但如果你再次下载 PDF,你仍然会看到箭头显示不正确。
\documentclass{article}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\begin{document}
\includegraphics[]{arrow.pdf}
\end{document}
答案1
我稍微简化了你的例子
\ExplSyntaxOn
\sys_ensure_backend:
\pdf_uncompress:
\ExplSyntaxOff
\documentclass[border={10mm},tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[ultra thick, red!50,->] -- (1,0) -- ( 3,0) ; %or (1,0)--(3,0)
\end{tikzpicture}
\end{document}
如果分别编译带有和不带有错误破折号的 PDF,然后比较 PDF,那么唯一的区别是在路径构造的开始处,错误的 PDF 使用了l
而不是m
运算符:
使用破折号:
1.0 0.5 0.5 rg 1.0 0.5 0.5 RG
28.3468 0.0 l
83.83492 0.0 l
没有破折号
1.0 0.5 0.5 rg 1.0 0.5 0.5 RG
28.3468 0.0 m
83.83492 0.0 l
根据 PDF 规范,子路径必须以m
或开头re
:
路径构造运算符可以按任意顺序调用,但第一个调用的必须是 m 或 re 才能开始新的子路径。
因此,Adobe Reader 会忽略子路径(在两种情况下,带有箭头的下一个子路径都有一个m
),但看起来 overleaf 的 PDF 查看器并不那么严格,并且l
像处理一样处理它m
。