创建多行代码环境

创建多行代码环境

我想创建一个环境,使某些文本看起来像代码。即,我希望字体是等宽的,背景是浅灰色(准确地说是\definecolor{mygray}{gray}{0.9})。我还需要它有适当的缩进。但是,由于其他原因,我不想使用listingsminted包,并且我不需要自动用花哨的颜色突出显示代码(我想手动执行这些操作---在该环境中仍然可以使用和其他 LaTeX 命令,而不是将其显示为代码)。本质上,在该环境中,除了字体、背景颜色、我想要的字体大小和自动缩进(类似于\textbf)之外,所有内容都与普通文本完全相同。文本换行之类的属性应该保留。\scriptsizelistings

这是我目前得到的结果:

\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}

该语言还有许多其他选项,您甚至可以创建自己的语言。

相关内容