每次我尝试使用带有星号的 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*
本身并不是一个真正的命令。命令名称是\section
which ,\@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*
替换。\xpatchcmd
xpatch
更简单的命令是\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}