
Estoy buscando una manera de dibujar unpuerta de permutaciónusando Qcircuit de la forma en que se hace en la siguiente imagen (por ejemplo, dentro del cuadro rojo):
(¿Cómo) se puede lograr esto usando Qcircuit?
Editar: dado que me pidieron que proporcionara un MWE de lo que he logrado hasta ahora, este es mi código fuente:
\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}
Lo que produce lo que se puede ver en la mitad izquierda de la siguiente imagen, sin embargo, no tengo idea de cómo producir las líneas diagonales que se muestran en rojo en el lado derecho:
Respuesta1
Creo que la respuesta es no, no es posible. El \multigate
comando no hace mucho más que dibujar un rectángulo sobre el número apropiado de filas. Creo que las líneas diagonales que deseas están fuera del alcance de Qcircuit
todas, aunque no sé xy
(cuáles Qcircuit
se usan) lo suficientemente bien como para decirlo con certeza.
Sin embargo, dicha operación de permutación es lo mismo que una secuencia de puertas de intercambio entre diferentes modos. Escribir el circuito de esta manera tiene el mismo efecto y podría decirse que tiene más sentido (en los experimentos, los qubits a menudo están fijos en su lugar, por lo que tales operaciones de intercambio son descripciones más realistas de puertas de múltiples qubits entre qubits inicialmente separados espacialmente).
Más importante aún, Qcircuit
permite realizar operaciones que serían la mejor resolución para su problema (a menos que cambie a un paquete diferente). Para la operación que resaltó, la siguiente imagen/código es una descripción alternativa, es decir, permutar 7 -> 6, 6-> 5, 5 -> 4 y 4 -> 7.
Producido con
\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}
Respuesta2
Puede obtener el tipo de cables en ángulo que desee usando el \link
comando. A menudo los uso para representar intercambios. La forma más sencilla de obtener algo como lo que estás solicitando es usar el comando de enlace y crear un cuadro alrededor de la región de interés con el \gategroup
comando. He aquí un ejemplo:
Esto fue compuesto con el siguiente código:
\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}
Sin embargo, los cables no se doblan exactamente en el borde de la caja. Si desea eso, puede modificarlo usando \link
, \multigate
y \ghost
, pero debe establecer el espaciado de columna predeterminado en cero y forzar las longitudes de los cables presionando \push
a \rule
. Aquí hay un ejemplo de eso:
Esto fue compuesto con el siguiente código:
\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}
Alternativamente, puede establecer la longitud de holgura en el cuadro (penúltimo campo en \gategroup
) en el primer ejemplo en 0em y extender el cuadro a la línea anterior y siguiente, pero esto requerirá modificar el espacio entre filas para que se vea bien. (y muy probablemente \push
reglas verticales).