El título no es tan descriptivo. Intento escribir un entorno remark
de estilo personalizado amsthm
que pueda tomar argumentos como encabezado (no necesito funcionalidades de referencia). Quería simplificar el código evitando trivlist
. remark
-Los entornos de teoremas de estilo tienen .5\topsep
espacio antes y después del entorno. Pero esto parece realmente extraño en entornos de listas como itemize
. Esto es lo que tengo:
\documentclass{article}
\usepackage{lipsum} % for testing
% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
% add space before environment
\par\addvspace{.5\topsep}
% header text
\noindent\textit{#1.}%
% default rubber space after header text and ignore following spaces
\hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
% add space after environment
\par\addvspace{.5\topsep}
}
\begin{document}
\lipsum[66]
\begin{para}{Looks good}
\lipsum[66]
\end{para}
\lipsum[66]
\begin{itemize}
\item \lipsum[66]
Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.
\begin{para}{Looks weird}
\lipsum[66]
\end{para}
\lipsum[66]
\end{itemize}
\end{document}
Como puede ver, en entornos de lista, .5\topsep
se agrega al valor distinto de cero \parsep
, creando una brecha mayor. Los entornos originales amsthm
evitan esto empleando los mecanismos de Latex para las listas (configuración \@topsep
y \@topsepadd
espaciado deseado de .5\topsep
). De manera similar, preferiría no agregar ningún espacio si para
se llama dentro de la lista de entornos.¿Hay alguna manera de detectar si uno está en un entorno de lista? ¿O existe una solución más elegante?
Editar:Se agregó una imagen del archivo compilado.
Respuesta1
ComoDavid Carlisle dijo, no debe usarlo \topsep
para definir su entorno, ya que lo configura y restablece la lista de entornos y su entorno no dará un comportamiento consistente (ya que depende de una longitud que se cambia con frecuencia sobre la marcha). Probablemente quieras codificar un valor (conviértelo en pegamento si quieres, pero lo tomaré 4pt
porque parece ser la cantidad deseada).
Para manejar el efecto \parskip
que puede estar presente o no (en un entorno de lista, \parskip
está configurado para ser igual a \parsep
), puede simplemente cancelarlo agregando un vspace adicional. Lo siguiente probablemente hará lo que quieras:
\documentclass{article}
\usepackage{lipsum} % for testing
% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
% add space before environment
\par\addvspace{4pt}\addvspace{-\parskip}
% header text
\noindent\textit{#1.}%
% default rubber space after header text and ignore following spaces
\hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
% add space after environment
\par\addvspace{4pt}\addvspace{-\parskip}
}
\begin{document}
\lipsum[66]
\begin{para}{Looks good}
\lipsum[66]
\end{para}
\lipsum[66]
\begin{itemize}
\item \lipsum[66]
Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.
\begin{para}{Looks weird}
\lipsum[66]
\end{para}
\lipsum[66]
\end{itemize}
\end{document}