使用 addmargin (KOMA-Script) 和 SideBySideExample (fvrb-ex) 实现溢出框

使用 addmargin (KOMA-Script) 和 SideBySideExample (fvrb-ex) 实现溢出框

为什么以下代码会产生溢出错误以及如何避免这种情况?

\documentclass{scrartcl}
\usepackage{fvrb-ex}
\begin{document}
  \begin{addmargin}[4em]{0em}
    \begin{SideBySideExample}[xrightmargin=3cm]
      a
    \end{SideBySideExample}
  \end{addmargin}
\end{document}

答案1

作为埃格尔在他的评论中正确指出,SideBySideExample 的定义使用\textwidth而不是(参见原始定义中\linewidth第一行之后的行):\end{minipage}

\newcommand{\SideBySide@Example}[1]{%
\@tempdimb=\FV@XRightMargin
\advance\@tempdimb -5mm
\begin{minipage}[c]{\@tempdimb}
\fvset{xrightmargin=0pt}
\catcode‘\^^a3=9\relax%
\NoHighlight@Attributes % To suppress possible highlighting
#1
\end{minipage}%
\@tempdimb=\textwidth
\advance\@tempdimb -\FV@XRightMargin
\advance\@tempdimb 5mm
\begin{minipage}[c]{\@tempdimb}
\VerbatimInput[gobble=0,commentchar=^^a3,commandchars=^^a7^^b5^^b6,numbersep=3pt,
xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
\end{minipage}}

可以将其更改为使用\linewidth,例如,直接重新定义,或者为了简洁,使用etoolbox包来修补命令:

\documentclass{scrartcl}
\usepackage{fvrb-ex}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\SideBySide@Example}{\@tempdimb=\textwidth}{\@tempdimb=\linewidth}{}{}
\makeatother

\begin{document}
  \begin{addmargin}[4em]{0em}
    \begin{SideBySideExample}[xrightmargin=6cm]
      a
    \end{SideBySideExample}
  \end{addmargin}
\end{document}

相关内容