편집하다

편집하다

코드 목록에 캡션을 추가하는 한 가지 방법은 다음과 같습니다.

\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의 non-float 요소에 어떻게 캡션을 적용할 수 있나요? 특히 fancyvrbfvextra패키지를 사용하는 목록은 무엇입니까?

편집하다

@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. 출력이 동일해 보이지 않을 수 있는 경계선 경우가 있습니다.

관련 정보