我想要一个由三个星号和线组成的分隔符。
有下面的,但是比较乱。
\documentclass[a4paper,12pt]{article}
\usepackage{xhfill}
\ExplSyntaxOn
\UndeclareTextCommand{\textasteriskcentered}{TS1}
\DeclareTextSymbolDefault{\textasteriskcentered}{OT1}
\DeclareTextCommand{\textasteriskcentered}{OT1}{\raisebox{-.7ex}[1ex][0pt]{*}}
\newcommand{\separ}[1][1]
{
\par\vskip0.5\baselineskip
\noindent
\hbox to \dimexpr 0.5\linewidth - #1\linewidth / 2\relax{}
\xrfill[0.5ex]{0.4pt}
\;\textasteriskcentered\,\textasteriskcentered\,\textasteriskcentered\;
\xrfill[0.5ex]{0.4pt}
\hbox to \dimexpr 0.5\linewidth - #1\linewidth / 2\relax{}
\vskip0.5\baselineskip\par
}
\ExplSyntaxOff
\begin{document}
Some text
\separ[0.2]
More Text
\end{document}
答案1
如果宏\separ
不需要接受参数,则其定义可以大大简化。
\documentclass[a4paper,12pt]{article}
\usepackage{lipsum} % filler text
\let\tac\textasteriskcentered % two handy shortcut macros
\let\ted\textemdash
\newcommand\separ{%
\begin{center}
\ted\ted\ \tac\,\tac\,\tac\ \ted\ted%
\end{center}}
\begin{document}
\noindent
\lipsum[1][1-3] % filler text
\separ
\lipsum[2][1-3] % more filler text
\end{document}
答案2
是的,确实很混乱。
也许,您想定义以下宏:
\def\separ[#1]{%
\par\medskip
\centerline{\crule{#1\hsize/3} \lower.7ex\hbox{*\,*\,*} \crule{#1\hsize/3}}
\medskip
}
\def\crule#1{\vrule height.6ex depth-\dimexpr.6ex-.4pt width\dimexpr#1\relax\relax}
答案3
不是你的星号太高,而是用xhfill
它画出的规则太低了。
您可以使用一些低级编程来获得正确的居中,这样您就可以参考“轴高”,这就是星号居中的位置。无需猜测尺寸。
使用\vrule
所需尺寸比间接填充更好。
\documentclass[a4paper,12pt]{article}
\makeatletter
\newcommand{\separ}[1][1]{%
\par\nopagebreak\vspace{0.5\baselineskip}
\hbox to \linewidth{%
\check@mathfonts
\hss
\vrule width \dimeval{#1\linewidth/2}
height \dimeval{\fontdimen22\textfont2+0.2pt}
depth -\dimeval{\fontdimen22\textfont2-0.2pt}%
\;\textasteriskcentered\,\textasteriskcentered\,\textasteriskcentered\;%
\vrule width \dimeval{#1\linewidth/2}
height \dimeval{\fontdimen22\textfont2+0.2pt}
depth -\dimeval{\fontdimen22\textfont2-0.2pt}%
\hss
}
\vspace{0.5\baselineskip}
}
\makeatother
\begin{document}
Some text
\separ[0.2]
More Text
\end{document}