Zentrierung innerhalb der Minipage

Oct 07 2020
\documentclass{article}
\makeatletter
\newenvironment{myquote}[1]{%
  % to change text size, say to small
  % add \small before \par in the next line
  \par\addvspace{2ex}
  \if@nobreak
    % we're at the start of a section
    % add the indent
    \if@afterindent\else\hspace*{\parindent}\fi
    % and instruct LaTeX to reset \@afterheading at the end
    \def\reset@nobreakatend{\@afterheading}%
  \else
    \def\reset@nobreakatend{}%
  \fi
  \begin{minipage}{\dimexpr\linewidth -2\parindent\relax}%
    \def\myquoteauthorname{#1}%
  }{%
    \par\vspace{0.2ex}
    \noindent
    \hspace*{0.25\linewidth}%
      \rule{0.5\linewidth }{.4pt}
    \par\addvspace{1ex}
    \centering
    \textbf{\myquoteauthorname}\par\vspace{1ex}
  \end{minipage}
  \par\nobreak\reset@nobreakatend}
\makeatother


\begin{document}
\begin{myquote}{Diane Ravitch}
The person who knows ``how'' will always have a job. The person who knows ``why'' will always be his boss.
\end{myquote}


\begin{myquote}{Diane Ravitch}
\centering
The person who knows ``how'' will always have a job. The person who knows ``why'' will always be his boss.
\end{myquote}

\begin{myquote}{Diane Ravitch}
\begin{center}
    The person who knows ``how'' will always have a job. The person who knows ``why'' will always be his boss.
\end{center}
\end{myquote}
\end{document}

Im obigen Code (ursprüngliche Antwort von @egreg) möchte ich den Text innerhalb der zentrierenminipage . Wenn ich \centeringdie Regel verwende, bewegt sich; Wenn ich benutze \begin{center} \end{center}, bekomme ich vertikalen Raum.

  1. Wie kann ich den Text zentrieren, ohne die Regel zu verschieben und keinen zusätzlichen vertikalen Raum zu haben?
  2. Wie kann es eine alternative Version geben, in der der myquoteText zentriert ist? (Ich habe versucht, \centeringan verschiedenen Stellen nach innen zu platzieren, aber in allen hat sich auch die Regel geändert.)

Antworten

2 campa Oct 07 2020 at 15:00

Ich würde sagen, die einfachste Lösung besteht darin, eine zusätzliche Gruppe hinzuzufügen, die die Auswirkung der Deklaration einschränkt, die Sie in den Umgebungskörper schreiben

\documentclass{article}
\makeatletter
\newenvironment{myquote}[1]{%
  % to change text size, say to small
  % add \small before \par in the next line
  \par\addvspace{2ex}
  \if@nobreak
    % we're at the start of a section
    % add the indent
    \if@afterindent\else\hspace*{\parindent}\fi
    % and instruct LaTeX to reset \@afterheading at the end
    \def\reset@nobreakatend{\@afterheading}%
  \else
    \def\reset@nobreakatend{}%
  \fi
  \begin{minipage}{\dimexpr\linewidth -2\parindent\relax}%
    \def\myquoteauthorname{#1}%
    \begingroup   % <-- ADD THIS
  }{%
    \par\endgroup\vspace{0.2ex}  % <-- ADD \endgroup HERE
    \noindent
    \hspace*{0.25\linewidth}%
      \rule{0.5\linewidth }{.4pt}
    \par\addvspace{1ex}
    \centering
    \textbf{\myquoteauthorname}\par\vspace{1ex}
  \end{minipage}
  \par\nobreak\reset@nobreakatend}
\makeatother


\begin{document}

\begin{myquote}{Diane Ravitch}
\centering
The person who knows ``how'' will always have a job. The person who knows ``why'' will always be his boss.
\end{myquote}

\begin{myquote}{Diane Ravitch}
\itshape
The person who knows ``how'' will always have a job. The person who knows ``why'' will always be his boss.
\end{myquote}

\end{document}