我正在生成一个 LaTeX 文档,如下所示:
\documentclass{article}
\usepackage[letterpaper, margin=0.75in]{geometry}
\usepackage[tocindentauto]{tocstyle}
\usetocstyle{standard}
\usepackage{parskip}% http://ctan.org/pkg/parskip
\usepackage[hidelinks]{hyperref}
\usepackage{spverbatim}
\usepackage{listings}
...
\subsubsection{HEADER\_SNTP\_POLL\_FAILURE}
Request function: \verb#SNTP_POLL_FAILURE#
Assignments: \begin{lstlisting}
msg = some_interesting_function_call(&etc)
\end{lstlisting}
我遇到的困难有两个:
- 标题不可搜索。如果用户搜索“HEADER_SNTP_POLL_FAILURE”,则无法找到子节标题。但是,在 \verb 内的“请求函数”文本中可以找到“SNTP_POLL_FAILURE”。
- 如果用户搜索“some_interesting_function_call”,他们将无法在列表中找到结果。如果我将文本从 PDF 复制到终端,结果如下:s ome interestingfunctionca ll 这使得代码列表变得毫无用处,因为它使得使用该文档作为参考变得非常尴尬。
我该如何解决这个问题?我希望列表可以用作复制粘贴源,并且我希望能够在列表和章节标题中搜索符号。
答案1
该minted
包使代码片段可搜索和复制。该包提供语法着色,并支持使用环境选项 进行换行breaklines=true
。如果您不想着色,text
可以使用词法分析器。使用 运行pdflatex --shell-escape
。此外,pygmentize
必须在系统上安装(例如,参见如何在 MikTeX 和 Windows 7 下使用 minted?或者我无法让 minted 包在 Ubuntu 下运行(pygments 错误))。
梅威瑟:
\documentclass{article}
\usepackage{minted}
\begin{document}
\section{HEADER\_SNTP\_POLL\_FAILURE}
Request function: \verb#SNTP_POLL_FAILURE#\\
Assignments:
\begin{minted}[breaklines=true]{cpp} % C++ lexer
msg = some_interesting_function_call(&etc)
VectorHistogram::VectorHistogram(size_t bins, size_t cache) : bins(std::vector<double>(bins)), cache(std::min(cache, MAX_CACHE_ENTRIES)) {}
\end{minted}
\end{document}
结果: