如何使重载函数的可选择变量位置在接收到空输入时也能像没有给出可选择变量的情况一样运行?

发布于 2022-02-02 19:32:07

我在制作毕业论文模版的时候使用xparse里的NewDocumentCommand命令实现当论文标题含有副标题时,用户在main.tex文件中输入

\title={主标题},
\subtitle={副标题},

结果输出为image.png


当论文标题没有副标题时,用户在main.tex文件中输入

\title={主标题},
\subtitle={},

结果输出为image.png

。我目前尝试的代码在第二种情况显示的结果为image.png

\newcommand*{\title}[1]{\gdef\@title{#1}} %定义主标题变量
\newcommand*{\subtitle}[1]{\gdef\@subtitle{\relax #1}} %定义副标题变量
\NewDocumentCommand{\PrintTitle}{mg}
{
    \IfNoValueTF {#2}
    {#1}%
    {#1 \\ \flushright ——#2}
}
\newcommand{\TITLE}
{
    \IfNoValueTF {\subtitle}
    {\PrintTitle{\title}}
    {\PrintTitle{\title}{\subtitle}}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出文本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

请问应该如何解决,谢谢

查看更多

关注者
0
被浏览
874
雾月
雾月 2022-02-02
这家伙很懒,什么也没写!

先给出修改后的代码:

\makeatletter
\def\@subtitle{}
%% 下面两行一般是不用的
%\def\@title{}
%\newcommand*{\title}[1]{\gdef\@title{#1}} %定义主标题变量
\newcommand*{\subtitle}[1]{\gdef\@subtitle{\relax #1}} %定义副标题变量
\NewDocumentCommand{\PrintTitle}{mg}
  {%
    \IfNoValueTF {#2}
    {#1}%
    {#1 \\ \flushright ——#2}%
  }
\newcommand{\TITLE}
  {%
    \ifx\@subtitle\@empty
      \PrintTitle{\@title}\relax
    \else
      \PrintTitle{\@title}{\@subtitle}%
    \fi
  }
\makeatother

使用时

\title{主标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

image.png

或,

\title{主标题}
\subtitle{副标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

image.png

\title\subtitle 的作用是存储其参数到 \@title\@subtitle 中,\ifx\@subtitle\@empty 是检测 subtitle 是否为空。

TeX 不使用“重载”这一概念,甚至没有“函数”这一概念,TeX 是一门宏语言,与其它编程语言的工作方式并不相同。

完整示例:

\documentclass{ctexart}
%\usepackage{xparse}

\makeatletter
\def\@subtitle{}
%\newcommand\@title{}
%\newcommand*{\title}[1]{\gdef\@title{#1}} %定义主标题变量
\newcommand*{\subtitle}[1]{\gdef\@subtitle{\relax #1}} %定义副标题变量
\NewDocumentCommand{\PrintTitle}{mg}
  {%
    \IfNoValueTF {#2}
    {#1}%
    {#1 \\ \flushright ——#2}%
  }
\newcommand{\TITLE}
  {%
    \ifx\@subtitle\@empty
      \PrintTitle{\@title}\relax
    \else
      \PrintTitle{\@title}{\@subtitle}%
    \fi
  }
\makeatother

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出文本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\title{主标题}
\subtitle{副标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

\end{document}
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览