Omega 出现在 if 结果中

Omega 出现在 if 结果中

我正在尝试编辑我在自己创建的环境中使用的 if 语句。之前,代码是

\if #1\empty
\else
\textbf{#1.}\hspace{0.5em}%
\fi

我想把它改成类似

\if #1\empty \textbf{}\hspace{0.5em}
\else
\textbf{#1.}\hspace{0.5em}%
\fi

我可以将我想要的内容放入 \t​​extbf{} 中。但无论我在其中放入什么,都会在它前面打印 \Omega。当像上面一样留空时,它只会打印 \Omega。如果 #1 不为空,则没有 \Omega。

我的代码

\documentclass[12pt,letterpaper]{article}
\newenvironment{question}[3][]{
\noindent\ignorespaces
\if #1\empty \textbf{}\hspace{0.5em}
\else
\textbf{#1.}\hspace{0.5em}%
\fi
}{}
\begin{document}
\begin{question}{0}{8}\end{question}

\begin{question}[1]{0}{8}\end{question}
\end{document}

任何关于摆脱这个资本欧米茄的建议都非常受欢迎。

答案1

\if扩展以下标记,直到找到两个可扩展标记。如果#1为空,则\empty扩展为无,然后\textbf,它会找到这些标记。扩展:

\empty ->

\empty消失,因为其定义文本是空的。

\textbf -> \protect \textbf␣

在该上下文中,\protect具有 的含义\relax,因此它是第一个不可扩展的标记。

\textbf␣ #1 -> \ifmmode ...\else \hmode@bgroup ... \fi

我们没有数学模式,因此\hmode@bgroup扩展了:

\hmode@bgroup -> \leavevmode \bgroup
\leavevmode -> \unhbox \voidb@x

现在我们第二个不可扩展的标记是。因为两个标记都是命令标记,所以 的\unhbox结果为 ,其余标记不会被删除。被执行,现在作为独立标记,而不是 的参数。它是一个字符常量,用于编码框号,旨在与 一起使用。\iftrue\voidb@x\unhbox\unhbox

\voidb@x是数字 65,定义为\char"A。在当前字体中,这表示大写 omega。

#1如果以两个相等的不可扩展标记开头,则测试也会失败,例如11

下面的示例放入#1宏并通过与\QuestionFirstParam进行比较,因为不扩展以下标记,而是比较接下来的两个标记:\ifx\empty\ifx

\documentclass[12pt,letterpaper]{article}
\newenvironment{question}[3][]{%
  \noindent
  \def\QuestionFirstParam{#1}%
  \ifx\QuestionFirstParam\empty
    \leavevmode
    % \textbf{}%
    % \hspace{0.5em}%
  \else
    \textbf{#1.}\hspace{0.5em}%
  \fi
  arg2 = #2, arg3 = #3%
}{}
\begin{document}
\begin{question}{0}{8}\end{question}

\begin{question}[1]{0}{8}\end{question}
\end{document}

结果

相关内容