我希望能够将源代码包装在图形周围。以下 MWE 应该可以清楚地说明我的想法:
\documentclass{article}
\usepackage{wrapfig}
\usepackage{listings}
\lstset{language={},
breaklines=true,
basicstyle=\ttfamily,
breakatwhitespace=true}
\begin{document}
\noindent
\def \myasywidth {5cm}
\begin{wrapfigure}{l}{\myasywidth}
\vspace{0pt}
\rule{\myasywidth}{\myasywidth}
\end{wrapfigure}
%
%
\begin{lstlisting}
settings.outformat="pdf";
size(5cm,0);
real xmin = -0.1;
real xmax = 2;
real ymin = -0.1;
real ymax = 2;
path s = (0,0){up} .. (1/2,sqrt(1/2)) .. (1,1) .. (xmax,sqrt(xmax));
fill(s -- (xmax,0) -- cycle, mediumgray);
draw(s);
arrowbar axisarrow = Arrow(TeXHead);
draw((xmin,0) -- (xmax,0), arrow=axisarrow);
draw((0,ymin) -- (0,ymax), arrow = axisarrow);
real x = 1.4;
real dx = .05;
real t0 = times(s,x)[0];
real t1 = times(s,x+dx)[0];
path striptop = subpath(s,t0,t1);
draw((x,0) -- striptop -- (x+dx,0) -- cycle, blue);
\end{lstlisting}
%
\end{document}
结果如下(产生了一些关于冲突环境的警告):
我该如何让它工作?(除了换行之外,解决方案还应该恢复listings
包的行为,即自动断行的延续应该缩进。)
答案1
这个解决方案可以接受吗?
\documentclass{article}
\usepackage{wrapfig}
\begin{document}
\noindent
\def \myasywidth {5cm}
\begin{wrapfigure}{l}{\myasywidth}
\vspace{0pt}
\rule{\myasywidth}{\myasywidth}
\end{wrapfigure}
%
%
{\ttfamily\obeyspaces\obeylines
settings.outformat="pdf";
[...listing ommited...]
draw((x,0) -- striptop -- (x+dx,0) -- cycle, blue);
}
%
\end{document}
生成:
注意事项:
- 代码不应包含任何 latex 特殊字符,正如本例中的情况一样。否则它们应该被“转义”。
答案2
wrapfig
诸如、picins
、等软件包cutwin
在存在列表环境或其他通过直接管理垂直框来工作的环境中无法很好地工作。大多数这些软件包在文档中明确提到了这一点。如果您找到与软件包兼容的直接解决方案,我会感到惊讶listings
。
我建议你用困难的方式:手动将列表包裹在图形周围。你需要拆分列表,放入两个(或三个?)部分,minipage
并将它们排列成你想要的位置。如果你的图形是矩形,这种方法就行得通。如果不是,我没什么建议了。