在 quantikz 中自定义粗线和细线

在 quantikz 中自定义粗线和细线

我需要用细线写一个电路,其中有一个操作是例外。例如

\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 的实现。
- quantikzenvironment 的定义是接受命令字符串,该字符串在内部进行解析和分解。就像语法已经暗示的那样,“绘图”的处理方式就像具有行和列的表格/矩阵一样。但是,-package 的逻辑工作方式与允许您执行的quantikz方式并不相同。因此,所有这些标准矩阵/TikZ 语法均不可用(适用于自定义框)。因此,唯一的选择是精确追溯宏的定义/处理方式以及在非常不寻常的-way-of-doing-things 中工作的方式。由于 a)使用路径后处理本身,并且 b) -environment 中的内容处理方式与标准 TikZ 命令不兼容,因此在后处理中更改行选项也不可行。 在 中,宏定义为\usetikzlibrary{matrix}quantikzquantikzquantikzquantikz
tikzlibraryquantikz.code.tex\ctrl{}

\def\ctrl#1{\control{}  \vqw{#1}}

理论上,可以本地重新定义\ctrl{},应用它并立即将其定义回默认值。我尝试过,但由于多种原因而失败(其中之一是 -environmentquantikz无法正确解析(重新)定义)。中的
参数表示要向下移动多少个垂直层(= 行)。由于 TikZ 库和已加载到 quantikz 源文件中,我希望能够直接访问坐标。这也行不通(坐标命名不清楚/无法解析标准 TikZ 语法)。 从的定义立即重定向到,其定义如下:#1\vqw{#1}calcpositioning
\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}

请注意:

  1. 这条线画在了其他所有东西的上方(可能会导致视觉伪影),
  2. 这是一个每次都必须应用的手动解决方案。

解决方案 2:更加自动化

可以定义一个带有垂直线/只有垂直线的新对象作为宏。或者,重新定义原始垂直线宏以获取附加的可选宏。

请注意:

  1. 需要为每个原始quantikz元素定义一个新对象,
  2. 重新定义原始宏可能会导致问题,
  3. 我所做的重新定义对捆绑包不起作用。

相关内容