Как использовать \openautoquote, которого не должно быть в env в env?

Как использовать \openautoquote, которого не должно быть в env в env?

Я пытался улучшитьэтот ответчтобы сделать его полностью совместимым с 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проблемыесть:

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

введите описание изображения здесь

Связанный контент