我正在尝试使用 TikZ 绘制一些费曼图。我需要多次使用的对象是下图中的对象。但根据具体情况,我想以图片中的两种方式之一呈现它(作为“x”或“十字”)
我绘制了如下的 x 版本。我知道我可以以同样的方式绘制十字版本,手动更改所有坐标,但我想知道是否有办法将所有坐标旋转 45° 以自动完成。
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-feynman}
\tikzfeynmanset{compat=1.1.0}
\usetikzlibrary{shapes,arrows,positioning,automata,backgrounds,calc,er,patterns,positioning,quotes}
\begin{document}
\begin{tikzpicture}
\coordinate (A1) at (-1,2);
\coordinate (A2) at (0,1);
\coordinate (A3) at (1,2);
\coordinate (A4) at (2,1);
\coordinate (A5) at (1,0);
\coordinate (A6) at (2,-1);
\coordinate (A7) at (1,-2);
\coordinate (A8) at (0,-1);
\coordinate (A9) at (-1,-2);
\coordinate (A10) at (-2,-1);
\coordinate (A11) at (-1,0);
\coordinate (A12) at (-2,1);
\draw (A1) -- (A2) -- (A3);
\draw (A4) -- (A5) -- (A6);
\draw (A7) -- (A8) -- (A9);
\draw (A10) -- (A11) -- (A12);
\end{tikzpicture}
\end{document}
编辑:关于添加 [rotate=45] 的建议,当只有一个“x”存在时,它确实有效。我应该提到,我想要绘制的一些图表有两个并排的“x”。在这种情况下,添加 [rotate=45] 会使它们不并排,而是一个在另一个的对角线上。
答案1
该代码有效(3个相邻交叉):
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \an in {0,90,180,270}
\draw[rotate=\an] (2,-1)--(1,0)--(2,1);
\begin{scope}[xshift=5cm,red,rotate=45]
\foreach \an in {0,90,180,270}
\draw[rotate=\an] (2,-1)--(1,0)--(2,1);
\end{scope}
\begin{scope}[xshift=10cm,blue,rotate=30]
\foreach \an in {0,90,180,270}
\draw[rotate=\an] (2,-1)--(1,0)--(2,1);
\end{scope}
\end{tikzpicture}
\end{document}
输出为:
添加:一个新的简单版本,在环境中定义一个带有 4 个参数的新命令(\cross
)scope
:
#1:xshift \cross
(以厘米为单位);#2:颜色;#3:旋转角度(以度为单位);#4:调整十字以完成图片的比例因子。
代码(带有2个交叉示例):
\documentclass{article}
\usepackage{tikz}
\newcommand*{\cross}[4]{
\begin{scope}[xshift=#1cm,#2,rotate=#3,scale=#4]
\foreach \an in {0,90,180,270}
\draw[rotate=\an] (2,-1)--(1,0)--(2,1);
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\cross{5}{blue}{0}{1}
\cross{0}{red}{45}{.5}
\end{tikzpicture}
\end{document}
输出:
答案2
我曾经遇到过同样的问题,简单的解决办法是不使用coordinate
带有转换的命令。
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-feynman}
\tikzfeynmanset{compat=1.1.0}
\usetikzlibrary{shapes,arrows,positioning,automata,backgrounds,calc,er,patterns,positioning,quotes}
\begin{document}
\begin{tikzpicture}
\coordinate (A1) at (-1,2);
\coordinate (A2) at (0,1);
\coordinate (A3) at (1,2);
\coordinate (A4) at (2,1);
\coordinate (A5) at (1,0);
\coordinate (A6) at (2,-1);
\coordinate (A7) at (1,-2);
\coordinate (A8) at (0,-1);
\coordinate (A9) at (-1,-2);
\coordinate (A10) at (-2,-1);
\coordinate (A11) at (-1,0);
\coordinate (A12) at (-2,1);
\begin{scope}[rotate=40]
\draw (-1,2)--(0,1)-- (1,2);
\draw (2,1) -- (1,0)-- (2,-1);
\draw (1,-2) -- (0,-1) -- (-1,-2);
\draw (-2,-1) -- (-1,0) -- (-2,1);
\end{scope}
\end{tikzpicture}
\end{document}