我一直在尝试阅读一些有关扩展如何工作的示例和文本,但我似乎无法理解它的实际工作原理。我尝试运行的代码如下:
\documentclass[11pt]{article}
\usepackage{lipsum, ifthen,color}
% I want to use a modified version of this command:
\newcommand{\version}[2]{\marginpar{\expandafter\colorbox{\csname \ifthenelse{\equal{#1}{1}}{green}{red}\endcsname}{\begin{minipage}{\marginparwidth}
V.#1 #2
\end{minipage}}}}
% Command made just for this example
\newcommand{\versionB}[2]{\marginpar{\colorbox{red}{\begin{minipage}{\marginparwidth}
V.#1 #2
\end{minipage}}}}
\begin{document}
\section{incomplete sectinon}\versionB{0.9}{Need to add something, therefor this box is red.}
\lipsum[1]
\section{Complete sectinon}\versionB{1}{This section is complete, therefore this box \emph{should} be green.}
\lipsum[2]
\end{document}
在页边空白处打印注释,以显示某一部分是否已完成。如果突出显示,则背景应为绿色,否则为红色。在上面的示例中,我使用命令 \versionB 仅显示示例的注释。将其更改为简单的 \version 以使用该命令,该命令应使其根据给定的第一个参数改变颜色。
此命令目前扩展错误。
答案1
\newcommand{\version}[2]{\marginpar{%
\expandafter\colorbox{%
\csname \ifthenelse{%
\equal{#1}{1}}{green}{red}\endcsname}{%
\begin{minipage}{\marginparwidth}
\expandafter
在代币\colorbox
。此处is {
so后面的标记\expandafter
不执行任何操作,因为{
它不可扩展。
\csname
和之间的标记\endcsname
必须扩张转换为字符标记序列,然后将其用作命令名。\ifthenelse
不能通过扩展来工作,它内部有组和\def
分配\let
,所以根本不能在这里使用。
我认为你想要一个可扩展的测试,根据是否如此来选择红色或#1
绿色1
:
\newcommand{\version}[2]{\marginpar{%
\colorbox{\ifnum#1=1 green\else red\fi}{%
\begin{minipage}{\marginparwidth}
请注意,\colorbox
使用相同的\fboxsep
填充,除非您在内部小页面太宽的地方\fbox
将其设置为 0pt 。\fboxsep
2\fboxsep