我需要用细线写一个电路,其中有一个操作是例外。例如
\begin{quantikz}[thin lines]
& \qw & \ctrl{1} & \qw\\
& \qw & \targ{} & \qw
\end{quantikz}
是否可以“排除”来自\ctrl{1}
和\targ{}
一起到thin lines
选项的操作?
答案1
首先,免责声明:我quantikz
以前从未使用过 -usepackage。我的所有建议均基于我对标准 TikZ 的了解以及quantikz
对源代码的快速分析。
从您的问题中给出的有限细节来看,我假设您希望所有水平线都变细,而垂直线之间的线\ctrl{1}
则为\targ{}
标准粗细。
此外,我假设以下 MWE 为基础:
\documentclass{standalone}
\usepackage{quantikz}
\begin{document}
\begin{quantikz}[thin lines]
& \qw & \ctrl{1} & \qw\\
& \qw & \targ{} & \qw\\
\end{quantikz}
\end{document}
quantikz
源代码分析
要解释为什么可能没有干净的解决方案或根本没有解决方案,我们必须查看quantikz
-usepackage 的实现。
- quantikz
environment 的定义是接受命令字符串,该字符串在内部进行解析和分解。就像语法已经暗示的那样,“绘图”的处理方式就像具有行和列的表格/矩阵一样。但是,-package 的逻辑工作方式与允许您执行的quantikz
方式并不相同。因此,所有这些标准矩阵/TikZ 语法均不可用(适用于自定义框)。因此,唯一的选择是精确追溯宏的定义/处理方式以及在非常不寻常的-way-of-doing-things 中工作的方式。由于 a)使用路径后处理本身,并且 b) -environment 中的内容处理方式与标准 TikZ 命令不兼容,因此在后处理中更改行选项也不可行。 在 中,宏定义为\usetikzlibrary{matrix}
quantikz
quantikz
quantikz
quantikz
tikzlibraryquantikz.code.tex
\ctrl{}
\def\ctrl#1{\control{} \vqw{#1}}
理论上,可以本地重新定义\ctrl{}
,应用它并立即将其定义回默认值。我尝试过,但由于多种原因而失败(其中之一是 -environmentquantikz
无法正确解析(重新)定义)。中的
参数表示要向下移动多少个垂直层(= 行)。由于 TikZ 库和已加载到 quantikz 源文件中,我希望能够直接访问坐标。这也行不通(坐标命名不清楚/无法解析标准 TikZ 语法)。 从的定义立即重定向到,其定义如下:#1
\vqw{#1}
calc
positioning
\vqw
\vqwexplicit
\newcommand{\vqwexplicit}[2]{
\arrow[from=#1,to=#2,arrows] {}
}
玩了一下后\arrow
,我获得了以下信息:
\documentclass{standalone}
\usepackage{quantikz}
\begin{document}
\begin{quantikz}[thin lines]
& \qw & \control{} \vqw{1} & \qw\\
& \qw & \targ{} & \qw
\arrow[from=2-3,to=1-3,red,thick]{}
\end{quantikz}
\end{document}
事实证明,quantikz
-usepackage 使用的坐标名称构造如下:ROW-COL
。
因此,\arrow
-macro 允许在图表顶部绘制线条,并且可以完全控制线条样式。不幸的是,仍然需要去掉箭头尖。
下一步将替换\arrow
为默认的 TikZ \draw
,不幸的是quantikz
-usepackage 无法识别它。但是,-command 选项有一个秘诀\arrow
:对于 TikZ 箭头,可以使用简短语法指定尖端类型TipType-TipType
,例如“<->”、“->”、“->>”等。事实证明“-”有效并产生没有尖端的箭头。
解决方案 1:手动
一个不干净且不完善的建议解决方案是:
\documentclass{standalone}
\usepackage{quantikz}
\begin{document}
\begin{quantikz}[thin lines]
& \qw & \control{} & \qw\\ % neither \ctrl{1} nor \vqw{1} required
& \qw & \targ{} & \qw
\arrow[from=2-3,to=1-3,black,thick,-]{}
\end{quantikz}
\end{document}
请注意:
- 这条线画在了其他所有东西的上方(可能会导致视觉伪影),
- 这是一个每次都必须应用的手动解决方案。
解决方案 2:更加自动化
可以定义一个带有垂直线/只有垂直线的新对象作为宏。或者,重新定义原始垂直线宏以获取附加的可选宏。
请注意:
- 需要为每个原始
quantikz
元素定义一个新对象, - 重新定义原始宏可能会导致问题,
- 我所做的重新定义对捆绑包不起作用。