我正在努力改进这个答案使其与 完全兼容csquotes
。
考虑这个例子:
\documentclass{article}
\usepackage{csquotes}
% hanging indentation for quotes, https://tex.stackexchange.com/a/166213/98645
\renewcommand{\mkbegdispquote}[2]{\strut\llap{``}}
% #1 is closing punctuation, #2 is citation.
% We don't use them in this instance, but they
% need to be "catered for"
\renewcommand{\mkenddispquote}[2]{#1''\ifblank{#2}{}{#2}}
% #1 is closing punctuation, #2 is citation.
% again, we provide for them if needed
\begin{document}
\begin{displayquote}
Now we use an \enquote{quote inside the quote} in this
long text.\\
Bear with me.
\end{displayquote}
\end{document}
这问题有:
- 引号现在再次被静态定义 – 这违背了 的目的
csquotes
。您可以通过替换它们来解决这个问题,例如在德语中,您可以使用,,
而不是``
,\mkbegdispquote
但这仍然不灵活。 - 更糟糕的是,它破坏
csquotes
了嵌套引文。
在上面的例子中,“引号内引号”将被排版错误,并使用外引号(““), 代替内正如它应该做的那样。
尝试修复
看看csquotes 文档我尝试修复这个问题:
\renewcommand{\mkbegdispquote}[2]{\strut\llap{\openautoquote}}
\renewcommand{\mkenddispquote}[2]{#1\closeautoquote\ifblank{#2}{}{#2}}
那太简单了,不是吗?问题似乎是,\openautoquote
如果它处于“环境”(如果这是错误的术语,请原谅我,我不知道 LaTeX 内部结构),即 中,则不起作用并认为它不平衡。\llap
我的下一个想法是“伪造”它,显示一个普通符号并隐藏仅表示csquotes
它应该在其引用顺序中计算嵌套的符号。
\renewcommand{\mkbegdispquote}[2]{\strut\llap{\textooquote}\vphantom{\openautoquote}}
嗯……现在还在\vphantom
,所以当然还是不行。我也没有看到csquotes
手动调整嵌套的方法没有显示实际标志。
那么我该怎么做呢?
上面第一个问题已得到有效解决,只有第二个问题才是我这里的问题。
答案1
还有一个 init 命令:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman,french,english]{babel}
\usepackage[autostyle]{csquotes}
\renewcommand{\mkbegdispquote}[2]{\leavevmode\llap{\textooquote}\initoquote}
\renewcommand{\mkenddispquote}[2]{#1\textcoquote\ifblank{#2}{}{#2}}
\begin{document}
\begin{displayquote}
Now we use an \enquote{quote inside the quote} in this
long text.\\
Bear with me.
\end{displayquote}
\selectlanguage{french}
\begin{displayquote}
Now we use an \enquote{quote inside the quote} in this
long text.\\
Bear with me.
\end{displayquote}
\selectlanguage{ngerman}
\begin{displayquote}
Now we use an \enquote{quote inside the quote} in this
long text.\\
Bear with me.
\end{displayquote}
\end{document}