引用和引号中的块引号环境后没有换行符

引用和引号中的块引号环境后没有换行符

我的问题与这个问题密切相关:当 \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}

相关内容