Я написал код для цитирования. Я бы хотел, чтобы цитата была центрирована только если она достаточно короткая, чтобы поместиться в одну строку, в противном случае она не должна быть центрирована. Вот код
\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}
Как я мог это сделать?
решение1
Это использует \NewEnviron
и проверяет ширину курсива \BODY
внутри \hbox
. Если она меньше \linewidth
, то \hfil
к \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}