
Estou procurando uma maneira de desenhar umportão de permutaçãousando Qcircuit da maneira como é feito na figura a seguir (por exemplo, dentro da caixa vermelha):
(Como) Isso pode ser conseguido usando Qcircuit?
Editar: como me pediram para fornecer um MWE do que consegui até agora, este é o meu código-fonte:
\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}
O que produz o que pode ser visto na metade esquerda da imagem a seguir, porém não tenho a menor ideia de como produzir as linhas diagonais mostradas em vermelho no lado direito:
Responder1
Acredito que a resposta é não, não é possível. O \multigate
comando não faz muito mais do que desenhar um retângulo sobre o número apropriado de linhas. Acho que as linhas diagonais que você deseja estão Qcircuit
totalmente fora do escopo - embora eu não saiba xy
(qual Qcircuit
usa) bem o suficiente para ter certeza.
No entanto, tal operação de permutação é igual a uma sequência de portas de troca entre modos diferentes. Escrever o circuito dessa maneira tem o mesmo efeito e sem dúvida faz mais sentido (no experimento, os qubits são frequentemente fixados no lugar, portanto, tais operações de troca são descrições mais realistas de portas multi-qubit entre qubits inicialmente separados espacialmente).
Mais significativamente, Qcircuit
permite operações que seriam a melhor resolução para o seu problema (exceto mudar para um pacote diferente). Para a operação que você destacou, a seguinte imagem/código é uma descrição alternativa, ou seja, permutando 7 -> 6, 6-> 5, 5 -> 4 e 4 -> 7.
Produzido com
\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}
Responder2
Você pode obter o tipo de fio angular desejado usando o \link
comando. Costumo usá-los para representar trocas. A maneira mais simples de obter algo parecido com o que você está pedindo é usar o comando link e fazer uma caixa ao redor da região de interesse com o \gategroup
comando. Aqui está um exemplo:
Isso foi escrito com o seguinte 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}
Os fios, entretanto, não dobram exatamente na borda da caixa. Se você quiser isso, você pode hackear usando \link
, \multigate
, e \ghost
, mas você deve definir o espaçamento padrão da coluna como zero e forçar os comprimentos dos fios usando \push
a \rule
. Aqui está um exemplo disso:
Isso foi escrito com o seguinte 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}
Como alternativa, você pode definir o comprimento da folga na caixa (penúltimo campo em \gategroup
) no primeiro exemplo como 0em e estender a caixa para a linha anterior e seguinte, mas isso exigirá mexer no espaçamento entre linhas para que pareça correto (e muito provavelmente \push
usando regras verticais).