主要編輯

主要編輯

使用以下代码时,我的列表环境的背景颜色会出现一些故障:

在此处输入图片描述

我该如何避免这些问题?除了这个问题之外,顶部和底部的边距也不同。代码框应该位于两个段落之间。

\documentclass{article}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{xeCJK}
\usepackage{parskip}
\usepackage{lstfiracode}

\setCJKmainfont{ipaexm.ttf}
\setmonofont{Fira Code}

\lstset{
  language=C,
  style=FiraCodeStyle,
  basicstyle=\setlength{\lineskip}{0pt}\ttfamily\footnotesize,
  commentstyle=\rmfamily\itshape\color{gray},
  backgroundcolor=\color{lightgray},
  frame=single,
  framerule=0pt,
  framextopmargin=3ex,
  framexbottommargin=3ex,
  framexleftmargin=1em,
  xleftmargin={\dimexpr 1em+3pt},
  linewidth={\dimexpr \linewidth-3pt}
}

\begin{document}
\lipsum[1][1-3]
\begin{lstlisting}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{lstlisting}
\lipsum[2][1-3]
\end{document}

答案1

主要編輯

tcolorbox我使用和重写了整个示例minted。我将保留旧的解决方案,因为它运行正常并且更接近原始要求。

如果 pygments 未安装且不在路径中

更新你的 TeX-Distribution。在安装和/或路径问题未解决之前,可以使用以下方法:

latexmk -lualatex -shell-escape foo.tex
\documentclass{article}
\usepackage{fontspec}
\usepackage{blindtext}
% \usepackage{xeCJK}
\usepackage{parskip}
\usepackage{lstfiracode}
\usepackage[
    listings
    % minted
]{tcolorbox}
% \usepackage{minted}

% \setCJKmainfont{ipaexm.ttf}
% \setmonofont{Fira Code}

\begin{document}
\blindtext[1]

\begin{tcblisting}{
    % listing engine=minted,
    % minted style=trac,
    % minted language=c,
    listing only,
    boxrule=1pt,
}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{tcblisting}

\blindtext[2]
\end{document}

新版本

这提供了漂亮的语法高亮,几乎没有留下任何想象空间:

\documentclass{article}
\usepackage{fontspec}
\usepackage{lipsum}
% \usepackage{xeCJK}
\usepackage{parskip}
\usepackage{lstfiracode}
\usepackage[most,minted]{tcolorbox}
\usepackage{minted}

% \setCJKmainfont{ipaexm.ttf}
% \setmonofont{Fira Code}

\begin{document}
\lipsum[1][1-3]

\begin{tcblisting}{
    listing engine=minted,
    minted style=trac,
    minted language=c,
    listing only,
    boxrule=1pt,
}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{tcblisting}

\lipsum[2][1-3]
\end{document}

输出效果非常好,并且高度可定制:

tcolorbox 和 minted 新品上市

旧版本

嗯,你的问题有很多解决方案:

甚至在这里:

然而,似乎总是有一个陷阱。这个似乎很可靠:

\documentclass{article}
\usepackage{fontspec}
\usepackage{listings}
\usepackage{adjustbox}
\usepackage{lipsum}
\usepackage{xcolor}
% \usepackage{xeCJK}
\usepackage{parskip}
\usepackage{lstfiracode}
\usepackage[framemethod=tikz]{mdframed}

% \setCJKmainfont{ipaexm.ttf}
% \setmonofont{Fira Code}

\definecolor{light-gray}{gray}{0.75}

\lstset{
  language=C,
  style=FiraCodeStyle,
  basicstyle=\setlength{\lineskip}{0pt}\ttfamily\footnotesize,
  commentstyle=\rmfamily\itshape\color{gray},
%   frame=single,
%   framerule=0pt,
%   framextopmargin=3ex,
%   framexbottommargin=3ex,
%   framexleftmargin=1em,
%   xleftmargin={\dimexpr 1em+3pt},
%   linewidth={\dimexpr \linewidth-3pt},
  aboveskip=1.5em,
  belowskip=1em,
}

\surroundwithmdframed[
  hidealllines=true,
  backgroundcolor=light-gray,
  innerleftmargin=15pt,
  innertopmargin=0pt,
  innerbottommargin=0pt]{lstlisting}

\mdfsetup{skipabove=1.5em,skipbelow=1em}

\begin{document}
\lipsum[1][1-3]

\begin{lstlisting}
int main(int argc, char * argv[]) {
    printf("hello, world!\n");
}
\end{lstlisting}

\lipsum[2][1-3]
\end{document}

输出结果如下:

在此处输入图片描述

相关内容