我正在撰写一份由单独准备的文件组成的报告。不幸的是,几乎所有文档都包含以不同格式编写的算法,例如 \WHILE 和 \While 。我遇到一个问题,我需要更改某些文档中的每个算法,因为我需要将它们编译在一起。
有没有办法让乳胶忽略大小写的差异?
示例代码:
主文本
\documentclass[a4paper,12pt]{report}
\usepackage{algorithm, algpseudocode}
\begin{document}
\include{document1}
\include{document2}
\end{document}
文档1.tex
\begin{algorithm}
\begin{algorithmic}
\WHILE{A}
\STATE Do Something
\ENDWHILE
\end{algorithmic}
\end{algorithm}
文档2.tex
\begin{algorithm}
\begin{algorithmic}
\While{A}
\State Do Something
\EndWhile
\end{algorithmic}
\end{algorithm}
答案1
在第一个示例中,语法为 if for algorithmic
。如果命令的语法相同,则可以执行
\newcommand{\WHILE}{\While}
其他命令也类似。
请注意,参数中的空格不会被忽略,并且\State
括号中不带参数。
\documentclass[a4paper,12pt]{report}
\usepackage{algorithm, algpseudocode}
\newcommand{\WHILE}{\While}
\newcommand{\ENDWHILE}{\EndWhile}
\newcommand{\STATE}{\State}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\WHILE{A}
\STATE Do Something
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\begin{algorithm}
\begin{algorithmic}
\While{A}
\State Do Something
\EndWhile
\end{algorithmic}
\end{algorithm}
\end{document}
填写要定义的命令列表不会花很长时间。
只是为了好玩,一些命令将整个列表大写;*
开头的表示我们还想要相关的\END...
命令。
\documentclass[a4paper,12pt]{report}
\usepackage{algorithm, algpseudocode,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\CAPITALIZE}{m}
{
\clist_map_inline:nn { #1 } { \hope_capitalize:w ##1 \q_stop }
}
\cs_new_protected:Npn \hope_capitalize:w
{
\peek_charcode_remove:NTF { * }
{ \__hope_capitalize_end:w }
{ \__hope_capitalize_single:w }
}
\cs_new_protected:Npn \__hope_capitalize_single:w #1 \q_stop
{
\cs_set_eq:cc { \str_uppercase:n { #1 } } { #1 }
}
\cs_new_protected:Npn \__hope_capitalize_end:w #1 \q_stop
{
\cs_set_eq:cc { \str_uppercase:n { #1 } } { #1 }
\cs_set_eq:cc { \str_uppercase:n { END#1 } } { End#1 }
}
\ExplSyntaxOff
\CAPITALIZE{*While,State}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\WHILE{ A}
\STATE Do Something
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\begin{algorithm}
\begin{algorithmic}
\While{A}
\State Do Something
\EndWhile
\end{algorithmic}
\end{algorithm}
\end{document}