重写非浮动代码列表 Pandoc 兼容性

重写非浮动代码列表 Pandoc 兼容性

在一个上一个问题我询问是否可以使用fancyvrbfvextra满足以下要求在 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-crossrefPandoc 并采取其他做法则相当困难。

有没有办法重写 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

相关内容