我想创建一个环境,使某些文本看起来像代码。即,我希望字体是等宽的,背景是浅灰色(准确地说是\definecolor{mygray}{gray}{0.9}
)。我还需要它有适当的缩进。但是,由于其他原因,我不想使用listings
或minted
包,并且我不需要自动用花哨的颜色突出显示代码(我想手动执行这些操作---在该环境中仍然可以使用和其他 LaTeX 命令,而不是将其显示为代码)。本质上,在该环境中,除了字体、背景颜色、我想要的字体大小和自动缩进(类似于\textbf
)之外,所有内容都与普通文本完全相同。文本换行之类的属性应该保留。\scriptsize
listings
这是我目前得到的结果:
\documentclass{article}
\usepackage[scaled=0.85]{beramono}
\newenvironment{monospace}{\ttfamily}{\par}
\newenvironment{code}{\begin{monospace}\begin{tabbing}}{\end{tabbing}\end{monospace}}
\begin{document}
\begin{code}
\textbf{def} \=weird(x,y):\\
\> a = math.sin(x)\\
\> b = math.cos(y)\\
\> c = math.tan(x+y)\\
\> s = (a+b+c)/3\\
\> \textbf{def} \=tant(n):\\
\> \> \textbf{return} math.tan((n+x+y)/3)\\
\> \textbf{return} \=math.cos(math.sin(tant(s)*\\
\> \> tant(a)*tant(b)*tant(c)))
\end{code}
\end{document}
当然,这样做的问题在于,创建正确的缩进非常繁琐,而且文本换行必须手动完成(最后一条语句被分成两行,因为我使用的是双列模式,如果没有手动换行,代码就会超出边距)。另外,我不知道如何添加背景颜色。任何帮助都非常感谢!
答案1
fancyvrb
如果您想要自动换行,最简单的方法可能是使用fvextra
。您可以从以下方式开始:
\documentclass[twocolumn]{article}
\usepackage[T1]{fontenc}
\usepackage[scaled=0.85]{beramono}
\usepackage{xcolor}
\definecolor{mygray}{gray}{0.9}
\usepackage{fvextra}
\usepackage{tcolorbox}
\newenvironment{code}%
{\VerbatimEnvironment
\begin{tcolorbox}[colback=mygray, boxsep=0pt, arc=0pt, boxrule=0pt]
\begin{Verbatim}[fontsize=\scriptsize, commandchars=\\\{\},
breaklines, breakafter=*, breaksymbolsep=0.5em,
breakaftersymbolpre={\,\tiny\ensuremath{\rfloor}}]}%
{\end{Verbatim}%
\end{tcolorbox}}
\begin{document}
\begin{code}
\textbf{def} weird(x,y):
a = math.sin(x)
b = math.cos(y)
c = math.tan(x+y)
s = (a+b+c)/3
\textbf{def} tant(n):
\textbf{return} math.tan((n+x+y)/3)
\textbf{return} math.cos(math.sin(tant(s)*tant(a)*tant(b)*tant(c)))
\end{code}
\end{document}
答案2
您可以使用 verbatim 包或 listing 包在 LaTeX 中插入源代码,我更喜欢这个,因为它为您提供了更多选项。
这是您需要的代码:
\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=python]
def weird(x,y):
a = math.sin(x)
b = math.cos(y)
c = math.tan(x+y)
s = (a+b+c)/3
def tant(n):
return math.tan((n+x+y)/3)
return math.cos(math.sin(tant(s)*
tant(a)*tant(b)*tant(c)))
\end{lstlisting}
\end{document}
该语言还有许多其他选项,您甚至可以创建自己的语言。