使用 \equal 检查一个命令,然后将该命令用于另一个命令?

使用 \equal 检查一个命令,然后将该命令用于另一个命令?

我正在尝试检查一个命令的定义(阿拉伯语、罗马语、罗马字母、阿尔法字母等),并根据这些信息更改章节标题的格式,同时利用格式化命令中的命令定义。

我遇到的问题是,如果等号中有反斜杠,我似乎无法使用它\ifthenelse来检查两个东西是否相等。但是,从另一个角度来看,我无法在命令前使用反斜杠来生成新命令,因为两个反斜杠会产生换行符(如下例所示)。

请注意,在命令中第一个实例中更改\\sectionnumstyle\arabic,然后\Alph在第二个实例中更改\titleformat为 将产生所需的输出。

\documentclass[10pt,a5paper]{book}
\usepackage{ifthen}
\usepackage[calcwidth]{titlesec}

\newcommand\sectionnumstyle{arabic}

\titleformat{\section}[frame]
    {\centering\Large}
    {Section \ifthenelse{\equal{\sectionnumstyle}{arabic}}
        {\oldstylenums{\\sectionnumstyle{section}}}
        {\\sectionnumstyle{section}}}
    {1em}{\centering}[]

\begin{document}
\section{Hello}

\renewcommand\sectionnumstyle{Alph}

\section{Goodbye}
\end{document}

我知道我可以简单地使用\ifthenelse,检查每个可能的值(阿拉伯语、罗马语、罗马字母、阿尔法等),并根据命令的每个可能定义产生\oldstylenums\arabic{section}\roman{section}\Roman{section}等结果\Alph{section},但这似乎很长而且没有必要。如果有人有更简单、更快捷的解决方案,我将不胜感激。

答案1

您需要了解\csname...\endcsname。例如,\csname\sectionnumstyle\endcsname可以完成我认为您尝试使用 完成但未成功完成的任务\\sectionnumstyle

\documentclass[10pt,a5paper]{book}
\usepackage{ifthen}
\usepackage[calcwidth]{titlesec}

\newcommand\sectionnumstyle{arabic}

\titleformat{\section}[frame]
    {\centering\Large}
    {Section \ifthenelse{\equal{\sectionnumstyle}{arabic}}
        {\oldstylenums{\csname\sectionnumstyle\endcsname{section}}}
        {\csname\sectionnumstyle\endcsname{section}}}
    {1em}{\centering}[]

\begin{document}
\section{Hello}

\renewcommand\sectionnumstyle{Alph}

\section{Goodbye}
\end{document}

在此处输入图片描述

相关内容