我使用titlesec
软件包来自定义我的部分。当我使用命令\titleformat
和时\titlespacing
,会创建一个“书签”,因为我\section
在这些命令中写入了内容,根据软件包文档,这是必要的。
代码:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{titlesec}
\titleformat{\section}[hang]{\normalfont\bfseries}{\thesection}{0.7em}{}[]
\titlespacing{\section}{0em}{1.5em}{1.5em}
\begin{document}
\section{Section}
\lipsum[1]
\end{document}
我正在使用 TeXstudio,在左侧的“结构”菜单中,您可以看到以下部分的前两个“书签”(不知道它的正确名称):\normalfont\bfseries
和0em
,对应于\section
代码中的前两个。如何在不创建这些书签的情况下使用这些命令?
答案1
你必须欺骗 TeXstudio 让它看不到内部\section
和\titleformat
。\titlespacing
为此使用:
\expandafter\titleformat\expandafter{\csname section\endcsname}[hang]{\normalfont\bfseries}{\thesection}{0.7em}{}[]
\expandafter\titlespacing\expandafter{\csname section\endcsname}{0em}{1.5em}{1.5em}
答案2
首先,应该在\documentclass
和之间禁用TeXStudio的结构制作过程。\begin{document}
以下代码对于特定应用程序来说可能有些过度,但它可以为更新选项管理提供思路titlesec
。
整修过程如下:
如果使用单个标记作为参数来调用
\titleformat
或,则假定它是或其他分段命令名称;-variant 被考虑在内。\titlespacing
\section
*
如果的参数
\titlespacing
不是单个标记,则为其构建一个命令名称,因为我们假设它是\titlespacing{section}
或类似的;*
-variant 被考虑在内。\titleformat
如果(no )的参数*
由多个标记组成,则它可以是单个分段命令名称(不带反斜杠)或一组键值选项。在前一种情况下,如果扫描到未知的键,则假定它是一个分段命令名称,例如
section
:passname=\section
。密钥
numberless
按原样传递。诸如这样的键值对
name=\section
按原样传递。一个键值对,例如
name=section
passesname=\section
。
在最后四种情况下,“传递”意味着\titleformat
使用构建的参数调用原始参数。
\documentclass{article}
\usepackage{titlesec,letltxmacro,xparse}
\ExplSyntaxOn
\LetLtxMacro \titlesectitleformat \titleformat
\LetLtxMacro \titlesectitlespacing \titlespacing
\RenewDocumentCommand{\titlespacing}{sm}
{
\tl_if_single:nTF { #2 }
{
\tl_set:Nn \l_xtitlesec_arg_tl { #2 }
}
{
\tl_set:Nx \l_xtitlesec_arg_tl { \exp_not:c { #2 } }
}
\IfBooleanTF{#1}
{
\exp_args:NNV \titlesectitlespacing * \l_xtitlesec_arg_tl
}
{
\exp_args:NV \titlesectitlespacing \l_xtitlesec_arg_tl
}
}
\RenewDocumentCommand{\titleformat}{sm}
{
\IfBooleanTF{#1}
{
\tl_if_single:nTF { #2 }
{
\tl_set:Nn \l_xtitlesec_arg_tl { #2 }
}
{
\tl_set:Nx \l_xtitlesec_arg_tl { \exp_not:c { #2 } }
}
\exp_args:NNV \titlesectitleformat * \l_xtitlesec_arg_tl
}
{\xtitlesec_titleformat:n { #2 }}
}
\cs_new_protected:Npn \xtitlesec_titleformat:n #1
{
\tl_if_single:nTF { #1 }
{% the argument is just '\levelname'
\titlesectitleformat { #1 }
}
{% otherwise scan the argument more carefully
\clist_clear:N \l_xtitlesec_options_clist
\keys_set:nn { xtitlesec/titleformat } { #1 }
\exp_args:NV \titlesectitleformat \l_xtitlesec_options_clist
}
}
\clist_new:N \l_xtitlesec_options_clist
\keys_define:nn { xtitlesec/titleformat }
{
name .code:n =
\tl_if_single:nTF { #1 }
{% the value is just one token, assume it is '\levelcommand'
\clist_put_right:Nn \l_xtitlesec_options_clist { name=#1 }
}
{% the value is multitoken, assume it is 'levelcommand'
\clist_put_right:Nx \l_xtitlesec_options_clist { name=\exp_not:c { #1 } }
}
,
numberless .code:n =
\clist_put_right:Nn \l_xtitlesec_options_clist { numberless }
,
unknown .code:n =
\clist_put_right:Nx \l_xtitlesec_options_clist { name=\exp_not:c { \l_keys_key_tl } }
}
\ExplSyntaxOff
% example calls follow
\titleformat{\section}[hang]{\normalfont\bfseries}{\thesection}{0.7em}{}[]
\titleformat{section}[hang]{\normalfont\bfseries}{\thesection}{0.7em}{}[]
\titleformat{name=section,numberless}[hang]{\normalfont\bfseries}{\thesection}{0.7em}{}[]
\titlespacing*{\section}{0em}{1.5em}{1.5em}
\titlespacing*{section}{0em}{1.5em}{1.5em}