csquotes \MakeAutoQuote{>}{

csquotes \MakeAutoQuote{>}{

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}

通过修改我发现它不能与graphicxLuaLaTeX 下编译的包一起工作。我多次收到以下错误:

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

相关内容