使用 wrapfigure 时文字对齐有问题,代码如下
\documentclass[aspectratio=169]{beamer}
\usepackage[UTF8]{ctex}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, positioning, calc, decorations.markings}
\usepackage{wrapfig} % 用于文字环绕图片
\usepackage{graphicx} % 用于插入图片
\usepackage{circuitikz}
\begin{document}
\begin{frame}{4. 闭合电路欧姆定律的普遍形式}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\begin{wrapfigure}{r}{0.3\textwidth}
\centering
\resizebox{0.3\textwidth}{!}{%
\begin{circuitikz}
\tikzstyle{every node}=[font=\normalsize]
\draw (7.5,10) to[battery1,l=$\mathcal{E}_1$] (7.5,10.5);
\draw (11.25,10) to[battery1,l=$\mathcal{E}_1$] (11.25,10.5);
\draw (7.5,10.5) to[european resistor,l={ \normalsize $r_1$}] (7.5,11.5);
\draw (11.25,10.5) to[european resistor,l={ \normalsize $r_2$}] (11.25,11.5);
\draw (7.5,10) to[short] (7.5,9.25);
\draw (7.5,9.25) to[short] (11.25,9.25);
\draw (11.25,9.25) to[short] (11.25,10);
\draw (7.5,11.5) to[short] (7.5,13);
\draw (11.25,11.5) to[short] (11.25,13);
\draw (7.5,13) to[european resistor,l={ \normalsize $R$}] (11.25,13);
\node [font=\normalsize] at (9.5,9) {$A$};
\node [font=\normalsize] at (11.5,13) {$B$};
\node [font=\normalsize] at (7.25,13) {$C$};
\draw [->, >=Stealth] (10.75,12.5) -- (8.25,12.5)node[pos=0.5, fill=white]{$I$};
\draw [ dashed] (6.25,12) rectangle (8.5,9.75);
\draw [ dashed] (10,12) rectangle (12.5,9.75);
\end{circuitikz}
}%
\end{wrapfigure}
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
\end{document}
效果如下:
图片左边的文字,第一行没有排完就开始排第二行,目的似乎是要末行右对齐,我想要的效果是第一行排完之后再下一行,末行要左对齐。
wrapfig
的宏包手册,发现要使用这个包实现第一行排满之后,再排第二行,且末行左对齐这个效果,经过多次测试——不是特别容易实现:这主要是你的需求仍有表述不清之处导致的。TeX
在图文绕排方面存在所谓固有限制,所以最好的方法是避免图文绕排,或者尽量避免采取较为复杂的图文绕排效果而是只追求较为简单的图文混排效果。下面抛砖引玉,介绍一些图文绕排的常见方案。
第一个方法,LaTeX
提供了minipage
环境,比较通用,只要提前规划好内容,就可以用这种粗略的方法实现;
%%无需加载额外宏包
%%方法1%%
\begin{frame}{1. \texttt{minipage}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip2ex%
\begin{minipage}{.7\linewidth}
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。
\end{minipage}%
\begin{minipage}{.3\linewidth}
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{minipage}%
\vskip2ex
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
第二个方法,beamer
文档类提供了columns
环境,它是一个可以比较便捷的用于左文右图的排版方案;
%%无需加载额外宏包
%%方法2%%
\begin{frame}{2. \texttt{columns}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip2ex%
\begin{columns}[onlytextwidth]
\column[c]{.7\linewidth}
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。
\column[c]{.3\linewidth}
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{columns}%
\vskip2ex
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
第三个方法,tcolorbox
宏包提供了同名环境,其 并排下部 功能是比较现代的左右混排方案,缺点是不能换页,不过在beamer
中帧换页本身大多数时候无效,因此屏蔽了这个缺点。由于该宏包的高度可定制化,故推荐优先级最高;
%%\usepackage{tcolorbox}
%%方法3%%
\begin{frame}{3. \texttt{tcolorbox}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\begin{tcolorbox}[
enhanced,
frame hidden,
opacityback=0,
sidebyside,
righthand ratio=.3,
lower separated=false,
sidebyside gap=0mm,
left=0cm,
right=0cm,
boxsep=0pt,
boxrule=0pt,
]
规定电动势的方向:
正极通过外电路指向负极的方向;
负极通过内电路指向正极的方向。
\tcblower
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{tcolorbox}
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
上述三种方法,对于左右型、上下型排版需求,都是可行的策略。下面介绍一些应对特殊型绕排需求的方法。
第四个方法,李清老师的wrapstuff
宏包提供了图文绕排的另一种实现,它的优点是可以自由地对需要绕排的图表进行水平或垂直方向上的偏移。
wrapstuff
尝试整合和扩展picinpar
、floatflt
、wrapfig
、cutwin
和wrapfig2
等同类宏包的功能,且兼容caption
、float
和floatrow
等宏包,并试图兼容显示(display)数学公式和各种 LaTeX 列表环境,可以让他们正确绕排。如果需要将图表绕排在列表环境(问题描述中的第三段)附近,也可以试试这个包。wrapstuff
的实现依赖LaTeX 2021-06-01
开始提供的段落钩子,并依赖LaTeX3 2022-04-10
之后的版本。%%\usepackage{wrapstuff}
%%方法4%%
\begin{frame}{4.1 \texttt{wrapstuff}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip3ex%
\begin{wrapstuff}[r,top=0,width=.2\linewidth,vsep=0pt,voffset=-2mm]
\includegraphics[height=\dimeval{3\baselineskip}]{example-image}
\end{wrapstuff}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通。
\wrapstuffclear
\vskip3ex%
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
\begin{frame}{4.2 \texttt{wrapstuff}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip3ex%
\begin{wrapstuff}[r,top=0,width=.2\linewidth,vsep=0pt,voffset=-2mm]
\includegraphics[height=\dimeval{3\baselineskip}]{example-image}
\end{wrapstuff}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通。
\wrapstuffclear
\vskip3ex%
\begin{wrapstuff}[r,top=0,width=.2\linewidth,vsep=0pt]
\includegraphics[height=\dimeval{3\baselineskip}]{example-image}
\end{wrapstuff}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向。
\end{frame}
第五个方法,wrapfig
通常作为picinpar
宏包的互补解决方案,wrapfig
宏包的优点是可以不必指定把多少文字包含进绕排的范围,且可以让图表超出版心而不报错。
wrapfig
和picinpar
一样,在本页剩下的空间中必须足够放下被绕排的图表,也就是说起码这个段落的“边界盒子”的上下界要能够包含该图表。你的提问中,图表到底跟哪一段成绕排关系,并未说清,因此我只能按照我自己的想法来操作。所以我就假设你只是想在第二段绕排,不过显然的是该段文字数量略少,因此极大可能造成难看的分页。wrapfigure
环境后面,必须紧跟着字数足够多的纯文本段落,否则排版通常会非常难看。%%\usepackage{wrapfig}
%%方法5%%
\begin{frame}{5.1 \texttt{wrapfig}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip3ex%
\begin{wrapfigure}[5]{r}[0pt]{.2\textwidth}
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{wrapfigure}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通。
\vskip3ex%
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
\begin{frame}{5.2 \texttt{wrapfig}方案}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
\vskip3ex%
\begin{wrapfigure}[5]{r}[0pt]{.2\textwidth}
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{wrapfigure}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通。
\vskip3ex%
\begin{wrapfigure}[5]{r}[0pt]{.2\textwidth}
\centering
\includegraphics[height=3\baselineskip]{example-image}
\end{wrapfigure}%
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方方方方向向向。
\end{frame}
最后,刘海洋老师在其书《LaTeX入门》中介绍:在TeX内部,绕排工具都是通过\parshape
命令和一系列复杂的盒子操作和计算完成的,这也解释了为什么wrapfig
在列表环境附近失效的原因(列表环境也依靠\parshape
),完全可以通过\parshape
产生形状更为复杂的绕排效果,而shapepar
宏包的\cutout
命令就部分地实现了这一复杂能力,不过具体位置和参数需要手工仔细调整。如果有兴趣,也可以自行去了解一下这个底层命令和这个有趣的宏包。
上面的注意事项需要看下!然后这个也挺不美观的,修改了一下:
\documentclass[aspectratio=169]{beamer}
\usepackage[UTF8]{ctex}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, positioning, calc, decorations.markings}
\usepackage{wrapfig} % 用于文字环绕图片
\usepackage{graphicx} % 用于插入图片
\usepackage{circuitikz}
\begin{document}
\begin{frame}{4. 闭合电路欧姆定律的普遍形式}
如图,闭合回路中有多个电源,若电动势 \(\mathcal{E}_1\) 大于 电动势 \(\mathcal{E}_2\),则电流方向如图。
规定电动势的方向:正极通过外电路指向负极的方向;负极通过内电路指向正极的方向。
\begin{wrapfigure}{r}{0.3\textwidth}
\vspace{-1.5\baselineskip}
\centering
\resizebox{0.3\textwidth}{!}{%
\begin{circuitikz}
\tikzstyle{every node}=[font=\normalsize]
\draw (7.5,10) to[battery1,l=$\mathcal{E}_1$] (7.5,10.5);
\draw (11.25,10) to[battery1,l=$\mathcal{E}_1$] (11.25,10.5);
\draw (7.5,10.5) to[european resistor,l={ \normalsize $r_1$}] (7.5,11.5);
\draw (11.25,10.5) to[european resistor,l={ \normalsize $r_2$}] (11.25,11.5);
\draw (7.5,10) to[short] (7.5,9.25);
\draw (7.5,9.25) to[short] (11.25,9.25);
\draw (11.25,9.25) to[short] (11.25,10);
\draw (7.5,11.5) to[short] (7.5,13);
\draw (11.25,11.5) to[short] (11.25,13);
\draw (7.5,13) to[european resistor,l={ \normalsize $R$}] (11.25,13);
\node [font=\normalsize] at (9.5,9) {$A$};
\node [font=\normalsize] at (11.5,13) {$B$};
\node [font=\normalsize] at (7.25,13) {$C$};
\draw [->, >=Stealth] (10.75,12.5) -- (8.25,12.5)node[pos=0.5, fill=white]{$I$};
\draw [ dashed] (6.25,12) rectangle (8.5,9.75);
\draw [ dashed] (10,12) rectangle (12.5,9.75);
\end{circuitikz}
}%
\end{wrapfigure}
\begin{itemize}
\item 对于 \(\mathcal{E}_1\):电流方向与电动势方向一致,电荷经过时静电力做负功,电势升高 \(\mathcal{E}_1\)
\item 对于 \(\mathcal{E}_2\):电流方向与电动势方向相反,电荷经过时静电力做正功,电势降低 \(\mathcal{E}_2\),此时相当于电阻。
\end{itemize}
\end{frame}
\end{document}