这个问题之后如何在 LaTeX 中实现不同编程语言代码的类似显示它会在独立的 pdf 文档中打印代码(例如,仅在一个 pdf 页面中就有 1000 行代码),我在将该代码与我的主要论文 tex 文件一起使用时遇到了问题。我的意思是,由于代码文档的文档类型和我的文档代码似乎不同,tex 在编译 tex 代码的过程中停止了。此外,无法将长代码作为图形导入主 tex 文件(因为它比标准 A4 pdf 文件大)。
我该如何调整回答的代码能够将其打印在两到三个 pdf 页面中而不是单个长 pdf 页面中吗?
答案1
将 替换\documentclass[...]{standalone}
为您自己的\documentclass{<xxx>}
,其中<xxx>
可以替换为任何可用的类别,如article
、book
、report
等。您将获得跨越多页的列表。
\documentclass[a4paper,11pt,twoside,openany,dvipsnames]{book}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{accsupp}
\newcommand*{\noaccsupp}[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}}
\lstdefinestyle{Common}
{
basicstyle=\scriptsize\ttfamily\null,
numbers=left,
numbersep=1em,
frame=single,
framesep=\fboxsep,
framerule=\fboxrule,
xleftmargin=\dimexpr\fboxsep+\fboxrule,
xrightmargin=\dimexpr\fboxsep+\fboxrule,
breaklines=true,
breakindent=0pt,
tabsize=5,
columns=flexible,
showstringspaces=false,
captionpos=b,% or t for top (default)
abovecaptionskip=0.5\smallskipamount, % there is also belowcaptionskip
}
\lstdefinestyle{CSharp}
{
style=Common,
language={[Sharp]C},
alsolanguage={[LaTeX]TeX},
morekeywords=
{
% add your new fortran keywords here!
},
}
\lstdefinestyle{CSFall}
{
style=CSharp,
backgroundcolor=\color{Blue},
basicstyle=\color{Yellow}\scriptsize\ttfamily,
keywordstyle=\color{White}\sffamily,
identifierstyle=\color{Cyan}\bfseries,
commentstyle=\color{ForestGreen},
stringstyle=\color{Maroon},
numberstyle=\color{Black}\tiny\noaccsupp,
rulecolor=\color{Black},
}
\lstnewenvironment{CSFall}
{\lstset{style=CSFall}}
{}
\usepackage{filecontents}
\begin{filecontents*}{csharp.cs}
public class DoubleFormatter : IFormatProvider, ICustomFormatter
{
// always use dot separator for doubles
private CultureInfo enUsCulture = CultureInfo.GetCultureInfo("en-US");
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (arg is double)
{
if (string.IsNullOrEmpty(format))
{
// by default, format doubles to 3 decimal places
return string.Format(enUsCulture, "{0:0.000}", arg);
}
else
{
// if user supplied own format use it
return ((double)arg).ToString(format, enUsCulture);
}
}
// format everything else normally
if (arg is IFormattable)
return ((IFormattable)arg).ToString(format, formatProvider);
else
return arg.ToString();
}
public object GetFormat(Type formatType)
{
return (formatType == typeof(ICustomFormatter)) ? this : null;
}
}
\end{filecontents*}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\lstinputlisting[style=CSFall,caption={An example of C\# code.}]{csharp.cs}
\lipsum[2]
\end{document}