为了减少复制粘贴,我想创建一个环境,生成一个带有标题的两列表格和两个不同语言的列表,如下所示:
\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{}
在python
或haskell
环境中。
答案1
您想要做的事情对于lstlisting
环境来说是不可能的,因为它们的内容是逐字的。但是,您可以使用\lstinputlisting
。
以下方法使用宏而不是环境,并且需要使用/写入外部文件,但它可能很有用。
- 键入 Python 和 Haskell 源文件(在
.tex
文件外部或内部,使用filecontents
)。 - 调用
\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}