将现有命令/宏从 1 个参数更改为 0 个参数

将现有命令/宏从 1 个参数更改为 0 个参数

如何更改已经存在的命令,使其使用 0 个参数工作?

例如,\underline{}\textbf{}宏各接受 1 个参数。但是,我希望它们接受 0 个参数,以便我可以在环境中使用它们:

\newenvironment{e}{\textbf\underline}{}

或者像这样:{\textbf Hello this text is BOLD.} And this is not. 我正在考虑定义一个新的宏:

\newcommand{\underlinee}{}

那么我的问题是:我该如何定义这个新的宏?我应该在空白处写什么{}

答案1

soul您可以使用或 来完成ulem

\documentclass{article}
\usepackage{xparse}
\usepackage{soul}

\NewDocumentEnvironment{obnoxious}{b}
 {\textbf{\ul{#1}}}
 {}

\begin{document}

Some text before
\begin{obnoxious}
some text in bold face and underlined. You can't use multiple paragraphs
\end{obnoxious}
and other text follows.

\end{document}

当然,\textbf最好使用\bfseries

\documentclass{article}
\usepackage{xparse}
\usepackage{soul}

\NewDocumentEnvironment{obnoxious}{b}
 {\bfseries\ul{#1}}
 {}

\begin{document}

Some text before
\begin{obnoxious}
some text in bold face and underlined. You can't use multiple paragraphs
\end{obnoxious}
and other text follows.

\end{document}

因为\textbf{text}大部分都像{\bfseries text}(只是简化)。

您可以使用多个段落吗?是的,但还需要一些工作。

\documentclass{article}
\usepackage{xparse}
\usepackage{soul}

\ExplSyntaxOn
\seq_new:N \l__vebjorn_obnoxious_in_seq
\seq_new:N \l__vebjorn_obnoxious_out_seq

\NewDocumentEnvironment{obnoxious}{+b}
 {
  \seq_set_split:Nnn \l__vebjorn_obnoxious_in_seq { \par } { #1 }
  \seq_set_map:NNn \l__vebjorn_obnoxious_out_seq \l__vebjorn_obnoxious_in_seq
   {
    \exp_not:n { \ul { ##1 } }
   }
  \bfseries\seq_use:Nn \l__vebjorn_obnoxious_out_seq { \par }
 }
 {}
\ExplSyntaxOff

\begin{document}

Some text before
\begin{obnoxious}
some text in bold face and underlined. 

You can even use multiple paragraphs
\end{obnoxious}
and other text follows.

\end{document}

当然,这只是为了学术兴趣,不是吗?长文本以粗体显示下划线就像是一拳打在眼睛上。下划线本身在精细排版中不被认为是一种好的设计。

因此,我不会展示结果的图像。

相关内容