如何处理列表、fancyvrb、newfloat 和标题?

如何处理列表、fancyvrb、newfloat 和标题?

我正在为大学准备一篇“小论文”,需要展示大量代码(C、C++、gnuplot、LaTeX 等)——因此我花了今晚的时间阅读和listingsfancyvrb后者我已经与newfloat- 和caption- 包一起使用了。前者在我的第一次实验中看起来非常有吸引力和方便(换行、索引、没有浮动主体的标题……)。

所有四个软件包都相互兼容,但我感到困惑,例如,caption listings,提供标题功能,或两者兼有,newfloat并且listings,可用于创建“列表表”等......

恐怕我没有具体的问题……我更想寻求有关如何一起使用这四个包的提示或建议。例如:我应该将浮动/标题管理分配给newfloat并且caption只分配给吗?哪个代码包应该“完成主要工作”?是否可以使用各自的“列表列表”定义独立的代码环境?是否有一种方便的方法来生成不同风格的内联列表?等等。

如果您能为我提供一个良好的开端并给我指明一个有希望的方向,我将非常高兴,这样我就可以——如果有必要——在设置一切的过程中提出更精确的问题。

答案1

从您的问题来看,您似乎需要能够用多种语言编写代码、为列表提供标题以及创建“列表列表”。在这种情况下,listings该套餐为您提供您所需的一切。

  1. \lstlistoflistings允许您创建所有带标题列表的列表。您甚至可以毫不费力地为每种语言创建独立的列表;请参阅下面的示例代码,其中为 LaTeX、C++ 和 Gnuplot 列表定义了环境,每个列表都有自己的计数器和列表列表。

  2. 它提供了许多预定义语言(其中包括您提到的 C、C++、Gnuplot、LaTeX),您可以进一步自定义它们。

  3. 它提供了自己的字幕机制,但如果你使用caption包来定制您的标题,如果需要,您可以轻松覆盖列表设置。

  4. 默认情况下,长列表不会浮动,并且可以进行分页。使用float键,您的列表将被视为浮动对象(在某些情况下可能很方便);但请注意,浮动对象不允许进行分页。

caption软件包将允许您自定义字幕的外观和感觉。该软件包与 配合使用listings

newfloat只有在需要使用新类型的浮动对象时才会使用,这对于您的代码片段来说似乎没有必要;正如我之前提到的,您可以轻松地将lstlisting环境变成浮动对象(如果需要),而无需任何新的包

简而言之,我想说(根据您的问题判断),这listings是可行的方法,caption如果您想改变字幕的感觉和外观,最终可以使用它。

一个简单的示例,展示了您可以多么快速地使用该包为您的列表设置自定义环境listings;我定义了两个环境,一个用于 C++ 代码,另一个用于 LaTeX。

我使用该caption包来更改标题标签和分隔符使用的默认字体:

\documentclass{article}
\usepackage{caption}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage{beramono}

% some colors for the listings
\colorlet{cppkeyword}{teal}
\colorlet{latexkeyword}{green!50!black}
\colorlet{gnuplotkeyword}{magenta!60!black}
\colorlet{gnuplotcomment}{teal}
\colorlet{symb}{red!50!black}
\colorlet{comm}{brown}

% for captions: boldfaced labels, separator=period
\captionsetup[lstlisting]{labelfont=bf,labelsep=period}

% style for c++ listings
\lstdefinestyle{cpp}{%
  language=C++,
  keywordstyle=\bfseries\color{cppkeyword},
  literate=%
    {\{}{\textcolor{symb}{\{}}1
    {\}}{\textcolor{symb}{\}}}1
    {(}{\textcolor{symb}{(}}1
    {)}{\textcolor{symb}{)}}1
    {;}{\textcolor{symb}{;}}1
}

