我怎样才能用小节 (subsection) 替换节* (section*)?

我怎样才能用小节 (subsection) 替换节* (section*)?

每次我尝试使用带有星号的 Latex 命令时,编译器都会说

"Paragraph ended before \@sect was complete."

我想定义

\begingroup
\let\section*=\subsection
\endgroup

这是为了替换\listoffigures和的所有 section* 标题\listofalgorithms

我正在使用文章类。

示例代码:

%% LyX 2.1.2 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[12pt,english]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=0cm,bmargin=0cm,lmargin=0cm,rmargin=0cm}
\usepackage{float}

\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
\floatstyle{ruled}
\newfloat{algorithm}{tbp}{loa}
\providecommand{\algorithmname}{Algorithm}
\floatname{algorithm}{\protect\algorithmname}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{algorithm}

\makeatother

\usepackage{babel}
\begin{document}
\begin{algorithm}
\protect\caption{sdfdsfdfsdfdsfsd}


\end{algorithm}
\begingroup
\let\section*=\subsection

\listof{algorithm}{List of Algorithms}


\endgroup
\end{document}

我也尝试过用 listofalgorithms 来做

\usepackage{algorithm}
\usepackage[titles]{tocloft}
\usepackage[nottoc,numbib]{tocbibind}
\renewcommand{\listofalgorithms}{\begingroup
\tocsection
\tocfile{\listalgorithmname}{loa}
\endgroup}

但仅此而已结果截图是结果。

答案1

错误的原因在于它\section*本身并不是一个真正的命令。命令名称是\sectionwhich ,\@startsection使用第一个参数进行调用section。它所做的早期工作之一\@startsection是检查以下输入字符是否是*:如果是,*\@ssect调用,否则它本质上运行\@sect

\show\section*您可以通过发布文档来获取部分信息。该.log文件将包含:

> \section=\long macro:
->\@startsection {section}{1}{\z@ }{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus .2ex}{\normalfont \Large \bfseries }.
l.20 \show\section
                  *

最后两行和之间的分隔符\section表示**不是名称的一部分。有关更多详细信息,请阅读source2e.pdf

无论如何,对于更改算法列表的标题样式或其他内容,您建议的替换不是正确的方法。 Christian Hupfer 的答案指向相关的宏,但您实际上不需要使用修补命令。 只需简单地重新定义即可,\float@listhead要么在序言中对所有此类列表产生全局影响,要么在包含\listof您希望影响的特定命令的本地组中。 这是全局版本:

示例输出

\documentclass[12pt,english]{article}

\usepackage[utf8]{inputenc}
\usepackage{float}

\floatstyle{ruled}
\newfloat{algorithm}{tbp}{loa}
\providecommand{\algorithmname}{Algorithm}
\floatname{algorithm}{\protect\algorithmname}
\makeatletter
\renewcommand{\float@listhead}[1]{\subsection{#1}}
\makeatother

\usepackage{algorithm}

\usepackage{babel}

\begin{document}

\tableofcontents

\section{First section}
\label{sec:first-section}


\begin{algorithm}
\caption{Substitute}
Replace \( x \) by \( y \).
\end{algorithm}

\listof{algorithm}{List of Algorithms}

\end{document}

对于图形相应的重新定义是:

\makeatletter
\renewcommand{\listoffigures}{\subsection{\listfigurename}\@starttoc{lof}}
\makeatother

请注意,我的两个重新定义都将运行头的处理留给了\subsection命令。

答案2

这些命令可以用包来\section*替换。\xpatchcmdxpatch

更简单的命令是\listoffigures,它\section*默认使用,但是由于float使用并\listof使用\float@listhead,后面的命令也必须进行修补。

这里,所有其他浮点数也将用于\section*\listof命令。

\documentclass[12pt,english]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\geometry{verbose,tmargin=0cm,bmargin=0cm,lmargin=0cm,rmargin=0cm}
\usepackage{float}

\makeatletter

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
\floatstyle{ruled}
\newfloat{algorithm}{tbp}{loa}
\providecommand{\algorithmname}{Algorithm}
\floatname{algorithm}{\protect\algorithmname}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\makeatother

\usepackage{algorithm}

\usepackage{xpatch}

\makeatletter
\xpatchcmd{\listoffigures}{\section*}{\subsection}{}{}
\xpatchcmd{\float@listhead}{\section*}{\subsection}{}{}
\makeatother
\usepackage{babel}
\begin{document}
\tableofcontents
\listoffigures
\begin{algorithm}
\protect\caption{sdfdsfdfsdfdsfsd}


\end{algorithm}


\listof{algorithm}{List of Algorithms}



\end{document}

在此处输入图片描述

相关内容