TikZ 绘制命令错误,出现两个破折号并产生令人困惑的结果

TikZ 绘制命令错误,出现两个破折号并产生令人困惑的结果

我在我的 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 或 Adob​​e 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

相关内容