我想
- 将两个铸造的源代码块放入两个 beamer 列中
- 箭头指向两者之间(基于 tikzmark)
- 并使用调整框将代码块缩小到列宽
无需调整框即可正常工作(基于可以在 minted 里面使用 tikzmark 吗?和在铸造的代码上绘制覆盖图形,大部分)。请参见下面示例中的第一帧。
但是,当使用 adjustbox/varwidth 环境围绕铸造块进行缩放时,tikzmarks 似乎关闭并存储错误的位置(这很直观)。请参见下面示例中的第二帧。将第二个 tikzpicture 放在框架中的不同位置会产生不同的效果,但我尝试的所有选项都产生了正确的结果。
(旁注:这些代码示例当然是愚蠢的;只是为了使效果更明显)。
说明:第一个版本可以工作,但是不能扩展代码块。
使用调整框后,红色箭头就会出现在各处:
\documentclass[ignorenonframetext,nooutline]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{minted}
\usepackage{adjustbox}
\usetheme[hideothersubsections]{Goettingen}
\begin{document}
\begin{frame}[fragile]{Minted columns without adjustbox}
\begin{columns}
\tiny
\begin{column}{0.5\columnwidth}
\begin{minted}[frame=lines,linenos=true,autogobble,escapeinside=??]{c}
int main (void)
{
zmq_send (sender, "Some long text to have a wide line", 5, 0); ?\tikzmark{start}?
return 0;
}
\end{minted}
\end{column}
\begin{column}{0.5\columnwidth}
\begin{minted}[frame=lines,linenos=true,autogobble,escapeinside=??]{c}
int main (void)
{
// some comment
// some more comment
?\tikzmark{eend}? zmq_receive (s, buffer, 100, 0);
}
\end{minted}
\end{column}
\begin{tikzpicture}[remember picture]
\draw [overlay, ->, line width=5pt, red] (pic cs:start) -- (pic cs:eend);
\end{tikzpicture}
\end{columns}
\end{frame}
% ------------------------
\begin{frame}[fragile,label={sec:org93808b5}]{With adjust box}
\begin{columns}
\begin{column}{0.5\columnwidth}
\begin{block}{Sender}
\begin{adjustbox}{width=0.35\columnwidth}
\begin{varwidth}{\columnwidth}
\begin{minted}[frame=lines,linenos=true,mathescape=true,escapeinside=??]{c}
int main (void)
{
zmq_send (sender, "Some long text to have a wide line", 5, 0); ?\tikzmark{start1}?
return 0;
}
\end{minted}
\end{varwidth}
\end{adjustbox}
\end{block}
\end{column}
\begin{column}{0.5\columnwidth}
\begin{block}{Receiver}
\begin{adjustbox}{width=0.4\columnwidth}
\begin{varwidth}{\columnwidth}
\begin{minted}[frame=lines,linenos=true,mathescape=true,escapeinside=??]{c}
int main (void)
{
// some comment
// some more comment
?\tikzmark{end2}? zmq_receive (s, buffer, 100, 0);
}
\end{minted}
\end{varwidth}
\end{adjustbox}
\end{block}
\end{column}
\begin{tikzpicture}[remember picture]
\draw[overlay, ->, line width=5pt, red] (pic cs:start1) -- (pic cs:end1);
\end{tikzpicture}
\end{columns}
\end{frame}
\end{document}
答案1
缩放字体不是一个好主意,要么手动选择合适的字体大小(已经很小,所以可能没人能读懂),要么使用换行符代替缩放:
% !TeX program = txs:///arara
% arara: pdflatex: {synctex: on, interaction: nonstopmode, shell: yes}
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{minted}
\begin{document}
\begin{frame}[fragile]{Minted columns without adjustbox}
\begin{columns}
\tiny
\begin{column}{0.48\columnwidth}
\begin{minted}[frame=lines,linenos=true,autogobble,escapeinside=??,breaklines]{c}
int main (void)
{
zmq_send (sender, "Some long text to have a wide line", 5, 0); ?\tikzmark{start}?
return 0;
}
\end{minted}
\end{column}
\begin{column}{0.48\columnwidth}
\begin{minted}[frame=lines,linenos=true,autogobble,escapeinside=??,breaklines]{c}
int main (void)
{
// some comment
// some more comment
?\tikzmark{eend}? zmq_receive (s, buffer, 100, 0);
}
\end{minted}
\end{column}
\begin{tikzpicture}[remember picture]
\draw [overlay, ->, line width=5pt, red] (pic cs:start) -- (pic cs:eend);
\end{tikzpicture}
\end{columns}
\end{frame}
\end{document}