Мне нужно напечатать то, что издатель называет «звездочкой» (звездочка).
Я разработал код, представленный ниже, но я не уверен, является ли он звуковым кодом, т.е. не вызовет ли он проблем в дальнейшем, в других командах и текстовом потоке.
Это идиоматический способ напечатать специальный символ (в данном случае 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)vspace
with \baselineskip
как значение, чтобы добавить пустые строки до и после.
\usepackage{adjustbox,noindentafter}
\newcommand{\starlet}{%
{%
\par
\addvspace{\baselineskip}%
\centering
\adjustbox{raise=1pt}{\aster}%
\par
\vspace{\baselineskip}%
}%
\NoIndentAfterThis
}
Некоторые заметки
\addvspace
проверяет, есть ли уже пробел перед ним, и добавляет его только при необходимости. В конце определения вы можете использовать обычный,\vspace
так как перед ним не будет пробела.\NoIndentAfterThis
(needsnoindentafter
) — это способ предотвратить отступ после команды. Это должно быть вне группы. (см.Надежный код для автоматического \noindent после определенных сред?)- Если вы хотите отцентрировать
\aster
строку, один из способов — использовать\adjustbox{raise=1pt}{\aster}
(needsadjustbox
) или другой способ —\raisbox{1pt}{\aster}
(needsgraphicx
). - Пара здесь не нужна, так как команды, содержащие в своем имени,
\makeatletter/other
не используются .@
Чтобы выровнять по центру отдельную строку (рамку), можно также использовать \hspace
with \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}