番号付き段落の後のテキストのインデント

番号付き段落の後のテキストのインデント

番号付きのセクション、サブセクション、段落を含む 60 ページの文書があります。すべての段落に番号が付けられています。次の例に示すように、番号付き段落の後にすべてのテキストを均等にインデントします。

1.      Section

1.1     Subsection

1.1.1   Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
        Donec rhoncus non ante faucibus tempus. Quisque ex orci, 
        faucibus vitae magna sed, blandit fermentum massa. 

1.1.2   Some numbered paras interrupted by lists: 
        * Item 1
        * Item 2
        * Item 3
        and some text to finish the paragraph

1.1.2   Some numbered paras interrupted by sets of equations using AMSmath: 

            A = B
            C = D

        and some text to finish the paragraph

現在、私は次の koma-script クラスを中心に構築された約 60 ページのテキスト (多くの方程式を含む) を持っています。

% -*- program: xelatex -*-
\documentclass[english, parskip=full, fontsize=11, DIV12, toc=left, numbers=noenddot]{scrartcl}
\usepackage{babel}
\usepackage{amsmath}
% just so we can see what is going on for now
\usepackage{showframe}
\usepackage{blindtext}
% tighten up spacing of lists
\usepackage{enumitem}
\setlist{noitemsep}


\setcounter{secnumdepth}{4}
\renewcommand\theparagraph{\thesubsection.\arabic{paragraph}}
\newcommand\p{\paragraph{}}
%
%
% make sure paragraphs reset counting at section and subsections
%
\makeatletter
\@addtoreset{paragraph}{subsection}
\@addtoreset{paragraph}{section}
\makeatother
%
% AND NOW WE BEGIN
%
\begin{document}
\section{Section}
\subsection {Subsection}
\p \blindtext
% an example numbered paragraph with an embedded list
\p \blindtext
\begin{itemize}
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
and some words at the end of this para

% an example numbered paragraph with a simple equation
\p The period is defined by a pair of days ($D_l$, $D_u$) where 
\begin{align*}
D^_{l} & =  \text{the lower date}  \\
D^_{u} & =  \text{the upper date}
\end{align*}
and things happen for all days $d$ where $D_l <= d< D_u$. 
\end{document}

つまり、すべてのテキストが左端の余白に戻ります。\addmarginリストや数式を左からインデントするには、koma-script コマンドのようなものを使用できれば理想的ですが、\p番号付き段落コマンドを調整して、番号付けが左揃えで始まるようにし、番号の周りにボックスを付けて標準サイズにし、\p 段落の残りの部分にハンギング コマンドを使用して、インデントされたテキストの残りの部分と均等になるようにします。

または、他の何か ....

しかし、今のところ、これは私の LaTeX スキルの範囲を超えています。

答え1

アップデート:KOMA スクリプトバージョン 3.17 (またはそれ以降)

KOMAスクリプト版では、 コマンドは\othersectionlevelsformat廃止されました。代わりに などを使用する必要があります\sectionformat\subsectionformatしたがって、コードは次のように変更されます。

% -*- program: xelatex -*-
\documentclass[english, parskip=full, fontsize=11, DIV12, toc=left, numbers=noenddot]{scrartcl}
\usepackage{babel}
\usepackage{amsmath}
% just so we can see what is going on for now
\usepackage{showframe}
\usepackage{blindtext}
% tighten up spacing of lists
\usepackage{enumitem}
\setlist{noitemsep}

\setcounter{secnumdepth}{4}
\newcommand\p{\paragraph{}}

\newcommand\secnumindent{1.5cm}
\RedeclareSectionCommands[indent=-\secnumindent]{section,subsection,paragraph}
\RedeclareSectionCommand[afterskip=0pt,counterwithin=subsection]{paragraph}
\renewcommand\sectionformat{\parbox{\secnumindent}{\thesection\autodot}}
\renewcommand\subsectionformat{\parbox{\secnumindent}{\thesubsection\autodot}}
\renewcommand\subsubsectionformat{\parbox{\secnumindent}{\thesubsubsection\autodot}}
\renewcommand\paragraphformat{\parbox{\secnumindent}{\theparagraph\autodot}}

% from the answer of @Steven:
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
%
% make sure paragraphs reset counting also at sections    
%
\makeatletter
\@addtoreset{paragraph}{section}
\makeatother
% to reset headwidth and footwidth
\usepackage[
  headwidth=\the\textwidth+\secnumindent:-\secnumindent,
  footwidth=head:-\secnumindent,
  headsepline,% to show the headwidth
  footsepline% to show the footwidth
]{scrlayer-scrpage}
%
% AND NOW WE BEGIN
%
\begin{document}
\section{Section}
\subsection {Subsection}\label{sec:first}
\p \blindtext
% a reference
\p See \ref{sec:first}
% an example numbered paragraph with an embedded list
\p \blindtext
\begin{itemize}
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
and some words at the end of this para

