我的问题与这个问题密切相关:当 \blockcquote 以列表结尾时,如何避免将引用放在新行上?
我设法将上述问题中提出的解决方案应用到我的论文中。我删除了所有blockquote
相关部分,并添加了一个enit@
前缀来列出相关命令以应对 的enumitem
变化。此外,我更改了 的重新定义,displaycquote
以便将可选参数考虑在内。(确切的代码可以在下面找到。)
但是,我的论文风格指南要求我在引用块周围添加引号。我需要扩展上面链接的解决方案,以便它也将结束引号放在块的末尾itemize
。
最初,为了用displaycquote
引号引起来,我使用了更新\mkbegdispquote
和\mkenddispquote
:
\renewcommand{\mkbegdispquote}[2]{\openautoquote}
\renewcommand{\mkenddispquote}[2]{\closeautoquote#1#2}
但是,这不起作用,因为输出如下所示:
我遇到的另一个问题是,末尾没有的块引用itemize
没有任何引用。
这是我当前的工作版本:
\documentclass{scrbook}
\usepackage{enumitem}
\usepackage{csquotes}
\usepackage{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{references.bib}
@book{texbook,
author = {Donald E. Knuth},
title = {The {{\TeX}book}},
publisher = {Addison-Wesley},
date = {1984}
}
\end{filecontents*}
\addbibresource{references.bib}
\makeatletter
\let\oldendlist\enit@endlist
\def\csq@@z{\csq@z{\csq@z}}
\def\csq@@@z{\end{displaycquote}}
\long\def\cqendlist#1\fi#2\fi#3#4{%
\def\z{#3{#4}}%
\ifx\z\csq@@@z\let\z\csq@@z\fi
\ifx\z\csq@@z
\ifhmode\unskip\fi
\leavevmode
\space \zcsqcite
\gdef\cs@next{\let\csq@cite\@gobble}%
\else
\global\let\cs@next\relax
\fi
\oldendlist#1\fi#2\fi#3{#4}%
\cs@next
}
\let\olddcq\displaycquote
\renewcommand\displaycquote[2][]{%
\def\zcsqcite{\csq@cite[#1]{#2}}%
\let\enit@enditemize\cqendlist
\olddcq{#1}}
\let\oldedcq\enddisplaycquote
\def\enddisplaycquote{%
\cs@next
\oldedcq}
\makeatother
\begin{document}
\begin{displaycquote}[pp.88:2-3]{texbook}
This is a list:
\begin{itemize}
\item with
\item bullet
\item points
\end{itemize}
\end{displaycquote}.
\end{document}
答案1
我设法解决了这个问题。主要问题是\openautoquote
和\closeautoquote
不能放在不同级别的环境中,也就是说,如果在displaycquote
环境本身中有一个,在嵌套itemize
环境中有一个,就会破坏代码。我现在选择改为。此代码现在对我\mkenddispquote
有用\cqs@cite
:
\documentclass{scrbook}
\usepackage{enumitem}
\usepackage{csquotes}
\usepackage{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{references.bib}
@book{texbook,
author = {Donald E. Knuth},
title = {The {{\TeX}book}},
publisher = {Addison-Wesley},
date = {1984}
}
\end{filecontents*}
\addbibresource{references.bib}
% Use quotation marks in block quotes
\renewcommand\mkbegdispquote[2]{``}
\renewcommand\mkenddispquote[2]{''#1#2}
\makeatletter
\let\oldendlist\enit@endlist
\def\csq@@z{\csq@z{\csq@z}}
\def\csq@@@z{\end{displaycquote}}
\long\def\cqendlist#1\fi#2\fi#3#4{%
\def\z{#3{#4}}%
\ifx \z \csq@@@z
\let\z\csq@@z
\fi
\ifx \z \csq@@z
\ifhmode
\unskip
\fi
\leavevmode
'' \zcsqcite
\gdef\cs@next{\let\mkenddispquote\@gobbletwo}%
\fi
\oldendlist#1\fi#2\fi#3{#4}%
}
\let\olddcq\displaycquote
\renewcommand\displaycquote[2][]{%
\let\cs@next\relax
\def\zcsqcite{\csq@cite[#1]{#2}}%
\let\enit@enditemize\cqendlist
\olddcq[#1]{#2}}
\let\oldedcq\enddisplaycquote
\def\enddisplaycquote{%
\cs@next
\oldedcq}
\makeatother
\begin{document}
\begin{displaycquote}[pp.88:2-3]{texbook}
Quote without block.
\end{displaycquote}
\begin{displaycquote}[pp.88:2-3]{texbook}
This is a list:
\begin{itemize}
\item with
\item bullet
\item points
\end{itemize}
\end{displaycquote}
\begin{displaycquote}[pp.88:2-3]{texbook}
Quote without block.
\end{displaycquote}
\textcquote[p.88:2]{texbook}{Let's check that other csquotes commands still work}
\end{document}