Нарисуйте перестановочные вентили с помощью QCircuit

Нарисуйте перестановочные вентили с помощью QCircuit

Я ищу способ нарисоватьперестановочный вентильиспользуя Qcircuit так, как это сделано на следующем рисунке (например, внутри красного поля):

Квантовая схема с перестановочными вентилями

(Как) можно этого добиться с помощью Qcircuit?

Редактировать: Поскольку меня попросили предоставить MWE того, чего я достиг на данный момент, вот мой исходный код:

\documentclass{article}
\usepackage{qcircuit}
 \begin{document}
 \mbox{
     \Qcircuit @C=0.5cm @R=.2cm {
         \lstick{x_1} & \multigate{1}{\ } & \rstick{x_1} \qw \\
         \lstick{x_2} & \ghost{\ }        & \rstick{x_2} \qw 
     }
 }
 \end{document}

В результате получается то, что можно увидеть в левой половине следующей картинки, однако я понятия не имею, как получить диагональные линии, показанные красным цветом на правой стороне:

введите описание изображения здесь

решение1

Я считаю, что ответ — нет, это невозможно. \multigateКоманда не делает ничего, кроме рисования прямоугольника по соответствующему количеству строк. Я думаю, что диагональные линии, которые вам нужны, Qcircuitвообще выходят за рамки — хотя я не знаю xy(какое Qcircuitиспользование) достаточно хорошо, чтобы сказать наверняка.

Однако такая операция перестановки — это то же самое, что и последовательность вентилей обмена между различными режимами. Написание схемы таким образом имеет тот же эффект и, возможно, имеет больше смысла (в эксперименте кубиты часто фиксируются на месте, поэтому такие операции обмена являются более реалистичными описаниями многокубитных вентилей между изначально пространственно разделенными кубитами).

Что еще более важно, Qcircuitпозволяет выполнять такие операции, которые будут наилучшим решением вашей проблемы (кроме перехода на другой пакет). Для операции, которую вы выделили, следующее изображение/код является альтернативным описанием, а именно перестановкой 7 -> 6, 6-> 5, 5 -> 4 и 4 -> 7.

Пример схемы перестановки Qswap

Произведено с

\documentclass{article}

\usepackage{qcircuit}

\begin{document}

\Qcircuit @C=.7em @R=1em @!R {
\lstick{x_1} & \qw & \qw & \qw & \qw & \qw & \rstick{y_1} \\
\lstick{x_2} & \qw & \qw & \qw & \qw & \qw & \rstick{y_2} \\
\lstick{x_3} & \qw & \qw & \qw & \qw & \qw & \rstick{y_3} \\
\lstick{x_4} & \qw & \qswap & \qswap & \qswap & \qw & \rstick{y_4} \\
\lstick{x_5} & \qw & \qw \qwx & \qw \qwx & \qswap \qwx & \qw & \rstick{y_5} \\
\lstick{x_6} & \qw & \qw \qwx & \qswap \qwx & \qw  & \qw & \rstick{y_6} \\
\lstick{x_7} & \qw & \qswap \qwx & \qw & \qw & \qw & \rstick{y_7} 
}

\end{document}

решение2

Вы можете получить нужный вам вид угловых проводов с помощью \linkкоманды. Я часто использую их для представления свопов. Самый простой способ получить что-то вроде того, что вы просите, — использовать команду link и создать рамку вокруг интересующей вас области с помощью команды \gategroup. Вот пример:

введите описание изображения здесь

Это было набрано с помощью следующего кода:

\documentclass{standalone}
\input{Qcircuit}% using  qcircuit version 2
\begin{document}
\hspace{1em}
\begin{tabular}{c}
\vspace{-.6em}\\
     \Qcircuit @C=0.5cm @R=.5cm {
         \lstick{x_1} & \qw & \link{1}{-1} & \rstick{x_1} \qw \\
         \lstick{x_2} & \qw & \link{-1}{-1} & \rstick{x_2} \qw
         \gategroup{1}{2}{2}{3}{.8em}{-}
     }
\vspace{1.2em}\hspace{1.2em}
\\
\end{tabular}
\end{document}

Однако провода не сгибаются точно по краю коробки. Если вы этого хотите, то можете это исправить с помощью \link, \multigate, и \ghost, но вам придется установить интервал между столбцами по умолчанию на ноль и принудительно задать длины проводов с помощью \pusha \rule. Вот пример этого:

введите описание изображения здесь

Это было набрано с помощью следующего кода:

\documentclass{standalone}
\input{Qcircuit}% using  qcircuit version 2
\begin{document}
\hspace{1em}
\begin{tabular}{c}
\vspace{-.6em}\\
     \Qcircuit @C=0cm @R=.2cm {
         \lstick{x_1} & \qw & \qw & \multigate{1}{\ \ \ } & \qw \link{1}{-2} & \qw & \rstick{x_1} \qw \\
         \lstick{x_2} & \qw & \qw & \ghost{\ \ \ } & \qw \link{-1}{-2} & \qw & \rstick{x_2} \qw \\
         & \push{\rule{1.2em}{0em}} & & & & \push{\rule{1.2em}{0em}}
     }
\vspace{.2em}\hspace{1.2em}
\\
\end{tabular}
\end{document}

В качестве альтернативы вы можете установить резервную длину для блока (предпоследнее поле в \gategroup) в первом примере на 0em и расширить блок до предыдущей и следующей строки, но для этого потребуется повозиться с интервалом между строками, чтобы он выглядел правильно (и, вполне вероятно, \pushприменить вертикальные линейки).

Связанный контент