Я пытался улучшитьэтот ответчтобы сделать его полностью совместимым с 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}
Theпроблемыесть:
- Кавычки теперь снова статически определены – что противоречит цели
csquotes
. Вы можете исправить это, заменив их выше, например, в немецком вы бы использовали,,
вместо``
in\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}