미니페이지에 목록 목록을 넣으면 xleftmargin 설정이 중단됩니다.

미니페이지에 목록 목록을 넣으면 xleftmargin 설정이 중단됩니다.

측면 주위에 약간의 공간이 있는 회색 상자에 목록을 표시하고 싶습니다. 제가 좋아하는 방식으로
설정해봤습니다 .\lstset

\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries
,commentstyle=\itshape\color{green},
xleftmargin=\parindent,  <<--- minipage breaks this setting.
backgroundcolor=\color{light-gray},
framexleftmargin=\parindent,
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tb, framerule=0pt}

나는 짧은 목록에서 페이지 나누기를 원하지 않습니다. 미니페이지를 사용하여 이 문제를 해결했습니다. 그러나 이로 인해 마진 설정이 중단됩니다.

\documentclass[]{article}
\usepackage{float}
\usepackage{listings} 
\usepackage{color}
\usepackage[margin=1in]{geometry}
%\usepackage{fontspec}
%\setmonofont{Bitstream Vera Sans Mono}[Scale=0.85]
\definecolor{light-gray}{gray}{0.95}
\definecolor{darkgreen}{RGB}{0,64,0}
\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries,commentstyle=\itshape    \color{darkgreen}, xleftmargin=\parindent,backgroundcolor=\color{light-gray},
framexleftmargin=\parindent,
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tb, framerule=0pt}
\begin{document}
\section{listing}
\noindent
\begin{minipage}[H]{\linewidth}
\begin{lstlisting}[language=Delphi,caption={get the next block},label={ref:bitset_next},
                   keywords={function,int,asm,end},xleftmargin=\parindent]
function bitset.next(previous_block_index: int): int;
//***************************************************************************
//pseudo code:
//***************************************************************************
//Load the bitset into a register
//shift out the bits that we've already processed
//count the number of inactive blocks
//next_block_index = previous_block_index + inactive_blocks_inbetween + 1
asm
  //rcx = self = pointer to bitset
  //edx = previous_block_index
  mov rax,[rcx]            //rax = bitset.
  lea ecx,[edx+1]          //go to the next bit    
  shr rax,cl               //shift out the bits we've already processed
  tzcnt rax,rax            //count empty positions to skip
  add eax,ecx              //return (prev+1+empty positions found)
end;  
\end{lstlisting}
\end{minipage}
\end{document}

그러면 다음과 같은 출력이 생성됩니다.

여기에 이미지 설명을 입력하세요

\noindent및 를 제거하면 minipage다음과 같습니다.

여기에 이미지 설명을 입력하세요

목록 내부에 올바른 들여쓰기가 있습니다. 목록 내부에 페이지 나누기를 포함하지 않고 회색 상자 내부에 올바른 간격을 유지하려면 어떻게 해야 합니까?

난 노력 했어

\begin{lstlisting}[float,floatplacement=H]

그러나 이는 위와 동일한 출력을 생성합니다 minipage.

답변1

@egreg에게 감사드립니다. 나는 여기서 답을 찾았습니다.미니페이지에서 동일한 parskip을 유지하는 방법

위에 링크된 답변을 복사하여 붙여넣기만 하면 나머지 텍스트 이상으로 확장되는 회색 배경이 생성되므로 일부 조정이 필요합니다.

\parindent해결 방법은 내부 변수를 대체할 새로운 고정 길이를 정의하는 것입니다 minipage.

다음 변경으로 문제가 해결됩니다.

\newlength{\listingindent}                %declare a new length
\setlength{\listingindent}{\parindent}    %make it a fixed version of \parindent
\lstset{basicstyle=\ttfamily,keywordstyle=\bfseries,commentstyle=\itshape\color{darkgreen},backgroundcolor=\color{light-gray},
xleftmargin=\listingindent,         <<-- make fixed 
framexleftmargin=\listingindent,    <<-- make fixed
framextopmargin=6pt,
framexbottommargin=6pt, 
frame=tlrb, framerule=0pt,linewidth=\linewidth}
....
\noindent      <<-- force noident, or the frame will appear out of bounds
\begin{minipage}[H]{\linewidth}
\begin{lstlisting}[language=Delphi,caption={get the next block},label={ref:bitset_next},
                   keywords={function,int,asm,end}]
function bitset.next(previous_block_index: int): int;
...
\end{lstlisting}
\end{minipage}

이제 다음과 같이 보입니다.

여기에 이미지 설명을 입력하세요

목록 중간에 페이지 나누기가 없고 배경이 잘못 정렬되지 않습니다.

관련 정보