
Я хочу, чтобы стрелка была вертикально центрирована между двумя списками — это работает отлично, учитывая, что нет [t]-выравнивания мини-страниц, но с ними стрелка также расположена вверху, в то время как я хочу, чтобы она была расположена в центре вертикальной оси. Обратите внимание, что [t] требуется, чтобы невыровненный код стал выровненным. Ниже приведен MWE:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\begin{document}
\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
\end{lstlisting}
\end{minipage}
$\rightarrow$\hfill
\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}
\end{minipage}
\end{document}
решение1
Используйте a \raisebox
, но рассчитайте сдвиг на основе 1/2 высоты самого высокого ящика:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\begin{document}
\setbox0=\hbox{\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
\end{lstlisting}
\end{minipage}}%
%
\setbox2=\hbox{\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}
\end{minipage}}%
\noindent\copy0%
\ifdim\dp0>\dp2\relax%
\raisebox{-.5\dp0}{$\rightarrow$}\else%
\raisebox{-.5\dp2}{$\rightarrow$}\fi%
\hfill
\copy2
\setbox0=\hbox{\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
for (i in 1..n):
unaligned code
for (i in 1..n):
unaligned code
for (i in 1..n):
unaligned code
for (i in 1..n):
unaligned code
\end{lstlisting}
\end{minipage}}%
%
\setbox2=\hbox{\begin{minipage}[t]{.4\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}
\end{minipage}}%
\noindent\copy0%
\ifdim\dp0>\dp2\relax%
\raisebox{-.5\dp0}{$\rightarrow$}\else%
\raisebox{-.5\dp2}{$\rightarrow$}\fi%
\hfill
\copy2
\end{document}
Если вы хотите, чтобы стрелка была центрирована накорочелистинг, а не более длинный, измените \dp0>\dp2
на \dp0<\dp2
в \ifdim
тесте.
решение2
Вы можете избегать minipage
и raisebox
вообще.
Если ваш код не длиннее страницы, поместите все в блок tabular
и позвольте LaTeX выровнять его за вас.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array}
\usepackage{listings}
\lstset{
numbers=left
}
\begin{document}
Example with the code on the right longer than the one on the left:
\begin{center}
\begin{tabular}{m{.4\textwidth}m{.07\textwidth}m{.4\textwidth}}
\begin{lstlisting}
for (i in 1..n):
unaligned code
\end{lstlisting}
& $\rightarrow$ &
\begin{lstlisting}
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}\\
\end{tabular}
\end{center}
Example with the code on the left longer than the one on the right:
\begin{center}
\begin{tabular}{m{.4\textwidth}m{.07\textwidth}m{.4\textwidth}}
\begin{lstlisting}
for (i in 1..n):
long code on the left
long code on the left
long code on the left
long code on the left
long code on the left
long code on the left
long code on the left
long code on the left
long code on the left
\end{lstlisting}
& $\rightarrow$ &
\begin{lstlisting}
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}
\end{tabular}
\end{center}
\end{document}
решение3
Вы можете переместить стрелку вниз с помощью \raisebox
и использовать tikz
для настройки наконечника стрелки.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{tikz}
\begin{document}
\noindent%
\begin{minipage}[t]{.28\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
\end{lstlisting}
\end{minipage}
\hfill\raisebox{-2\baselineskip}{\tikz[>=stealth]\draw[thick,red,->](0,0)--(.2\textwidth,0);}\hfill
\begin{minipage}[t]{.28\textwidth}
\begin{lstlisting}[numbers=left]
for (i in 1..n):
unaligned code
...
...
\end{lstlisting}
\end{minipage}
\par
\end{document}