csquotes
我喜欢按照以下方式使用该包的功能:
\documentclass{scrbook}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new, babelshorthands=true]{german}
\usepackage[german=guillemets]{csquotes}
\MakeAutoQuote{>}{<}
\usepackage{libertine}
\usepackage{graphicx}
\begin{document}
>OuterQuote >InnerQuote< OuterQuote<
\end{document}
通过修改我发现它不能与graphicx
LuaLaTeX 下编译的包一起工作。我多次收到以下错误:
c:\texlive\2016\texmf-dist\tex\context\base\mkii\supp-pdf.mkii:136: Missing = inserted for \ifnum. [... \csname newcount\endcsname \scratchcounter]
但是,当我使用不同的自动引号(例如\MakeAutoQuote{»}{«}
)或在 PDFLaTeX 下使用稍作修改的上述代码时,它又可以正常工作了。有人能向我解释一下这个错误是什么意思,以及为什么使用 会导致这个错误吗\MakeAutoQuote{>}{<}
?
答案1
有一个简单的方法可以解决您的问题。只需更改包加载的顺序。graphicx
先加载csquotes
会有所帮助。
\documentclass{scrbook}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new, babelshorthands=true]{german}
\usepackage{graphicx}
\usepackage[german=guillemets]{csquotes}
\MakeAutoQuote{>}{<}
\usepackage{libertine}
\begin{document}
>OuterQuote >InnerQuote< OuterQuote<
\end{document}
更新:<
为了回答您的问题,这里有一个解释:正如 Ulrike Fischer 已经提到的,使用和作为主动角色总是很危险的>
。例如尝试
\ifnum 8<10\relax Quack\fi
这应该只比较两个数字,但它所做的却是打开一个报价。
同样的事情发生在您的错误指向的地方(您可能会在那里看到错误):
\def\@@mptopdf@@newabove\csname#1\endcsname#2% \dimen \name
{\csname#1\endcsname#2%
\ifnum\expandafter\@@mptopdf@@stripnewabove\meaning#2>20\else
\@@mptopdf@@newabove\csname#1\endcsname#2%
\fi}
\@@mptopdf@@newabove \csname newcount\endcsname \scratchcounter