% an example numbered paragraph with a simple equation
\p The period is defined by a pair of days ($D_l$, $D_u$) where 
\begin{align*}
D_{l} & =  \text{the lower date}  \\
D_{u} & =  \text{the upper date}
\end{align*}
and things happen for all days $d$ where $D_l <= d< D_u$. 
\section{Next section}
\subsection{Next subsection}
\p \blindtext
\end{document}

結果は下の図と同じになります。

これをバージョン3.15および3.16でもコンパイルできるようにするには、

\renewcommand\othersectionlevelsformat[3]{\parbox{\secnumindent}{#3\autodot}}
\providecommand\sectionformat{}\providecommand\subsectionformat{}
\providecommand\subsubsectionformat{}\providecommand\paragraphformat{}

再定義する直前\sectionformatなど


KOMA スクリプトバージョン 3.15 および 3.16

新しいコマンド\RedeclareSectionCommandまたは を使用して\RedeclareSectionCommandsを再定義できます\othersectionlevelsformat。したがって、 によってセクション番号を参照することは可能です\ref

\setcounter{secnumdepth}{4}
\newcommand\p{\paragraph{}}

\newcommand\secnumindent{1.5cm}
\RedeclareSectionCommands[indent=-\secnumindent]{section,subsection,paragraph}
\RedeclareSectionCommand[afterskip=0pt,counterwithin=subsection]{paragraph}
\renewcommand\othersectionlevelsformat[3]{\parbox{\secnumindent}{#3\autodot}}

% from the answer of @Steven:
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
%
% make sure paragraphs reset counting also at sections    
%
\makeatletter
\@addtoreset{paragraph}{section}
\makeatother

元のヘッド幅とフット幅をリセットするには、

\usepackage[
  headwidth=\the\textwidth+\secnumindent:-\secnumindent,
  footwidth=head:-\secnumindent,
  headsepline,% to show the headwidth
  footsepline% to show the footwidth
]{scrlayer-scrpage}

ここに画像の説明を入力してください

コード:

% -*- program: xelatex -*-
\documentclass[english, parskip=full, fontsize=11, DIV12, toc=left, numbers=noenddot]{scrartcl}
\usepackage{babel}
\usepackage{amsmath}
% just so we can see what is going on for now
\usepackage{showframe}
\usepackage{blindtext}
% tighten up spacing of lists
\usepackage{enumitem}
\setlist{noitemsep}

\setcounter{secnumdepth}{4}
\newcommand\p{\paragraph{}}

\newcommand\secnumindent{1.5cm}
\RedeclareSectionCommands[indent=-\secnumindent]{section,subsection,paragraph}
\RedeclareSectionCommand[afterskip=0pt,counterwithin=subsection]{paragraph}
\renewcommand\othersectionlevelsformat[3]{\parbox{\secnumindent}{#3\autodot}}

% from the answer of @Steven:
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
%
% make sure paragraphs reset counting also at sections    
%
\makeatletter
\@addtoreset{paragraph}{section}
\makeatother
% to reset headwidth and footwidth
\usepackage[
  headwidth=\the\textwidth+\secnumindent:-\secnumindent,
  footwidth=head:-\secnumindent,
  headsepline,% to show the headwidth
  footsepline% to show the footwidth
]{scrlayer-scrpage}
%
% AND NOW WE BEGIN
%
\begin{document}
\section{Section}
\subsection {Subsection}\label{sec:first}
\p \blindtext
% a reference
\p See \ref{sec:first}
% an example numbered paragraph with an embedded list
\p \blindtext
\begin{itemize}
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
and some words at the end of this para

% an example numbered paragraph with a simple equation
\p The period is defined by a pair of days ($D_l$, $D_u$) where 
\begin{align*}
D_{l} & =  \text{the lower date}  \\
D_{u} & =  \text{the upper date}
\end{align*}
and things happen for all days $d$ where $D_l <= d< D_u$. 
\section{Next section}
\subsection{Next subsection}
\p \blindtext
\end{document}

KOMA-Script バージョン 3.14 (またはそれ以前)

@Steven の回答を使用して、\othersectionlevelsformatの代わりにを再定義する別の提案があります\thesection。したがって、 によってセクション番号を参照することは依然として可能です\ref

\newcommand\p{\paragraph{}\hspace*{-1em}}

\newcommand\secnumindent{1.5cm}
\renewcommand\othersectionlevelsformat[3]{\makebox[0pt][r]{\parbox{\secnumindent}{#3\autodot}}}
% from the answer of @Steven:
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}

コード:

% -*- program: xelatex -*-
\documentclass[english, parskip=full, fontsize=11, DIV12, toc=left, numbers=noenddot]{scrartcl}
\usepackage{babel}
\usepackage{amsmath}
% just so we can see what is going on for now
\usepackage{showframe}
\usepackage{blindtext}
% tighten up spacing of lists
\usepackage{enumitem}
\setlist{noitemsep}

\setcounter{secnumdepth}{4}
\renewcommand\theparagraph{\thesubsection.\arabic{paragraph}}
\newcommand\p{\paragraph{}\hspace*{-1em}}

\newcommand\secnumindent{1.5cm}
\renewcommand\othersectionlevelsformat[3]{\makebox[0pt][r]{\parbox{\secnumindent}{#3\autodot}}}
% from the answer of @Steven:
\addtolength\hoffset{\secnumindent}
\addtolength\textwidth{-\secnumindent}
% to reset headwidth and footwidth
\usepackage[
  headwidth=\the\textwidth+\secnumindent:-\secnumindent,
  footwidth=head:-\secnumindent,
  headsepline,% to show the headwidth
  footsepline% to show the footwidth
]{scrlayer-scrpage}
%
% make sure paragraphs reset counting at section and subsections
%
\makeatletter
\@addtoreset{paragraph}{subsection}
\@addtoreset{paragraph}{section}
\makeatother
%
% AND NOW WE BEGIN
%
\begin{document}
\section{Section}
\subsection {Subsection}\label{sec:first}
\p \blindtext
% a reference
\p See \ref{sec:first}
% an example numbered paragraph with an embedded list
\p \blindtext
\begin{itemize}
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
and some words at the end of this para

% an example numbered paragraph with a simple equation
\p The period is defined by a pair of days ($D_l$, $D_u$) where 
\begin{align*}
D_{l} & =  \text{the lower date}  \\
D_{u} & =  \text{the upper date}
\end{align*}
and things happen for all days $d$ where $D_l <= d< D_u$. 
\section{Next section}
\subsection{Next subsection}
\p \blindtext
\end{document}

答え2

コメントで提案したように、これらの行を前文に追加してください

\let\svthesection\thesection
\def\thesection{\kern-1.5cm\svthesection}
\hoffset=\dimexpr\hoffset + 1.5cm\relax
\textwidth=\dimexpr\textwidth-1.5cm\relax
\paperwidth=\dimexpr\paperwidth -1.5cm\relax

これらによって実現されるのは、1) のコピーを保存すること\thesection、2)\thesectionセクション ヘッダーを印刷する前に 1.5 cm 左にカーニングするように再定義すること、3)\hoffsetドキュメント全体を 1.5 cm 右にシフトするように変更すること、4) を\textwidth1.5 cm 縮小すること ( と組み合わせると\hoffset、右マージンは変更されません)、5) 変更を考慮して用紙幅を 1.5 cm 縮小することです\hoffset

このアプローチには欠点があることを指摘しましたが、それは MWE の下の図で確認できます。ヘッダー/フッターがシフトされ、つまり中央揃えのページ番号が OP の元のコードと比較して 0.75 cm 右にシフトされます。

OP は、このアプローチが自分のニーズに適しており、\begin{addmargin}環境の追加のみが必要であると述べています。OP がその追加コードをどこに配置したか正確にはわからないため、私はそれを MWE に挿入しようとはしていません。

^コンパイルを容易にするために、環境内の OP のコードから余分な上付き文字が削除されていることに注意してくださいalign*(1 行につき 1 つ削除)。このコードは XeLaTeX でコンパイルされましたが、pdflatex でもコンパイルされます。

% -*- program: xelatex -*-
\documentclass[english, parskip=full, fontsize=11, DIV12, toc=left, numbers=noenddot]{scrartcl}
\usepackage{babel}
\usepackage{amsmath}
% just so we can see what is going on for now
\usepackage{showframe}
\usepackage{blindtext}
% tighten up spacing of lists
\usepackage{enumitem}
\setlist{noitemsep}


\setcounter{secnumdepth}{4}
\renewcommand\theparagraph{\thesubsection.\arabic{paragraph}}
\newcommand\p{\paragraph{}}
%
%
% make sure paragraphs reset counting at section and subsections
%
\makeatletter
\@addtoreset{paragraph}{subsection}
\@addtoreset{paragraph}{section}
\makeatother

\let\svthesection\thesection
\def\thesection{\kern-1.5cm\svthesection}
\hoffset=\dimexpr\hoffset + 1.5cm\relax
\textwidth=\dimexpr\textwidth-1.5cm\relax
\paperwidth=\dimexpr\paperwidth -1.5cm\relax
%
% AND NOW WE BEGIN
%
\begin{document}
\section{Section}
\subsection {Subsection}
\p \blindtext
% an example numbered paragraph with an embedded list
\p \blindtext
\begin{itemize}
\item Item 1
\item Item 2
\item Item 3
\end{itemize}
and some words at the end of this para

% an example numbered paragraph with a simple equation
\p The period is defined by a pair of days ($D_l$, $D_u$) where 
\begin{align*}
D_{l} & =  \text{the lower date}  \\
D_{u} & =  \text{the upper date}
\end{align*}
and things happen for all days $d$ where $D_l <= d< D_u$. 
\end{document}

OPの元の結果

ここに画像の説明を入力してください

私の提案する変更

ここに画像の説明を入力してください

関連情報