# How can I center arbitrary content between two horizontal lines?

I want to implement a macro that takes exactly one parameter and will create a line above and below the content and ignores the text indentation.

This is meant to place some event information in protocols no matter what context I am in right now (e.g. within an enumerate or itemize).

It should interrupt the current block and always use the complete column width and then continue the block afterwards.

However, I am having problems with the vertical centering:

\newcommand{\bartext}[1]{
\kern4pt % space above the rules
\hrule height 0.5pt
\vspace{0.1cm}
\noindent #1
\vspace{0.1cm}
\hrule height 0.5pt
\kern4pt % space below the rules
}

% Example Usage:

\begin{itemize}
\item First Point
\item Second Point
\bartext{Charlie enters the meeting}
\item third point
\fouth point
\end{itemize}


The text "Charlie enters the meeting" should begin at the left, like the "Some text before".

also the lines are placed pretty odd an the text within the lines isnt vertically centered.

Any clues/ suggestions?

• Why not use \item Second Point \end{itemize} \bartext{Charlie enters the meeting} \begin{itemize}[resume*] \item third point and the  enumitem package? – leandriis Feb 3 '19 at 21:45

You can use a (non-floating) float:

\documentclass{article}
\usepackage{array,float}
\newcommand{\bartext}[1]{%
\par\medskip
\begingroup
\intextsep=\smallskipamount
\extrarowheight =3pt %or perhaps a bit less ...
\arrayrulewidth=.5pt
\begin{figure}[H]%
\begin{tabular}{@{}p{\textwidth}@{}}
\hline
#1
\\\hline
\end{tabular}%
\end{figure}%
\par\endgroup}

\begin{document}
a
\bartext{Charlie enters the meeting}
b
\begin{itemize}
\item First Point
\item Second Point
\bartext{Charlie enters the meeting}
\item third point
\item fouth point
\end{itemize}
\end{document}


• Thanks, Ulrike. Very elegant solution. My documents are starting to look pretty now and start to be usable. Thanks. – Tobi Feb 3 '19 at 23:08

Assuming that you do not want to use something like

\end{itemize}
\bartext{...}
\begin{itemize}[resume*]


you could use the following code that is inspired by How can I check if the current code is inside a certain environment?

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\makeatletter
\def\itemizename{itemize}
\def\enumeratename{enumerate}
\newcommand{\bartext}[1]{%
\ifx\@currenvir\itemizename
\end{itemize}
\kern4pt % space above the rules
\hrule height 0.5pt
\vspace{0.1cm}
\noindent #1
\vspace{0.1cm}
\hrule height 0.5pt
\kern4pt
\begin{itemize}[resume*]
\else
\ifx\@currenvir\enumeratename
\end{enumerate}
\kern4pt % space above the rules
\hrule height 0.5pt
\vspace{0.1cm}
\noindent #1
\vspace{0.1cm}
\hrule height 0.5pt
\kern4pt
\begin{enumerate}[resume*]
\else
\kern4pt % space above the rules
\hrule height 0.5pt
\vspace{0.1cm}
\noindent #1
\vspace{0.1cm}
\hrule height 0.5pt
\kern4pt
\fi
\fi}
\newcommand\@myenvname{myenv}
\makeatother

\begin{document}

\lipsum[5]

\begin{itemize}
\item First Point
\item Second Point
\bartext{Charlie enters the meeting}
\item third point
\item fouth point
\end{itemize}

\lipsum[5]

\begin{enumerate}
\item First Point
\item Second Point
\bartext{Charlie enters the meeting}
\item third point
\item fouth point
\end{enumerate}

\lipsum[5]

\bartext{Charlie enters the meeting}

\end{document}


• Good but very complex solution. I went with the solution of Ulrike in the end – Tobi Feb 3 '19 at 23:07

You can use the functionalities of enumitem:

\documentclass{report}%{memoir}
\usepackage{enumitem}
\usepackage{lipsum}

\newcommand{\bartext}[1]{
\kern4pt % space above the rules
\hrule height 0.5pt
\vspace{0.1cm}
\noindent #1
\vspace{0.1cm}
\hrule height 0.5pt
\kern4pt % space below the rules
}

\begin{document}

Some text. Some more text. Some more text. Some more text. Some more text. Some more text. Some more text. Some more text. Some more text.

\begin{itemize}[after=\vspace*{-\topsep}]
\item First Point
\item Second Point
\end{itemize}
\bartext{Charlie enters the meeting}
\begin{itemize}[resume*, before=\vspace*{-\topsep}]
\item third point
\item fourth point
\end{itemize}

\end{document}