我使用了带有单框架的 listings 包,并且我的代码前面有一个方程。问题是框架与方程有一点交叉,输出结果很难看。当我在方程和代码之间留空行时和没有留空行时都会发生这种情况。我该如何解决这个问题?为什么会发生这种情况?
编辑一:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{listings}
\begin{document}
$\displaystyle y(t)=\frac{1}{12}-\frac{e^{2t}}{4}+\frac{e^{3t}}{6}$, for $t\ge 0$
\begin{lstlisting}[frame=single,breaklines=true]
clc;
clear all;
close all;
t=0:0.1:20;
y= 1/12 -exp(2*t)/4 + exp(3*t)/6;
G=tf(1,[2 -10 12]);
[y2, t2]=step(G,t);
subplot(2,2,1)
plot(t,y);
subplot(2,2,2)
plot(t2,y2);
\end{lstlisting}
\end{document}
答案1
您使用的\displaystyle
是数学模式的分数inline
。这会导致较大的分数超出基线以下。因此发生了冲突。
没有\displaystyle
:
它们不会冲突。因此,如果您\displaystyle
需要更多垂直空间,我们会通过aboveskip
列表提供这些空间。通过列表,aboveskip
您可以调整列表和其上方段落之间的间距。
使用aboveskip
合适的dimension
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{listings}
\begin{document}
$\displaystyle y(t)=\frac{1}{12}-\frac{e^{2t}}{4}+\frac{e^{3t}}{6}$, for $t\ge 0$
\begin{lstlisting}[aboveskip=\baselineskip,frame=single,breaklines=true]
clc;
clear all;
close all;
t=0:0.1:20;
y= 1/12 -exp(2*t)/4 + exp(3*t)/6;
G=tf(1,[2 -10 12]);
[y2, t2]=step(G,t);
subplot(2,2,1)
plot(t,y);
subplot(2,2,2)
plot(t2,y2);
\end{lstlisting}
\end{document}
belowskip
如果你愿意的话,也有类似的。
附注:由于它是 matlab 代码,您可以考虑Jubobs matlab-prettifier或mcode
排版这些代码。matlab-prettifier
具有良好的功能。另请参阅这个问题及其答案。
答案2
你也可以直接使用displaymath
环境。这样就不需要做任何调整了:
笔记:
- 我还添加了
basicstyle=\ttfamily
。listsings
否则,代码(尤其是G=
内联的代码)看起来就不正确。
代码:
\documentclass[12pt]{article}
\usepackage{amsmath}
%\usepackage{unicode-math}
\usepackage{listings}
\begin{document}
\begin{equation*}
y(t)=\frac{1}{12}-\frac{e^{2t}}{4}+\frac{e^{3t}}{6}, \text{ for } t\ge 0
\end{equation*}
%
\begin{lstlisting}[frame=single,breaklines=true,basicstyle=\ttfamily]
clc;
clear all;
close all;
t=0:0.1:20;
y= 1/12 -exp(2*t)/4 + exp(3*t)/6;
G=tf(1,[2 -10 12]);
[y2, t2]=step(G,t);
subplot(2,2,1)
plot(t,y);
subplot(2,2,2)
plot(t2,y2);
\end{lstlisting}
\end{document}