
コード リストにキャプションを追加する 1 つの方法は次のとおりです。
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{caption}
\usepackage{float}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\captionsetup[subfloat]{margin=0.5em}
\begin{document}
\begin{codelisting}
\caption{test}
test
\end{codelisting}
\end{document}
しかし、私はないcodelisting
非常に長いリストでページ区切りを確実に実行したいので、要素をフロートにしたいです。
次のことを試しました:
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{caption}
\newenvironment{codelisting}{\captionsetup{type=listing}}{}
\begin{document}
\begin{codelisting}
\caption{test}
test
\end{codelisting}
\end{document}
しかしエラーが発生しました:
LaTeX エラー: カウンター「リスト」が定義されていません。
LaTeX の非 float 要素にキャプションを適用するにはどうすればよいですか? 具体的には、fancyvrb
およびfvextra
パッケージを使用したリストですか?
編集
@Skillmon のコメントに応えて。Pandoc は\label
内にネストしない\caption
ので、次のように試しました。
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\renewenvironment{codelisting}
{\captionsetup{type=codelisting}}
{}
\begin{document}
text pre
\begin{codelisting}
\label{test}
\caption{test}
\VerbatimInput[breaknonspaceingroup, breaklines, breakanywhere]{verbatim.py}
\end{codelisting}
text post
AS shown in Listing \ref{test}
\end{document}
これはコンパイルされますが、以下の画像に示すように参照は解決されません。
答え1
\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}
答え2
コメントで提案されていることを実行できないようですので、私のコメントで提案されていることを実行する回答を以下に示します。
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\renewenvironment{codelisting}
{\captionsetup{type=codelisting}}
{}
\begin{document}
text pre
\begin{codelisting}
\caption{test}
some code
\end{codelisting}
text post
\end{document}
正しい間隔で書かれたバージョンは次のとおりです (ネストした場合\VerbatimInput
などに間隔が正しいかどうかは確認していません)。
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\makeatletter
\renewenvironment{codelisting}
{%
\par
\vspace*{\intextsep}% vertical spacing as a float
\captionsetup{type=codelisting}%
}
{%
\par
\vspace*{\intextsep}% vertical spacing as a float
\@endpetrue % following text is only indented if blank line after \end
}
\makeatother
\begin{document}
text pre
\begin{codelisting}
\caption{test\label{code:works}}
some code
\end{codelisting}
text post \ref{code:works}
\end{document}
\label
内部にネストされていない上記の出力を取得するための代替入力\caption
:
\documentclass{article}
\usepackage{fancyvrb}
\usepackage{fvextra}
\usepackage{xcolor}
\usepackage{float}
\usepackage{caption}
\newfloat{codelisting}{h}{lop}
\floatname{codelisting}{Listing}
\makeatletter
\renewenvironment{codelisting}
{%
\par
\vspace*{\intextsep}% vertical spacing as a float
\captionsetup{type=codelisting}%
}
{%
\par
\vspace*{\intextsep}% vertical spacing as a float
\@endpetrue % following text is only indented if blank line after \end
}
\makeatother
\begin{document}
text pre
\begin{codelisting}
\caption{test}
\label{code:works}
some code
\end{codelisting}
text post \ref{code:works}
\end{document}
出力は同一に見えます (ただし、最適な入力構文は\label
必須引数 にネストされていることに注意してください\caption
。出力が同一に見えない境界ケースがあります)。