我曾经使用过TikzEdt
它来生成一些图表用于我的论文。但是,当我通过复制粘贴/\输入在主文档中,under a figure environment
我的文档花了很长时间进行编译,没有任何错误,并且在我取消编译后产生了损坏的 PDF 输出文件。
就我而言,我在序言中拥有所有必要的包,并且在检查了从中导出的代码后,我已经生成了一个最小的工作示例TikzEdt
。
非编译文件很大,所以驱动文件这里, 这类文件是一个经过修改的书籍类,并且包含宏都是基本的。
此外,还TikzEdt
抱怨以下带有消息的行:“无法解析代码。第 16 行第 44 位置出现 NoViableAltException。是否缺少某个 \end{} 命令?“。编译 MWE 是这里。
\draw[<->, thick] (-1,0)++({\ang+90}:1) --++ (\ang:{2*cos(\ang)});
编辑
问题已解决,问题出在我使用的\ang
包中定义的内部宏上siunitx
。TikzEdt 解析器仍然抱怨,但我不知道这是否是一个真正的问题。
答案1
嗯,显然,您需要一个\begin{document}
,但除此之外,转换为包含图片的常规文档后,它也能正常工作figure
。
\documentclass{article}
\usepackage{tikz,amsmath, amssymb,bm,color}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{decorations.markings,math}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}
\center
\begin{tikzpicture}
\tikzmath{\ang = 45;};
\begin{scope}[thick,decoration={
markings,
mark=at position 0.5 with {\arrow{latex}}}
]
\filldraw[red] (-1,0) circle (2pt)
node[anchor=east, font = \footnotesize] at (-1,-0.2) {$\mathrm{E_0}$};
\draw[dashed, red] (-1,0) --++({\ang+90}:1);
\filldraw[green] (1,0) circle (2pt)
node[anchor=west, font = \footnotesize] at (1,-0.2) {$\mathrm{E_0}$};
\draw[postaction={decorate}, red] (-1,0) --++ (\ang:2);
\draw[postaction={decorate}, green] (1,0) --++ (\ang:2);
\draw[<->, thick] (-1, -0.2) -- (1, -0.2);
\draw[dashed, green] (1,0) --++ ({\ang+90}:2.5);
\draw[<->, thick] (-1,0)++({\ang+90}:1) --++ (\ang:{2*cos(\ang)});
% \draw[<->, thick] (-1,0)++({\ang+90}:1) --++ (\ang:{2*cos(\ang) });
\node[anchor=north, font = \footnotesize] at (0, -0.2) {d=$\lambda/2$};
\end{scope}
\draw[blue, thick, dash pattern= on 25 off 7 on 50 off 7 on 10] (-2,0) -- (2, 0);
\node[anchor=west, font = \footnotesize, blue] at (1.5,-0.05) {z}; node[near start, auto] {true}
\draw[thick,blue,->] ([shift=(0:1)]1,0) arc (0:\ang:1);
% \draw[thick,blue,->] (2,0) arc (0:\ang:1);
\draw (1,0)++({\ang/2}:1.2) node[rotate=\ang, anchor=base, blue, font=\normalsize]{$\theta$};
\draw ({\ang+90}:1.3) node[rotate=\ang, anchor=base, black, font=\normalsize]{$d\cos\theta$};
\end{tikzpicture}
\caption{Picture}
\end{figure}
\end{document}
可能我不明白这个问题。
编辑
添加siunitx
会产生错误,但我不知道这是否是您的错误。具体xparse
抱怨的\ang
是无法扩展。这是因为当前代码调用了\ang
,它不再是未分配的宏名。因此它试图扩展\ang
到其定义,但不能。(而且,如果可以,结果也不会好。)
解决方案是使用新名称,例如\myangle
。
\documentclass{article}
\usepackage{tikz,amsmath,amssymb,bm}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{decorations.markings,math}
\usetikzlibrary{calc}
\usepackage{siunitx}
\begin{document}
\begin{figure}
\center
\begin{tikzpicture}
\tikzmath{\myangle = 45;};
\begin{scope}[thick,decoration={
markings,
mark=at position 0.5 with {\arrow{latex}}}
]
\filldraw[red] (-1,0) circle (2pt)
node[anchor=east, font = \footnotesize] at (-1,-0.2) {$\mathrm{E_0}$};
\draw[dashed, red] (-1,0) --++({\myangle+90}:1);
\filldraw[green] (1,0) circle (2pt)
node[anchor=west, font = \footnotesize] at (1,-0.2) {$\mathrm{E_0}$};
\draw[postaction={decorate}, red] (-1,0) --++ (\myangle:2);
\draw[postaction={decorate}, green] (1,0) --++ (\myangle:2);
\draw[<->, thick] (-1, -0.2) -- (1, -0.2);
\draw[dashed, green] (1,0) --++ ({\myangle+90}:2.5);
\draw[<->, thick] (-1,0)++({\myangle+90}:1) --++ (\myangle:{2*cos(\myangle)});
% \draw[<->, thick] (-1,0)++({\myangle+90}:1) --++ (\myangle:{2*cos(\myangle) });
\node[anchor=north, font = \footnotesize] at (0, -0.2) {d=$\lambda/2$};
\end{scope}
\draw[blue, thick, dash pattern= on 25 off 7 on 50 off 7 on 10] (-2,0) -- (2, 0);
\node[anchor=west, font = \footnotesize, blue] at (1.5,-0.05) {z}; node[near start, auto] {true}
\draw[thick,blue,->] ([shift=(0:1)]1,0) arc (0:\myangle:1);
% \draw[thick,blue,->] (2,0) arc (0:\myangle:1);
\draw (1,0)++({\myangle/2}:1.2) node[rotate=\myangle, anchor=base, blue, font=\normalsize]{$\theta$};
\draw ({\myangle+90}:1.3) node[rotate=\myangle, anchor=base, black, font=\normalsize]{$d\cos\theta$};
\end{tikzpicture}
\caption{Picture}
\end{figure}
\end{document}
编译为上面显示的输出。