我正在开发一个利用 QCircuit 库的项目。我不得不说,我在使用这个库时遇到了很多问题,因为这个库的文档很少,无法说明可以做什么。然而,在编译这个电路时,出现了两个问题,我直接从 Overleaf 报告了这些问题。代码编译成功,结果是我想要的,但我不明白错误的原因,因为它来自这个块。我的符号有误吗?我不知道还能找到什么……
我明白了缺少 $ 插入在第一行之前\raisebox{-2.3em}{=}
和在\end{center}
有什么建议吗?我以为这是nghost或者虚拟点,但我不确定。
\documentclass[a4paper, 12pt]{book}
% General Settings
\usepackage[paper = a4paper, margin = 1in]{geometry}
\usepackage[italian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage[small]{caption}
\usepackage{subfig}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{graphicx,color,listings}
\usepackage{float}
\usepackage{booktabs}
\usepackage{hologo}
\usepackage{colortbl}
% Math packages
\usepackage{amsmath,amssymb,amsthm}
\usepackage{mathrsfs}
\usepackage{mathdots}
\usepackage{mathtools}
% Quantum circuit package
\usepackage[braket, qm]{qcircuit}
\hypersetup{
colorlinks=true,
linkcolor=black,
urlcolor=blue,
}
\urlstyle{same}
\begin{document}
\begin{center}
\mbox{
\Qcircuit @C=1em @R=1em {
& \qw & \multigate{2}{G} & \qw & \qw \\
& \raisebox{.3em}{\vdots} & \nghost{G} & \raisebox{.3em}{\vdots} & \\
& \qw & \ghost{G} & \qw & \qw
}
}
\raisebox{-2.3em}{=}
\mbox{
\Qcircuit @C=1em @R=1em {
& \qw
& \multigate{2}{H^{\otimes n}}
& \qw
& \multigate{2}{
\begin{array}{ll}
\ket{0}^{\otimes n} \rightarrow \ket{0}^{\otimes n} \\
\ket{x}^{\otimes n} \rightarrow -\ket{x}^{\otimes n}
\end{array}}
& \qw
& \multigate{2}{H^{\otimes n}}
& \qw
& \qw
\\
& \raisebox{.3em}{\vdots}
& \nghost{H^{\otimes n}}
& \raisebox{.3em}{\vdots}
& \nghost{
\begin{array}{cc}
\ket{0}^{\otimes n}\rightarrow \ket{0}^{\otimes n}\\
\ket{x}^{\otimes n}\rightarrow -\ket{x}^{\otimes n}
\end{array}}
& \raisebox{.3em}{\vdots}
& \nghost{H^{\otimes n}}
& \raisebox{.3em}{\vdots}
&
\\
& \qw
& \ghost{H^{\otimes n}}
& \qw
& \ghost{
\begin{array}{ll}
\ket{0}^{\otimes n}\rightarrow \ket{0}^{\otimes n}\\
\ket{x}^{\otimes n}\rightarrow -\ket{x}^{\otimes n}
\end{array}}
& \qw
& \ghost{H^{\otimes n}}
& \qw
& \qw
}
}
\end{center}
\end{document}
答案1
在内核中,\vdots
被定义为可以在文本和数学中使用的命令,但mathdots
重新定义为只能在数学模式下使用。
解决方法:将其包在里面$...$
。
更好的是,
\newcommand{\qvdots}{% \vdots for qcircuit
\raisebox{0.3em}{\ensuremath{\vdots}}%
}
并使用\qvdots
。
还有一些虚假的空格,使得水平间距难以控制。检查<---
我在代码中添加的标记。
该hyperref
包应该最后加载(只有一些包需要放在它后面,而没有您正在加载的包)。
\documentclass[a4paper, 12pt]{book}
% General Settings
\usepackage[paper = a4paper, margin = 1in]{geometry}
\usepackage[italian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[small]{caption}
\usepackage{subfig}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{graphicx,color,listings}
\usepackage{float}
\usepackage{booktabs}
\usepackage{hologo}
\usepackage{colortbl}
% Math packages
\usepackage{amsmath,amssymb,amsthm}
\usepackage{mathrsfs}
\usepackage{mathdots}
\usepackage{mathtools}
% Quantum circuit package
\usepackage[braket, qm]{qcircuit}
\usepackage{hyperref} % should be last
\hypersetup{
colorlinks=true,
linkcolor=black,
urlcolor=blue,
}
\urlstyle{same}
\newcommand{\qvdots}{% \vdots for qcircuit
\raisebox{0.3em}{\ensuremath{\vdots}}%
}
\begin{document}
\begin{center}
\mbox{% <---
\Qcircuit @C=1em @R=1em {
& \qw & \multigate{2}{G} & \qw & \qw \\
& \qvdots & \nghost{G} & \qvdots & \\
& \qw & \ghost{G} & \qw & \qw
}% <---
}% <---
\quad\raisebox{-2.3em}{=}\quad % <---
\mbox{% <---
\Qcircuit @C=1em @R=1em {
& \qw
& \multigate{2}{H^{\otimes n}}
& \qw
& \multigate{2}{
\begin{array}{ll}
\ket{0}^{\otimes n} \rightarrow \ket{0}^{\otimes n} \\
\ket{x}^{\otimes n} \rightarrow -\ket{x}^{\otimes n}
\end{array}
}
& \qw
& \multigate{2}{H^{\otimes n}}
& \qw
& \qw
\\
& \qvdots
& \nghost{H^{\otimes n}}
& \qvdots
& \nghost{
\begin{array}{cc}
\ket{0}^{\otimes n}\rightarrow \ket{0}^{\otimes n}\\
\ket{x}^{\otimes n}\rightarrow -\ket{x}^{\otimes n}
\end{array}
}
& \qvdots
& \nghost{H^{\otimes n}}
& \qvdots
&
\\
& \qw
& \ghost{H^{\otimes n}}
& \qw
& \ghost{
\begin{array}{ll}
\ket{0}^{\otimes n}\rightarrow \ket{0}^{\otimes n}\\
\ket{x}^{\otimes n}\rightarrow -\ket{x}^{\otimes n}
\end{array}
}
& \qw
& \ghost{H^{\otimes n}}
& \qw
& \qw
}% <---
}
\end{center}
\end{document}