我用quoting
包来设置我的硕士论文中的引用。在以下 MWE 中,我发现了一个奇怪的错误。
\documentclass[12pt,a4paper]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{quoting}
\usepackage{blindtext}
\begin{document}
\blindtext
\begin{quoting}[font={small}]
\blindtext
\end{quoting}
\blindtext
\chapter{Test}
\blindtext
\begin{quoting}[font={small}]
\blindtext
\end{quoting}
\blindtext
\end{document}
代码产生错误
\do 未定义。\begin{quoting}[font={small}]
当将其font={small}
设置为包选项时,不会发生该错误。
我该如何修复它?
MWE 在writelatex.com
答案1
\do
是一个“临时”控制序列,在 LaTeX 的内部宏中很多地方使用。
通常它有在文档开头有一个定义,没有人应该依赖它,但是当类是时,这种情况不会发生scrreprt
;问题是typearea.sty
在第 206 行,说\let\do\relax
。
quoting
不幸的是,\renewcommand*{\do}{...}
并且,根据 留下的设置typearea
,这是非法的。
解决这个问题的唯一方法是重新定义引用中的几个键:
\documentclass[12pt,a4paper]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{quoting}
\makeatletter
\define@key{quo}{font}{%
\def\quotingfont{}%
\def\do##1{\appto{\quotingfont}{\csname ##1\endcsname}}%
\docsvlist{#1}%
}
\define@key{quo}{font+}{%
\def\do##1{\appto{\quotingfont}{\csname ##1\endcsname}}%
\docsvlist{#1}%
}
\makeatother
\usepackage{blindtext}
\begin{document}
\blindtext
\begin{quoting}[font={small}]
\blindtext
\end{quoting}
\blindtext
\chapter{Test}
\blindtext
\begin{quoting}[font={small}]
\blindtext
\end{quoting}
\blindtext
\end{document}
这样是否\do
定义就变得不重要了。\def
可以使用
\define@key{quo}{font}{%
\def\quotingfont{}%
\providecommand{\do}{}%
\renewcommand*{\do}[1]{\appto{\quotingfont}{\csname ##1\endcsname}}%
\docsvlist{#1}%
}
但是,因为\do
无论如何都要重新定义,所以使用\def
更容易。
请向 Thomas Tietze(又名 Lockstep)提交错误报告。