
Я ищу способ нарисоватьперестановочный вентильиспользуя 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.
Произведено с
\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
, но вам придется установить интервал между столбцами по умолчанию на ноль и принудительно задать длины проводов с помощью \push
a \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
применить вертикальные линейки).