我想编写一份文档,以便\section
材料显示在页边距中,并且\subsection
材料显示在与页边距相同的行上(当然,假设和命令\section
之间没有任何其他内容)。\section
\subsection
粗略地说,我想要类似这样的东西:
以下代码(\vspace
取消注释命令)产生上述输出。
但是,这种实现方式看起来有点不合理,因为你必须在\vpsace
每个命令\subsection
后面(不是第一个\section
命令)以及每个在 a 中\subsection
是第一个但前面有其他内容的命令后面放置任意的 。\subsection
\section
有什么更好、更强大的方法来做到这一点?
\documentclass{article}
\usepackage{parskip}
\usepackage{enumitem}
\setlist{nosep}
\usepackage{titlesec}
\titleformat{\section}[leftmargin]
{\Large\scshape\raggedright}
{\thesection}
{1em}
{}
\titlespacing{\section}
{7pc}
{1ex plus .1ex minus .2ex}
{0pc}
\titleformat{\subsection}
{\large\scshape\raggedright}
{\thesubsection}
{1em}
{}
\titlespacing{\subsection}
{0pt}
{-1.6\baselineskip}
{0pt}
\begin{document}
\section*{asdf}
\subsection*{qwerty}
\begin{itemize}
\item{poiu}
\end{itemize}
%\vspace{1.6\baselineskip}
\subsection*{zxcv}
\begin{itemize}
\item{lkjh}
\end{itemize}
\section*{mnbv}
lorem ipsum
%\vspace{1.6\baselineskip}
\subsection*{zqpm}
\end{document}
答案1
这里有一个稍微不那么坑爹的方法。我创建了一个条件语句,etoolbox
如果子节紧跟在某个节后面,则使用这个条件语句将子节与节对齐,否则不对齐。
这里唯一真正的窍门是,如果你有一个部分不是紧接着一个小节,您需要\nosubsection
在其后明确添加一个命令。
由于您没有对节或小节进行编号,因此我仅将其设置secnumdepth
为 0,而不是使用\section*
等,因为这些没有必要。
\documentclass{article}
\usepackage{parskip}
\usepackage{enumitem}
\usepackage{etoolbox}
\setlist{nosep}
\newbool{subsection}
\newcommand*{\nosubsection}{\global\boolfalse{subsection}}
\usepackage{titlesec}
\setcounter{secnumdepth}{0}
\titleformat{\section}[leftmargin]
{\Large\scshape\raggedright}
{\thesection}
{1em}
{\global\booltrue{subsection}}
\titlespacing{\section}
{1in}
{1ex plus .1ex minus .2ex}
{1em}
\titleformat{\subsection}
{\ifbool{subsection}{\vspace{-1.6\baselineskip}\nosubsection}{}\large\scshape\raggedright}
{\thesubsection}
{1em}
{}
\titlespacing{\subsection}
{0pt}
{0pt}
{0pt}
\begin{document}
\section{Section}
\subsection{Subsection}
\begin{itemize}
\item{item}
\end{itemize}
\subsection{Subsection}
Some text
\begin{itemize}
\item{item}
\end{itemize}
\section{Section}
\nosubsection
lorem ipsum
\subsection{Subsection}
\end{document}