10 图文混排(环绕)的实现方式

发布于 2025-12-11 20:29:34

记得之前曾经问询过一次如何把题目的文字部分放在左侧,图片放在右侧。但是用的是插入图片的方式,我折腾了一次,@u70550 当时知道我用宏包,但是后来我没有学会。

这段时间在大佬们的指导下,用欧几里得宏包画图,忽然又想起来的这件事,想再来学习看能学会不。

image.png

上图是我直接绘制后,题目文字在上面,示意图在下面的情况。文字和图的代码分别如下:

文字

已知$\triangle ABC$中,$AB=AC=12$厘米,$BC=9$厘米,点$D$为$AB$的中点。
\begin{enumerate}[label={(\arabic*)},labelindent=1em,labelwidth=0.2em,labelsep=0.2em,leftmargin=3em,parsep=-2pt]
\item 如果点$P$在线段$BC$上以3厘米秒的速度由$BC$运动,同时点$Q$在线段$CA$上由$C$点向$A$点运动。\quan{1}\,若点$Q$的运动速度与点$P$的运动速度相等,当运动1秒时,$\triangle BPD$与$\triangle CQP$ 是否全等?\quan{2}\,若点$Q$的运动速度与点$P$的运动速度不相等,当点$Q$的运动速度为多少时,$\triangle BPD \cong \triangle CPQ$?
\item 若点$Q$以(1)中\,\quan{2}\,的速度从点 $C$ 出发,点 $P$ 以原来运动速度从点$B$出发,都逆时针沿$\triangle ABC$三边运动,多长时间$P$与$Q$第一次相遇,此时在$\triangle ABC$哪条边上相遇?
\end{enumerate}

图片代码

