当与中\rotatebox
的非正交(非 90 的倍数)角度一起使用时,命令会产生错误。以下是示例:prebreak
\lstlisting
\documentclass{article}
\usepackage{graphicx, listings}
%\usepackage{makerobust}
%\MakeRobustCommand\rotatebox
\begin{document}
\begin{lstlisting}[
language={}, basicstyle=\ttfamily, frame=single,
breaklines=true, breakatwhitespace=true,
prebreak=\mbox{\space\rotatebox[origin=c]{45}{$<$}}
% prebreak=\mbox{\space\protect\rotatebox[origin=c]{45}{$<$}}
]
abcd00 efgh01 ijkl02 mnop03 qrst04 uvwx05 yzab06 cdef07 ghij08 klmn09 opqr10 stuv11 wxyz12
\end{lstlisting}
\end{document}
产生的错误是:
! Illegal unit of measure (pt inserted).
<to be read again>
\kern
l.13 abcd00
efgh01 ijkl02 mnop03 qrst04 uvwx05 yzab06 cdef07 ghij08 klmn09 o...
您可能已经注意到了评论,我已经知道这\rotatebox
很脆弱,并且尝试了这两种方法\protect
,\MakeRobustCommand
但都没有解决问题。一个有趣的观察是,当给定的旋转角度是 90 的倍数时,该命令有效。
答案1
这里的问题是listings
重新定义\space
了内部排版代码,但\rotatebox
依赖于原始定义。\rotatebox
必须根据传递的度数进行一些三角计算,因此错误只会在非平凡的旋转值时出现。
\space
一个简单的解决方法是在使用之前在本地恢复原始定义\rotatebox
:
\documentclass{article}
\usepackage{graphicx, listings}
\begin{document}
\begin{lstlisting}[
language={}, basicstyle=\ttfamily, frame=single,
breaklines=true, breakatwhitespace=true,
prebreak=\mbox{\space\def\space{ }\rotatebox[origin=c]{45}{$<$}}
]
abcd00 efgh01 ijkl02 mnop03 qrst04 uvwx05 yzab06 cdef07 ghij08 klmn09 opqr10 stuv11 wxyz12
\end{lstlisting}
\end{document}
输出