带有列表的两列环境

带有列表的两列环境

为了减少复制粘贴,我想创建一个环境,生成一个带有标题的两列表格和两个不同语言的列表,如下所示:

\begin{tabular}{l l}
Python & Haskell \\
\hline \\
\lstset{language=Python}
\begin{lstlisting}
A
\end{lstlisting}
&
\lstset{language=Haskell}
\begin{lstlisting}
B
\end{lstlisting}
\end{tabular}

我想像下面这样使用它,隐藏除代码之外的所有内容:

\begin{comparison}
A
\vs
B
\end{comparison}

到目前为止,我尝试使用 创建两个新环境(而不是\vs内部命令)\lstnewenvironment,其中第一个环境有\tabularx命令,第二个环境有。我还尝试为这个表格\endtabularx创建常规,用于命令并手动插入和代码,但是当我放入里面时它停止了编译。\newenvironment&\vs\begin{lstlistings}\end{lstlistings}lstlistings

我怎样才能创建这样的环境?

编辑:到目前为止我想到的最紧凑的版本是

\newenvironment{comparison}
{\begin{parcolumns}[nofirstindent,distance=0pt,colwidths={1=0.35\textwidth}]{2}}
{\end{parcolumns}}

\lstnewenvironment{python}
{Python
\lstset{language=Python,frame=t}}
{}

\lstnewenvironment{haskell}
{Haskell
\lstset{language=Haskell,frame=t}}
{}

用法如下:

\begin{comparison}
\colchunk{
\begin{python}
A
\end{python}
}
\colchunk{
\begin{haskell}
B
\end{haskell}
}
\end{comparison}

我仍然无法隐藏\colchunk{}pythonhaskell环境中。

答案1

您想要做的事情对于lstlisting环境来说是不可能的,因为它们的内容是逐字的。但是,您可以使用\lstinputlisting

以下方法使用宏而不是环境,并且需要使用/写入外部文件,但它可能很有用。

  1. 键入 Python 和 Haskell 源文件(在.tex文件外部或内部,使用filecontents)。
  2. 调用\comparison宏,它接受两个参数;第一个是 Python 源文件的相对路径,第二个是 Haskell 源文件的相对路径。

在此处输入图片描述

\documentclass{article}

\usepackage[margin=2cm]{geometry} % the listings won't fit on the page otherwise
\usepackage{listings,xcolor}
\usepackage{filecontents}

\newcommand\comparison[2]%
{%
    \begin{minipage}[t]{.45\textwidth}
        \centering \textbf{Python}\\
        \lstinputlisting[frame=single,language=Python]{#1}
    \end{minipage}
    \hfill
    \begin{minipage}[t]{.45\textwidth}
        \centering \textbf{Haskell}\\
        \lstinputlisting[frame=single,language=Haskell]{#2}
    \end{minipage}
}

% Source file for Hello World in Python
\begin{filecontents*}{HelloWorldPython.py}
print "Hello, World!"
\end{filecontents*}

% Source file for Hello World in Haskell
\begin{filecontents*}{HelloWorldHaskell.hs}
module Main where
main :: IO ()
main = putStrLn "Hello, World!""
\end{filecontents*}

\begin{document}

\comparison{HelloWorldPython.py}{HelloWorldHaskell.hs}

\end{document}

相关内容