\hrulefill 在 \newcommand 中未按预期工作

\hrulefill 在 \newcommand 中未按预期工作

我正在尝试创建一个简单的新命令,在文本中创建一个中断,以在“问答”块的前面和后面添加一条水平线。

使用现有代码(如下所列),底部水平线不会显示。

\newcommand{\QandA}[2]{
    \hrulefill \\
    \textbf{Q:  }{#1} \\
    \textbf{A:  }{#2} \\
    \hrulefill}

答案1

没有像 这样的大锤tabularx;重要的是避免\hrulefill在行首使用,因为粘连会在换行时消失。第一个是在缩进框之后或段落开头,就像我的答案中那样,但它不会在那里消失。对于第二个,我们需要一些不会在换行时消失的东西。比如\mbox{}

\documentclass{article}

\newcommand{\QandA}[2]{%
  \par\noindent\hrulefill\\*
  \textbf{Q: }#1\\*
  \textbf{A: }#2\\*[-1.25ex]
  \mbox{}\hrulefill\par
}

\begin{document}

Some text before.

\QandA{One}{Two}

Some text after.

\end{document}

使用*是为了避免分页。

在此处输入图片描述

答案2

你需要在行首有一个“标记”,以便领导者 \hrulefill从...延伸。尝试使用\mbox{}\hrulefill结尾规则。但是...

以下将提供一个牢不可破的盒子(以 的形式tabular),用于插入您的问答:

在此处输入图片描述

\documentclass{article}

\usepackage{tabularx}

\newcommand{\QandA}[2]{%
  \par\noindent
  \begin{tabularx}{\linewidth}{@{}lX@{}}
    \hline
    \textbf{Q:}& #1 \\
    \textbf{A:}& #2 \\
    \hline
  \end{tabularx}
  \par}

\begin{document}

Some text before.

\QandA{One}{Two}

Some text after.

\end{document}

相关内容