我正在尝试检查一个命令的定义(阿拉伯语、罗马语、罗马字母、阿尔法字母等),并根据这些信息更改章节标题的格式,同时利用格式化命令中的命令定义。
我遇到的问题是,如果等号中有反斜杠,我似乎无法使用它\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}