1

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?

example

  • 1
    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
3

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}

enter image description here

| improve this answer | |
  • 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
3

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}

enter image description here

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

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} 

enter image description here

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.