宏如何检测它是否位于段落开头?

宏如何检测它是否位于段落开头?

编辑(2022 年 11 月):我在下面接受的答案中遇到了问题。\ifvmode当我不是在环境之后开始一个新段落{verse}。我被要求将此作为一个新问题,我已经完成了。它可以找到这里

我想编写一个宏,使其在段落开头表现出不同的行为。我该怎么做?

(最终我希望这个宏能接受一个参数,但假设这与 MWE 无关。)

非工作示例:

\documentclass{article}
\newcommand\foo{%
  \ifAtParagraphBeginning% How to do this?
    Hello
  \else
    (hello)
}
\begin{document}

\foo{} % This should print "Hello"
says the quick brown fox jumping over the lazy dog.

The lazy dog says bark \foo{} % This should print "(hello)"
to the brown fox.
\end{document}

编辑:这是一个新示例,我遇到了一个问题。当“@ifnextchar A”位于 \if 的 else 子句中时,我无法让它工作(@ifnextchar 是否查看“\fi”而不是后面的字符?):

\newcommand*\foo[1]{%
  \ifvmode
  \else
    \@ifnextchar A%
      {\textsuperscript{#1}\kern -0.15em}%
      {\textsuperscript{#1}\kern 0pt}%
  \fi}

答案1

在段落的开头,TeX 处于垂直模式,因此您可以使用\ifvmode原始模式。请注意结尾的空格。

\documentclass{article}

\newcommand*{\foo}[1]{%
  \ifvmode
    Hello #1%
  \else
    (hello #1)%
  \fi  
}

\begin{document}
\foo{baz} says the quick brown fox jumping over the lazy dog.

The lazy dog says bark \foo{baz} to the brown fox.
\end{document}

在此处输入图片描述

相关内容