Necesito imprimir lo que el editor llama "una estrella" (asterisco).
Ideé el código siguiente, pero no estoy seguro de si es un código de sonido, es decir, no causará problemas más adelante, dentro de otros comandos y en el flujo de texto.
¿Es esa la forma idiomática de imprimir un carácter especial (en este caso, mathabx
's \varstar
), centrado y con 1 línea en blanco arriba y abajo?
Estoy usando \vgrid
para comprobar que la alineación vertical se conserva con la mayor precisión posible con respecto a la cuadrícula subyacente.
\documentclass[
DIV=calc,
twoside,
openright,
twocolumn=false,
titlepage,
numbers=noenddot,
headinclude=true,
footinclude=true,
]{scrbook}
\usepackage{kantlipsum}
\usepackage{mathabx}
\newcommand{\aster}{$\varstar$}
\usepackage{vgrid}
\makeatletter
\newcommand{\starlet}{%
\par
\vskip -0.5pt
\noindent
\parbox{\linewidth}{
\begin{center}
\aster
\end{center}
}
\par
\vskip 0.6pt % make it fit the grid
\noindent
}
\makeatother
\begin{document}
\kant[1]
\starlet
\kant[1]
\end{document}
Respuesta1
Sugiero usar \centering
en lugar de {center}
ya que el primero no agrega espacio vertical y le permite controlar el espaciado exactamente sin la necesidad de modificar correcciones. Para usarlo \centering
solo para una parte de su documento, enciérrelo en un grupo, es decir {…}
, y agregue un \par
después peroadentroel grupo. Luego use \(add)vspace
with \baselineskip
como valor para agregar líneas en blanco antes y después.
\usepackage{adjustbox,noindentafter}
\newcommand{\starlet}{%
{%
\par
\addvspace{\baselineskip}%
\centering
\adjustbox{raise=1pt}{\aster}%
\par
\vspace{\baselineskip}%
}%
\NoIndentAfterThis
}
Algunas notas
\addvspace
Comprueba si ya hay algo de espacio antes y lo agrega solo cuando es necesario. Al final de la definición puedes usar el normal\vspace
ya que no habrá ningún espacio antes.\NoIndentAfterThis
(necesidadesnoindentafter
) es la forma de evitar la sangría después del comando. Esto debe ser fuera del grupo. (ver¿Código confiable para \noindent automático después de entornos específicos?)- Si desea centrarse
\aster
en la línea, una forma es usar\adjustbox{raise=1pt}{\aster}
(needsadjustbox
) u otra forma es\raisbox{1pt}{\aster}
(needsgraphicx
). - El
\makeatletter/other
par no es necesario aquí ya que no se utilizan comandos que contengan@
como parte de su nombre.
Para centrar una sola línea (cuadro) también se puede usar \hspace
with \fill
como valor:
\newcommand{\starletII}{%
\par
\addvspace{\baselineskip}%
\hspace*{\fill}% without the star space would be ignored it it
% begins/ends a line
\adjustbox{raise=1pt}{$\star$}%
\hspace*{\fill}
\par
\vspace{\baselineskip}%
\NoIndentAfterThis
}
Respuesta2
(Respuesta actualizada para incorporar el hecho de que \varstar
se requiere el uso de , en lugar de algún símbolo de asterisco arbitrario).
Supongo que una forma idiomática de LaTeXy de crear una línea de altura en blanco \baselineskip
es escribir \par\null\par
. Para centrar un símbolo determinado, se podría utilizar el comando "primitivo" de TeX \centerline
. En el código siguiente, el comando \starlet
intercala la instrucción \centerline{$\varstar$}
entre dos conjuntos de \par\null\par
instrucciones. La altura total de la salida generada por \starlet
es exactamente 3\baselineskip
, preservando automáticamente cualquier alineación de cuadrícula que pueda estar en su lugar.
\documentclass[twocolumn]{article}
\usepackage{mathabx} % for \varstar symbol
\newcommand\starlet{%
\par\null\par% a blank line of height \baselineskip
\centerline{$\varstar$}% center-set the ask
\par\null\par}% another blank line of height \baselineskip
%% Just for this example:
\setlength\parindent{0pt}
\usepackage[textwidth=2.95in,showframe]{geometry}
\begin{document}
Some meaningless fluff.
Some meaningless fluff.
Some meaningless fluff.
Some meaningless fluff.
Some meaningless fluff.
\newpage % induce a column break
Some meaningless fluff.
\starlet
Some meaningless fluff.
\end{document}