\newcommand 与 \def 用于课堂开发

\newcommand 与 \def 用于课堂开发

通过阅读文件内容(LaTeX 的标准书籍类),我发现和book.cls有很多用途。我似乎不明白为什么在某些情况下使用一个,而在其他情况下使用另一个。我找不到规律。\def\newcommand

\def我理解和之间的区别\newcommand,并且我知道在日常文档写作中我应该更喜欢后者。但是,我的问题是关于类和包开发的上下文。例如,我可以\title为我的新书类定义一个命令,该命令也接受副标题作为可选参数,方法是编写

\def\doc@title{}
\def\doc@subtitle{}
\def\title{\kernel@ifnextchar[{\@@title}{\@title}%
\def\@title#1{
    \@@title[]{#1}%
}
\def\@@title[#1]#2{%
    \gdef\doc@subtitle{#1}
    \gdef\doc@title{#2}
}

不过我也可以说,

\newcommand\doc@title{}
\newcommand\doc@subtitle{}
\newcommand{\title}[2][]{
    \gdef\doc@subtitle{#1}
    \gdef\doc@title{#2}
}

在前面的代码片段中,是否有理由选择其中一种方法而不是另一种方法?

类似地,该book.cls文件有这一行:

\DeclareOption{10pt}{\renewcommand\@ptsize{0}}

为什么不写成

\DeclareOption{10pt}{\def\@ptsize{0}}

\newcommand在课程/包开发中,在某些情况下使用什么标准,在其他情况下使用什么标准\def

答案1

使用 expl3,所有\XX_new:N命令系列及其细微差别也会进入画面。:)

解释3

Expl3 是很多更容易编码。

不过,其基本答案(哲学答案)与链接问题相同。

平均能量损失

% arara: lualatex

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \g_ds_doctitle_tl
\tl_new:N \g_ds_docsubtitle_tl
\tex_def:D \mymeta #1 {
    \textsf{\textbf{ #1 }}
}
\tex_def:D \commandbuild #1#2#3 {
        \c_backslash_str
        #1
        \c_underscore_str
        #2
        \c_colon_str
        #3
}
\tex_def:D \texdef {
        \begin{center}
        The ~ difference ~ between ~ X ~ and ~ Y
        \end{center}
        \begin{center}
        \mymeta { \commandbuild {tex}{def}{D} } ~ and ~ all ~ the ~
        \mymeta { \commandbuild {XX}{new}{N} } ~ commands
        \end{center}
        }


\NewDocumentCommand { \mytitle } { o +m } {
    \tl_gset:Nx \g_ds_doctitle_tl { #2 }
    \IfValueT { #1 }
    {
            \tl_gset:Nx \g_ds_docsubtitle_tl { #1 }

            \regex_replace_all:nnN
                    { (subtitle)+ }
                    { \c{underline} \cB\{ \0 \cE\} }
                    \g_ds_docsubtitle_tl

            \tl_gput_left:Nn \g_ds_docsubtitle_tl 
            { 
                    \vspace { 2\tex_baselineskip:D }
                    \begin{center}
            }
            \tl_gput_right:Nn \g_ds_docsubtitle_tl 
            { 
                    \end{center}
            }
                    
            \tl_gput_right:Nn \g_ds_doctitle_tl 
            { 
                    \large \upshape 
            }
            \tl_gput_right:NV \g_ds_doctitle_tl \g_ds_docsubtitle_tl
    }
    
    \tl_gput_left:Nn \g_ds_doctitle_tl { \Large }
    \tl_gput_right:Nn \g_ds_doctitle_tl { \texdef }
            
}



\NewDocumentCommand { \printtitle } { } {
        \tl_if_empty:NF \g_ds_doctitle_tl
        {
        \group_begin:
        \center
        \itshape
        \tl_use:N \g_ds_doctitle_tl
        \group_end:
        }
}

\ExplSyntaxOff


\mytitle[My subtitle A]{Multiparagraph

My Title A}

%============  document 
\begin{document}
\printtitle

\end{document}

相关内容