使用 \ifdefined 显示/隐藏内容

使用 \ifdefined 显示/隐藏内容

我正在\newcommand\ifdefined以下方式使用:

\documentclass[12pt]{article}
\usepackage{color}
\newcommand{\showcomment}{}
\newcommand{\scomment}[1]{\ifdefined\showcomment\textcolor{blue} {\small\bfseries[ #1 --someone ]}\else\fi}
\begin{document}
some content
\scomment{comment}
some content
\end{document}

在此处输入图片描述

这样,我可以取消注释\newcommand{\showcomment}{}以避免在 pdf 中显示内联注释。但问题是,这样做时,它会留下两个空格之间some content

在此处输入图片描述

如果我注释掉\scomment{comment},则相邻内容之间仅显示一个空格。但这显然不是理想的方式,因为会有很多这样的命令。

有没有办法可以实现相同的功能,同时避免双倍空格?

答案1

我自己不会相信这一点。为什么不使用fixme或者todonotes或者为此设计的众多其他包装之一?你想重新发明轮子吗?好的。但是,说真的,你的六边形设计真的能成功吗?当然,圆形已经过时了,有点无聊,是老人们使用的,但是,最终,也许设计师知道如何完成这项工作?

\documentclass[12pt]{article}
\usepackage{xcolor}
\newcommand{\scomment}[1]{\ifdefined\showcomment\textcolor{blue}{\small\bfseries[ #1 --someone ]}\else\unskip\fi}
\begin{document}
some content
\scomment{comment}
some content

\newcommand{\showcomment}{}%
some content
\scomment{comment}
some content
\end{document}

间隔设施

\bf\it\tt其余部分由于引入了 NFSS 和 LaTeX 2e 而被淘汰,不应与 LaTeX 格式一起使用。有些课程甚至不再支持它们。

这些命令以及它们当前等效的命令或任何字体大小命令都不接受参数。

\small{hi} bye

\small hi bye

并将使文档的其余部分使用较小的字体大小,直到您将其改回原样。

答案2

LaTeX 中有一些命令,例如\label或,它们在 .tex-input 中的出现不应影响 LaTeX 在处理相关的-command 或-command\index时即将排版的文本段落的外观。\label\index

这些宏在内部使用\@bsphack..\@esphack以确保如果它们之前也有空格,则它们后面的空格将被忽略。

不幸的是,当您有一系列 \label- 或\index-命令时,算法会受到干扰。

在下面的例子中,我实现了一种似乎不会受到干扰的变体。

除此之外,我决定根据以一种不会被参数中的不平衡//\showcomment所欺骗的方式定义来实现分叉。\if..else\fi\showcomment

\documentclass[12pt]{article}
\usepackage{color}

%--------------------------------------------------------
% This just draws a grid so you can with monospaced fonts
% like \texttt see the amount of horizontal spaces
%
% This is quick and dirty. Don't use it for produtive
% work.
%
% \uglygridphantom{<width>}{<height>}{<linecolor>}{<background color>}
%
\newcommand\uglygridphantom[4]{%
%  \leavevmode
  \rlap{%
    \vbox to 0cm{%
      \kern\dp\strutbox
      \kern-.5\baselineskip
      \noindent\fboxsep=0cm
      \setbox\csname @tempboxa\endcsname=\hbox{W}%   
      \kern-.5\wd\csname @tempboxa\endcsname
      \colorbox#4{%
        \vbox to \numexpr#2+1\relax\baselineskip{%
          \leaders\hbox{%
            \hbox to \numexpr#1+1\relax\wd\csname @tempboxa\endcsname{%
              \setbox\csname @tempboxa\endcsname=\hbox{W\kern-\fboxrule}%
              \leaders\hbox{%
                \textcolor#3{%
                  \rule{.5\wd\csname @tempboxa\endcsname}{\fboxrule}%
                  \rule[-.5\baselineskip]{\fboxrule}{\baselineskip}%
                  \rule{.5\wd\csname @tempboxa\endcsname}{\fboxrule}%
                }%
              }\hfill
            }%
          }\vfill
        }%
      }%
    }%
  }%
}
%--------------------------------------------------------



%\newcommand{\showcomment}{}
\makeatletter
\newcommand{\scomment}[1]{%
  \my@bsphack
  \ifdefined\showcomment
    \expandafter\my@esphack\expandafter\@firstofone
  \else
    \expandafter\my@esphack\expandafter\@gobble
  \fi
  {%
    \textcolor{blue}{%
      {%
        %% Turn off the font changes as they 
        %% disturb my nice little grid :-)
        %\small\bfseries\selectfont
        [ #1 --someone ]%
      }%
    }%
  }%
}
\newskip\mysavsk
\newcommand*\my@bsphack{%
  \relax
  \ifhmode\mysavsk\lastskip\@savsk\lastskip\@savsf\spacefactor\fi
}%
\newcommand*\my@esphack{%
  \relax
  \ifhmode
    \spacefactor\@savsf
    \ifdim\@savsk>\z@
      \ifdim\lastskip=\z@\nobreak\hskip\z@skip\fi
      \nobreak\hskip-\mysavsk
      \nobreak\hskip\mysavsk
      \ignorespaces
    \fi
  \fi
}%
\makeatother

\begin{document}
\frenchspacing
\parindent=0ex
\parskip=0ex

\let\showcomment=\UnDeFinED
\rmfamily\selectfont
Now\verb|\showcomment| is undefined:
\ttfamily\selectfont

\uglygridphantom{69}{2}{[rgb]{0.5059,0.5059,0.5059}}{[rgb]{0.9294,0.9294,0.9294}}%
some content
\scomment{commentA} \scomment{commentB}
\scomment{commentC} \scomment{commentD}
some content

\vspace*{2\baselineskip}
\def\showcomment{}
\rmfamily\selectfont
Now\verb|\showcomment| is defined:
\ttfamily\selectfont

\uglygridphantom{69}{2}{[rgb]{0.5059,0.5059,0.5059}}{[rgb]{0.9294,0.9294,0.9294}}%
some content
\scomment{commentA} \scomment{commentB}
\scomment{commentC} \scomment{commentD}
some content

\vspace*\baselineskip
\rmfamily\selectfont
I hope that did the trick.

\end{document}

在此处输入图片描述

相关内容