\begin{tikzpicture}[scale=0.5, font=\small]
tikzset{
arr/.style={postaction=decorate,
    decoration={markings,mark=at position .8 with {\arrow[thick]{#1}}}
}
% ===== 定义点 =====
tkzDefPoints{9/0/C, 0/0/B, 3/0/P}
tkzDefShiftPoint[B](65:12){A}
tkzDefMidPoint(A,B)
tkzGetPoint{D}
\tkzCalcLength(B,P)
tkzGetLength{dBP}
\tkzDefPointWith[linear normed,K=\dBP](C,A)
tkzGetPoint{Q}
% ===== 绘制图形 =====
tkzDrawPolygon[thick](A,B,C)
tkzDrawSegments[thick](D,P Q,P) 
tkzDrawSegments[arr=stealth](B,P C,Q)
% ===== 标示点 =====
tkzLabelPoints[above](A)
tkzLabelPoints[left](B)
tkzLabelPoints[right](C)
tkzLabelPoints[above left=-2pt](D)
tkzLabelPoints[above right=-2pt](Q)
tkzLabelPoints[below](P)
            
\end{tikzpicture}

请大佬们指导!

查看更多

关注者
0
被浏览
193
Sagittarius Rover
Sagittarius Rover 10小时前
这家伙很懒,什么也没写!

既然我在这里提到:

期待你自行探索wrapfig,wrapfig2以及夏老师的text-figure宏包的使用方法

稍微补充一下其他的方案:

基于两个minipage环境:

\documentclass[fontset=fandol]{ctexart}
\usepackage{showframe}
\usepackage{enumitem}
\usepackage{mathtools}
\usepackage{amsfonts}
\begin{document}
    \section{基于\texttt{minipage}的方案}
    \noindent 已知$\triangle ABC$中,$AB=AC=12$厘米,$BC=9$厘米,点$D$为$AB$中点。
    \par\vspace*{8pt}\noindent
    \begin{minipage}{.7\linewidth}%
        \begin{enumerate}[
            label={(\arabic*)},
            labelindent=1em,
            labelwidth=0.2em,
            labelsep=0.2em,
            leftmargin=3em,
            % parsep=-2pt,
            nosep,%<-我更推荐这个选项
        ]
        \item 如果点$P$在线段$BC$上以3厘米秒的速度由$BC$运动,同时点$Q$在线段$CA$上由$C$点向$A$点运动。若点$Q$的运动速度与点$P$的运动速度相等,当运动1秒时,$\triangle BPD$与$\triangle CQP$是否全等?若点$Q$的运动速度与点$P$的运动速度不相等,当点$Q$的运动速度为多少时,$\triangle BPD \cong \triangle CPQ$?
        \item 若点$Q$以(1)中,的速度从点 $C$ 出发,点 $P$ 以原来运动速度从点$B$出发,都逆时针沿$\triangle ABC$三边运动,多长时间$P$与$Q$第一次相遇,此时在$\triangle ABC$哪条边上相遇?
        \end{enumerate}
    \end{minipage}%
    \begin{minipage}{.3\linewidth}
        \begin{center}
            \includegraphics[width=3.5cm,height=6cm]{example-image-duck}
        \end{center}
    \end{minipage}%
\end{document}

基于text-figure宏包

这个包是@u10945 基于写的,没有发在CTAN上,需要自行下载(需要在这里获取text-figure_usermanual.pdf
)...如非必要,可以不使用...

我在这里做演示,也同样只是锻炼一下自己"一题多解"的能力...

\documentclass[fontset=fandol]{ctexart}
\usepackage{showframe}
\usepackage{enumitem}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage{text-figure}
\begin{document}
    \section{基于\texttt{text-figure}的方案}
    \noindent 已知$\triangle ABC$中,$AB=AC=12$厘米,$BC=9$厘米,点$D$为$AB$中点。
    \textfigure[fig-pos = right,text-ratio=.68]{
        \begin{enumerate}[
            label={(\arabic*)},
            labelindent=1em,
            labelwidth=0.2em,
            labelsep=0.2em,
            leftmargin=3em,
            nosep,%<-我更推荐这个选项
        ]
        \item 如果点$P$在线段$BC$上以3厘米秒的速度由$BC$运动,同时点$Q$在线段$CA$上由$C$点向$A$点运动。若点$Q$的运动速度与点$P$的运动速度相等,当运动1秒时,$\triangle BPD$与$\triangle CQP$是否全等?若点$Q$的运动速度与点$P$的运动速度不相等,当点$Q$的运动速度为多少时,$\triangle BPD \cong \triangle CPQ$?
        \item 若点$Q$以(1)中,的速度从点 $C$ 出发,点 $P$ 以原来运动速度从点$B$出发,都逆时针沿$\triangle ABC$三边运动,多长时间$P$与$Q$第一次相遇,此时在$\triangle ABC$哪条边上相遇?
        \end{enumerate}
    }{
        \includegraphics[width=3.5cm,height=6cm]{example-image-duck}
    }
\end{document}

image.png

基于wrapstuff宏包

\documentclass[fontset=fandol]{ctexart}
\usepackage{showframe}
\usepackage{enumitem}
\usepackage{mathtools}
\usepackage{amsfonts}
\usepackage{wrapstuff}
\usepackage{lipsum}%
\begin{document}
    \section{基于\texttt{wrapstuff}的方案}
    
    \lipsum[2]

    \noindent 已知$\triangle ABC$中,$AB=AC=12$厘米,$BC=9$厘米,点$D$为$AB$中点。
    \begin{wrapstuff}[r,top=0] 
        \includegraphics[width=3.5cm,height=6cm]{example-image-duck}
    \end{wrapstuff} 
    \begin{enumerate}[
        label={(\arabic*)},
        labelindent=1em,
        labelwidth=0.2em,
        labelsep=0.2em,
        leftmargin=3em,
        nosep,%<-我更推荐这个选项
    ]
    \item 如果点$P$在线段$BC$上以3厘米秒的速度由$BC$运动,同时点$Q$在线段$CA$上由$C$点向$A$点运动。若点$Q$的运动速度与点$P$的运动速度相等,当运动1秒时,$\triangle BPD$与$\triangle CQP$是否全等?若点$Q$的运动速度与点$P$的运动速度不相等,当点$Q$的运动速度为多少时,$\triangle BPD \cong \triangle CPQ$?
    \item 若点$Q$以(1)中,的速度从点 $C$ 出发,点 $P$ 以原来运动速度从点$B$出发,都逆时针沿$\triangle ABC$三边运动,多长时间$P$与$Q$第一次相遇,此时在$\triangle ABC$哪条边上相遇?
    \end{enumerate}
    \wrapstuffclear

    \lipsum[2]
\end{document}

image.png

需要指出的是,wrapstuff实现的是「图文环排」,而不只是「图文并排」。前者的难度远高于后者,详见wrapstuff文档。

image.png

2 个回答
o(∩_∩)o
o(∩_∩)o 1天前
这家伙很懒,什么也没写!

请先了解一下什么是MWE,你代码不完全,连\都没有。你的\quan又是什么东西。
以下是代码

\documentclass{ctexart}
\usepackage{tkz-euclide,enumitem,mathtools,amsmath}
\usepackage{wrapfig2}
\usetikzlibrary{calc}
\begin{document}
    已知$\triangle ABC$中,$AB=AC=12$厘米,$BC=9$厘米,点$D$为$AB$的中点。
    \begin{wrapfigure}{r}{0.3\linewidth}
        \begin{center}
            \begin{tikzpicture}[scale=0.4, font=\small]
                \tikzset{
                arr/.style={postaction=decorate,
                    decoration={markings,mark=at position .8 with {\arrow[thick]{#1}}}
                }}
                % ===== 定义点 =====
                \tkzDefPoints{9/0/C, 0/0/B, 3/0/P}
                \tkzDefShiftPoint[B](65:12){A}
                \tkzDefMidPoint(A,B)
                \tkzGetPoint{D}
                \tkzCalcLength(B,P)
                \tkzGetLength{dBP}
                \tkzDefPointWith[linear normed,K=\dBP](C,A)
                \tkzGetPoint{Q}
                % ===== 绘制图形 =====
                \tkzDrawPolygon[thick](A,B,C)
                \tkzDrawSegments[thick](D,P Q,P) 
                \tkzDrawSegments[arr=stealth](B,P C,Q)
                % ===== 标示点 =====
                \tkzLabelPoints[above](A)
                \tkzLabelPoints[left](B)
                \tkzLabelPoints[right](C)
                \tkzLabelPoints[above left=-2pt](D)
                \tkzLabelPoints[above right=-2pt](Q)
                \tkzLabelPoints[below](P)
            \end{tikzpicture}
        \end{center}
    \end{wrapfigure}
    \begin{enumerate}[before=\vspace{-\baselineskip},label={(\arabic*)},labelindent=1em,labelwidth=0.2em,labelsep=0.2em,leftmargin=3em,parsep=-2pt]
    \item   如果点$P$在线段$BC$上以3厘米秒的速度由$BC$运动,同时点$Q$在线段$CA$上由$C$点向$A$点运动。若点$Q$的运动速度与点$P$的运动速度相等,当运动1秒时,$\triangle BPD$与$\triangle CQP$ 
            是否全等?若点$Q$的运动速度与点$P$的运动速度不相等,当点$Q$的运动速度为多少时,$\triangle BPD \cong \triangle CPQ$?
    \item   若点$Q$以(1)中,的速度从点 $C$ 出发,点 $P$ 以原来运动速度从点$B$出发,都逆时针沿$\triangle ABC$三边运动,多长时间$P$与$Q$第一次相遇,此时在$\triangle ABC$哪条边上相遇?
    \end{enumerate}
\end{document}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览