我现在在 Google 上搜索了一段时间,但找不到答案。所以再次提出问题:
我正在尝试将部分 C++ 源代码包含到 LaTeX 文档中,现在我正将其用于\lstinputlisting[language=C++, firstline=37, lastline=40]
此目的,这似乎很不错。唯一让我恼火的是,似乎不可能 a) 更改文本中源代码的字体类型。(看起来像 1997 年的,不像 2018 年的 :/ )b) 加宽文本和框架之间的空间(背景颜色)现在我的示例如下:
\usepackage{listings}
\lstset{ %
backgroundcolor=\color{gray},
basicstyle=\rmfamily,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
commentstyle=\color{mygreen},
extendedchars=true,
frame=single,
keepspaces=true,
keywordstyle=\color{blue},
language=c++,
numbers=none,
numbersep=5pt,
numberstyle=\tiny\color{blue},
rulecolor=\color{mygray},
showspaces=false,
showtabs=false,
stepnumber=5,
stringstyle=\color{mymauve},
tabsize=3,
title=\lstname
}
\begin{document}
\lstinputlisting[language=C++, firstline=37, lastline=300]{../source/document.cc}
/end{document}
我想让它看起来更像现在的 Github(这里有一个随机的 Github 页面,代表我希望代码看起来的样子:https://github.com/tesseract-ocr/tesseract/wiki/APIExample)
答案1
我建议basicstyle=\ttfamily
(有几种等宽字体可用)并且columns=fullflexible
。
在这里我猜出了你的颜色并将背景颜色改为更浅的灰色。
就输出而言,使用lstlisting
或是等效的。\lstinput
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\colorlet{mygray}{black!30}
\colorlet{mygreen}{green!60!blue}
\colorlet{mymauve}{red!60!blue}
\lstset{
backgroundcolor=\color{gray!10},
basicstyle=\ttfamily,
columns=fullflexible,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
commentstyle=\color{mygreen},
extendedchars=true,
frame=single,
keepspaces=true,
keywordstyle=\color{blue},
language=c++,
numbers=none,
numbersep=5pt,
numberstyle=\tiny\color{blue},
rulecolor=\color{mygray},
showspaces=false,
showtabs=false,
stepnumber=5,
stringstyle=\color{mymauve},
tabsize=3,
title=\lstname
}
\begin{document}
\begin{lstlisting}
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
int main()
{
char *outText;
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
// Open input image with leptonica library
Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
api->SetImage(image);
// Get OCR result
outText = api->GetUTF8Text();
printf("OCR output:\n%s", outText);
// Destroy used object and release memory
api->End();
delete [] outText;
pixDestroy(&image);
return 0;
}
\end{lstlisting}
\end{document}
另一种选择是minted
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{minted}
\begin{document}
\begin{minted}{c++}
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
int main()
{
char *outText;
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
// Initialize tesseract-ocr with English, without specifying tessdata path
if (api->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
// Open input image with leptonica library
Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
api->SetImage(image);
// Get OCR result
outText = api->GetUTF8Text();
printf("OCR output:\n%s", outText);
// Destroy used object and release memory
api->End();
delete [] outText;
pixDestroy(&image);
return 0;
}
\end{minted}
\end{document}
minted
如果你想要一个 21 世纪的等宽字体,下面是添加后的结果
\usepackage{sourcecodepro}
\setminted{fontsize=\footnotesize}
(或者您可以一开始就使用特定选项缩放字体)。