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}
Wie könnte ich das tun?
Antwort1
Dies verwendet \NewEnviron
und überprüft die Breite der Kursivschrift \BODY
innerhalb eines \hbox
. Wenn sie kleiner als ist \linewidth
, \hfil
wird 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}