Your attempt to shift the bullet into the margin with a negative \hspace
didn't work because it inserts glue. When TeX breaks your paragraph into lines, it discards the glue at the beginning of the line, so you end up with a line \hbox
that starts with the bullet character.
I replaced your \hspace{-4.5cm}
with \llap{\textbullet}
. That generates a zero-width \hbox
inside your paragraph. That generated \hbox
contains \hss
followed by \textbullet
. When TeX breaks the paragraph into lines, the generated \hbox
is not discarded, but is placed at the beginning of the line.
[The \hss
has natural width of 0, but shrinks by the size of the \textbullet
(so the \hbox
can stay zero-width). It "backspaces" by the size of the bullet into the left margin. The bullet is set, bringing us back to "beginning" of the line (the reference point) and then the text "Question?" is set.]
\loggingall
\documentclass{article}
\newcommand{\question}[2]{\\[0.5cm]\hspace{-4.5cm}\textbullet\textbf{#1}\\[0.2cm]\hspace{5mm}\textrm{#2}\\}
\begin{document}
This is a test.
\question{Question?}{Answer.}
This is also a test.
\showlists
\vfil
\pagebreak[4]
\renewcommand{\question}[2]{\\[0.5cm]\llap{\textbullet}\textbf{#1}\\[0.2cm]\textrm{#2}\\}
This is a test.
\question{Question?}{Answer.}
This is also a test.
\showlists
\end{document}
Note 1: I changed \text
to \textrm
in your macro.
Note 2: This is my first attempt at an answer, so it's highly likely that I didn't solve the problem with good LaTeX style. I thought I might learn something by trying to give an answer. (I did!) I hope the rest of the community will be forgiving of whatever stupid errors I committed.