env 内で使用してはならない \openautoquote を env 内で使用するにはどうすればよいですか?

env 内で使用してはならない \openautoquote を 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}

問題がある:

  1. 引用符は再び静的に定義されるようになりましたが、これは の目的に反しています。これを修正するには、上記の引用符を置き換えます。たとえば、ドイツ語では の代わりにcsquotesを使用しますが、それでもまだ柔軟性がありません。,,``\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 は事実上解決されていますが、ここで問題となるのは 2 番目の問題だけです。

答え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}

ここに画像の説明を入力してください

関連情報