Лучший идиоматический способ напечатать центрированную «звездочку» (звездочку)?

Лучший идиоматический способ напечатать центрированную «звездочку» (звездочку)?

Мне нужно напечатать то, что издатель называет «звездочкой» (звездочка).

Я разработал код, представленный ниже, но я не уверен, является ли он звуковым кодом, т.е. не вызовет ли он проблем в дальнейшем, в других командах и текстовом потоке.

Это идиоматический способ напечатать специальный символ (в данном случае mathabx's \varstar) по центру и с одной пустой строкой сверху и снизу?

Я использую его \vgridдля того, чтобы проверить, что вертикальное выравнивание сохранено как можно точнее по отношению к базовой сетке.

\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}

решение1

Я предлагаю использовать \centeringвместо , {center}поскольку первый вариант не добавляет вертикального пространства и позволяет вам контролировать интервалы без необходимости возиться с исправлениями. Чтобы использовать \centeringтолько для части документа, заключите его в группу, например {…}, и добавьте \parпосле него новнутригруппу. Затем используйте \(add)vspacewith \baselineskipкак значение, чтобы добавить пустые строки до и после.

\usepackage{adjustbox,noindentafter}

\newcommand{\starlet}{%
  {% 
    \par
    \addvspace{\baselineskip}%
    \centering
    \adjustbox{raise=1pt}{\aster}%
    \par
    \vspace{\baselineskip}%
  }%
  \NoIndentAfterThis
}

Некоторые заметки

  • \addvspaceпроверяет, есть ли уже пробел перед ним, и добавляет его только при необходимости. В конце определения вы можете использовать обычный, \vspaceтак как перед ним не будет пробела.
  • \NoIndentAfterThis(needs noindentafter) — это способ предотвратить отступ после команды. Это должно быть вне группы. (см.Надежный код для автоматического \noindent после определенных сред?)
  • Если вы хотите отцентрировать \asterстроку, один из способов — использовать \adjustbox{raise=1pt}{\aster}(needs adjustbox) или другой способ — \raisbox{1pt}{\aster}(needs graphicx).
  • Пара здесь не нужна, так как команды, содержащие в своем имени, \makeatletter/otherне используются .@

Чтобы выровнять по центру отдельную строку (рамку), можно также использовать \hspacewith \fillв качестве значения:

\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
}

решение2

(Ответ обновлен с учетом того, что требуется использование \varstar, а не произвольного символа звездочки.)

Я полагаю, что идиоматический способ LaTeXy создать пустую строку высоты \baselineskip— набрать \par\null\par. Чтобы отцентрировать заданный символ, можно использовать команду TeX "primitive" \centerline. В приведенном ниже коде команда \starletпомещает инструкцию \centerline{$\varstar$}между двумя наборами \par\null\parинструкций. Общая высота вывода, сгенерированного с помощью, \starletравна точно 3\baselineskip, автоматически сохраняя любое выравнивание сетки, которое может быть на месте.

введите описание изображения здесь

\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}

Связанный контент