我编写了一个命令来自动将文字环绕在 tikz 图片周围(图像 1)。
请帮助纠正以下代码。
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\newdimen\widthimmini
\newdimen\heightimmini
\newdimen\textimagewidth
\newbox\imbox
\newcommand{\putimage}[3][-12pt]{
\setbox\imbox=\vbox{\hbox{#3}}
\widthimmini=\wd\imbox
\heightimmini=\ht\imbox
\textimagewidth=\dimexpr\linewidth - 1.075\widthimmini\relax
\par\vspace*{\dimexpr#1\relax}\noindent{\ignorespaces\begin{minipage}[t]{\textimagewidth}
\vspace*{0pt}\ignorespaces
\begingroup
#2
\endgroup
\end{minipage}
\begin{minipage}[t]{\widthimmini}
\vspace*{-1pt}
\begin{center}
\begingroup
#3
\endgroup
\end{center}
\end{minipage}}}
\begin{document}
\putimage{ \lipsum[30]
}
{\begin{tikzpicture}
\draw (0,0) circle(2);
\end{tikzpicture}}
\newpage
\putimage{ \lipsum[10]
}
{\begin{tikzpicture}
\draw (0,0) circle(2);
\end{tikzpicture}}
\noindent
\lipsum[5]
\end{document}
答案1
你把事情变得复杂了:普通的 TeXinsbox
宏包可以做你想做的事,在这里它工作得很好。它定义了一个 \InsertBoxR
命令,该命令接受两个强制参数:插入框之前未缩短的行数和插入的框,以及一个可选参数:补充缩短的行数,以防 latex 对放置框所需的缩短行数计算错误。
还有一个\InsertBoxL
和一个\InsertBoxC
命令。
这是一个可能的代码:
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\input{insbox.tex}
\begin{document}
\InsertBoxR{0}{\begin{tikzpicture}
\draw (0,0) circle(2);
\end{tikzpicture}}
\lipsum[30]
\newpage
\InsertBoxR{3}{\begin{tikzpicture}
\draw (0,0) circle(2);
\end{tikzpicture}}
\lipsum[10]
\noindent
\lipsum[5]
\end{document}