我想在每个元素后面添加一些文本\item
。例如,我定义了一个新命令
\newcommand{\qitem}{\item?} %For the list of questions
\begin{enumerate}
\qitem Some question
\end{enumerate}
我想要得到
“1. 有什么问题吗?”
但是,输出看起来像
“1. 一些问题”
答案1
如果您想保留原始界面设计,即与之\qitem Some question
相反\qitem{Some question}
(正如@cfr 所建议的),您可以使用行尾字符来分隔参数\qitem
:
\documentclass{article}
\makeatletter
\def\qitem{\begingroup\catcode`\^^M=12 \qitem@}
\bgroup\catcode`\^^M=12 %
\gdef\qitem@#1^^M{\item #1?\endgroup}%
\egroup
\makeatother
\begin{document}
\begin{enumerate}
\qitem Some question
\qitem Some other question
\item Not a question
\end{enumerate}
\end{document}
答案2
你可以做这样的事情:
\documentclass{article}
\newcommand\qitem[1]{\item #1?}
\begin{document}
\begin{enumerate}
\qitem{Is this a question}
\item This is an answer.
\qitem{Was that a question}
\qitem{Can this question not be answered}
\end{enumerate}
\end{document}
由于您没有提供最小工作示例,我不知道这与您的课程等的契合程度如何。但是,希望您能够对其进行适当的调整。
答案3
有一个解决方案,你不需要改变语法(即,你可以继续使用,\item bla
而不是\item{bla}
,如cfr 的答案)并通过该项目的全部内容到宏(而不是只到当前行,比如鲁本的回答)。这比仅仅在项目内容的开头或结尾添加内容更灵活。例如,您可以完全隐藏内容,只保留标签。
主要思想是用\item
类似 的东西替换}\item\yourcommand{
。这样,两者之间的所有内容\item
都会传递给命令。由于我们不能使用{
和 ,因此}
当我们重新定义 时\item
,我们使用\bgroup
和\egroup
。此外,我们不能将这个隐式组直接传递给命令,而是使用\collectbox
,它可以处理\bgroup...\egroup
。最后,第一个和最后一个\item
不能是上面的形式。相反,我们重新定义\item
它,使其设置\@openbracket
为 true 并关闭环境的下一个\item
或末尾的任何开括号。
\documentclass{article}
\usepackage{collectbox}
% Say we want to call this command for each item
\newcommand\question[1]{#1?}
\makeatletter
\newif\if@openbracket
% Define environment similar to enumerate where \item's are terminated with "?"
\newenvironment{enumerateq}%
{%
\enumerate
\let\origitem\item
\def\item{%
\if@openbracket\egroup\endgroup\fi%
\origitem
\begingroup\@openbrackettrue\collectbox*{\question}\bgroup
}
}%
{\if@openbracket\egroup\endgroup\fi%
\endenumerate}
\makeatother
\begin{document}
\begin{enumerateq}
\item Is this a question
\item Was that a question% The new line is part of the content of the item. Comment out to suppress space.
\item Can this question not be answered%
\end{enumerateq}
\end{document}