% style for LaTeX listings
\lstdefinestyle{latex}{%
  language=[LaTeX]{TeX},
  texcsstyle=*\bfseries\color{latexkeyword}, 
  literate=%
    {\{}{\textcolor{symb}{\{}}1
    {\}}{\textcolor{symb}{\}}}1
    {(}{\textcolor{symb}{(}}1
    {)}{\textcolor{symb}{)}}1
    {\%}{\textcolor{comm}{\%}}1
}

% style for Gnuplot listings
\lstdefinestyle{gnuplot}{%
  language=Gnuplot,
  keywordstyle=\bfseries\color{gnuplotkeyword},
  commentstyle={\itshape\color{gnuplotcomment}},
  literate=%
    {"}{\textcolor{symb}{"}}1
}

% Common style for all listings
\lstset{
  basicstyle=\small\ttfamily,
  columns=fullflexible,
  tabsize=3
}

% We tweak the default settings for C++ listings
\renewcommand\lstlistlistingname{\texttt{C++} listings}

\lstnewenvironment{cpp}[1][]{%
  \renewcommand\lstlistingname{\texttt{C++} listing}
  \lstset{style=cpp,#1}}{}

% Counters for LaTeX and Gnuplot listings and an auxiliary counter
\newcounter{latexlst}
\newcounter{gnuplotlst}
\newcounter{tmp}

\makeatletter
% Environment for LaTeX listings; extension for auxiliar file: lll
\lstnewenvironment{latex}[1][]{%
  \renewcommand\lstlistingname{\LaTeX\ listing}
  \setcounter{tmp}{\value{lstlisting}}
  \setcounter{lstlisting}{\value{latexlst}}
  \lstset{style=latex,nolol,#1}
}{%
  \refstepcounter{latexlst}
  \addcontentsline{lll}{lstlisting}{\protect\numberline{\thelstlisting}\lst@@caption}%
  \setcounter{lstlisting}{\value{tmp}}
}

% Settings for the List of LaTeX listings
\newcommand\lstlistoflatexlistings{%
  \bgroup
  \renewcommand\lstlistlistingname{\LaTeX\ listings}
  \let\contentsname\lstlistlistingname
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lll}}%
  \tableofcontents
  \egroup%
}

% Environment for Gnuplot listings; extension for auxiliar file: lgl
\lstnewenvironment{gnuplot}[1][]{%
  \renewcommand\lstlistingname{\texttt{Gnuplot} listing}
  \setcounter{tmp}{\value{lstlisting}}
  \setcounter{lstlisting}{\value{gnuplotlst}}
  \lstset{style=gnuplot,nolol,#1}
}{%
  \refstepcounter{gnuplotlst}
  \addcontentsline{lgl}{lstlisting}{\protect\numberline{\thelstlisting}\lst@@caption}%
  \setcounter{lstlisting}{\value{tmp}}
}

% Settings for the List of Gnuplot listings
\newcommand\lstlistofgnuplotlistings{%
  \bgroup
  \renewcommand\lstlistlistingname{\texttt{Gnuplot} listings}
  \let\contentsname\lstlistlistingname
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lgl}}%
  \tableofcontents
  \egroup%
}
\makeatother

\begin{document}

\lstlistoflistings
\lstlistoflatexlistings
\lstlistofgnuplotlistings

\begin{cpp}[caption={test code for \texttt{C++}},label={lst:c++}]
long some_function();
int other_function(); 

int calling_function()
{
        long test1;
        int test2;
}
\end{cpp}

\begin{latex}[caption={test code for \LaTeX},label={lst:latex}]
\newcommand\mycom[1]{%
    \fbox{#1}%
}
\end{latex}

\begin{gnuplot}[caption={test code for \texttt{Gnuplot}},label={lst:gnuplot}]
# 1st step
set term "table"
set output "temp.dat"
splot ....
\end{gnuplot}

\LaTeX code: \lstinline[style=latex]{\documentclass}\par
\texttt{Gnuplot} code: \lstinline[style=gnuplot]{set output "temp.dat"}\par
\texttt{C++} code: \lstinline[style=cpp]{int calling_function()}

\end{document}

在此处输入图片描述

相关内容