在一个上一个问题我询问是否可以使用fancyvrb
并fvextra
满足以下要求在 LaTeX 中创建列表:
- 允许分页(非浮动)
- 换行
- 参考文献、标签和标题
事实证明,这可以按如下方式实现:
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\newenvironment{code}[2][]
{\captionof{codelisting}{#2}\ifx\relax#1\relax\else\label{#1}\fi}
{}
\begin{document}
\begin{code}{test}
test
\end{code}
foo
\begin{code}[lst:1]{testA} % with label
test
\end{code}
See Listing~\ref{lst:1}
\end{document}
通过替换环境的内容可以演示分页和换行的功能,code
如下所示:
\begin{code}[lst:1]{testA}
\VerbatimInput[breaknonspaceingroup, breaklines, breakanywhere]{verbatim.py}
\end{code}
verbatim.py
包含大量逐字代码的文件在哪里?
我做了什么不是在该问题中提到的是,我正在调整 Pandoc 的默认 LaTeX 模板,以便能够使用pandoc-crossref
过滤器创建此类列表。此过滤器仅生成如下所示的列表:
\begin{codelisting}
\caption{test}
\label{test}
verbatim content
\end{codelisting}
适应pandoc-crossref
Pandoc 并采取其他做法则相当困难。
有没有办法重写 LaTeX 代码来回答这个问题这样就可以编写\label
和宏\caption
之内环境而不是论点codelisting
?
答案1
您可以使用\captionsetup{type=...}
来启用诸如\caption
(和\label
)、子图(通过 subfig 或 subcaption 包)等功能:
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
% Re-define 'codelisting' as a non-floating environment
\renewenvironment{codelisting}[1][] % ignore optional positioning parameter
{\par\vskip\intextsep
\captionsetup{type=codelisting}%
\ignorespaces}
{\par\vskip\intextsep}
\begin{document}
\begin{codelisting}
\caption{test}
test
\end{codelisting}
foo
\begin{codelisting}
\caption{testA}
\label{lst:1}
test
\end{codelisting}
See Listing~\ref{lst:1}
\end{document}
PS:您的“编辑”示例代码如何将标题应用于非浮动列表根本不起作用,因为你把 放在\label
前面\caption
,而\label
必须放在 后面\caption
。(不幸的是,我还没有“声誉”对 Tex.SX 发表评论。)另请参阅:https://texfaq.org/FAQ-crossref