为什么以下代码会产生溢出错误以及如何避免这种情况?
\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}