Zentriertes Zitat nur, wenn es in eine Zeile passt

Zentriertes Zitat nur, wenn es in eine Zeile passt

Ich habe Code für eine Zitatumgebung geschrieben. Ich möchte, dass das Zitat nur zentriert wird, wenn es kurz genug ist, um in eine Zeile zu passen, andernfalls sollte es nicht zentriert werden. Dies ist der Code

\documentclass{article}
\usepackage{changepage, xparse}
\ExplSyntaxOn

\NewDocumentEnvironment{ myquote }{ o }{
  \begin{center}
  \begin{adjustwidth}{50pt}{50pt}
  \begin{itshape}
}{
  \end{itshape}
  \end{adjustwidth}
  \end{center}  
  \IfValueT{ #1 }{
    \vspace{-0.15cm}
    \begin{adjustwidth}{0pt}{20pt}
    \flushright { \small -\hspace{2pt}#1\hspace{2pt}- }
    \end{adjustwidth}
    \vspace{0.3cm}
  }
}

\ExplSyntaxOff

\begin{document}
\begin{myquote}[Someone]
This should be centered.
\end{myquote}

\begin{myquote}[Someone else]
This is a longer quote and therefore shouldn't be centered. This is some more text.
\end{myquote}
\end{document}

Bildbeschreibung hier eingeben

Wie könnte ich das tun?

Antwort1

Dies verwendet \NewEnvironund überprüft die Breite der Kursivschrift \BODYinnerhalb eines \hbox. Wenn sie kleiner als ist \linewidth, \hfilwird ein vorangestellt \BODY.

\documentclass{article}
\usepackage{changepage, environ}
\usepackage[pass,showframe]{geometry}

\NewEnviron{myquote}[1][\relax]{
  \begin{center}
  \begin{adjustwidth}{50pt}{50pt}
  \setbox0=\hbox{\itshape\BODY}%
  \begin{itshape}
  \ifdim\wd0>\linewidth\relax\BODY\else\hfil\BODY\fi
  \end{itshape}
  \end{adjustwidth}
  \end{center}  
  \ifx\relax#1\relax\else
    \vspace{-0.15cm}
    \begin{adjustwidth}{0pt}{20pt}
    \flushright { \small -\hspace{2pt}#1\hspace{2pt}- }
    \end{adjustwidth}
    \vspace{0.3cm}
  \fi
}


\begin{document}
\begin{myquote}[Someone]
This should be centered.
\end{myquote}

\begin{myquote}[Someone else]
This is a bit longer, but should still be centered.
\end{myquote}

\begin{myquote}[Someone else]
This is a longer quote and therefore shouldn't be centered. This is some more text.
\end{myquote}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen