每当我需要解释一些别人可能不清楚的事情时,我通常会把它写成简短的文字,以便于理解
\noindent\hrulefill~\raisebox{-4pt}[10pt][10pt]{*any symbol like maltese crux*}~\hrulefill
\begin{flushleft}
\leftskip=0.5cm
\rightskip=0.5cm
\parindent=0.25cm
*Any text*
\end{flushleft}
\noindent\hrulefill~\raisebox{-4pt}[10pt][10pt]{*any symbol like maltese crux*}~\hrulefill
因此,为了遵循,我尝试定义一个新的环境以供遵循。
\documentclass[10pt]{report}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{skak}
\usepackage{bbding}
\newcommand{\paperside}[1]{
\setlength{\leftskip}{#1}
\setlength{\rightskip}{#1}
}
\newcommand{\normalindent}{\parindent=0.25cm}
\newcommand{\divisorule}[1]{\noindent\hrulefill~\raisebox{-4pt}[10pt][10pt]{#1}~\hrulefill}
\newenvironment{explanation}[1][0cm]{
\begin{flushleft}
\paperside{#1}
\normalindent
}
{
\end{flushleft}
}
\newcommand{\varflushleft}[3]{
\begin{explanation}[#2]
\divisorule{#1}\\
\noindent
\textmd{
\normalindent
#3}\,\\
\divisorule{#1}
\end{explanation}
}
\begin{document}
\lipsum[1][1-7]
\varflushleft{\king}{0.5cm}{
START EXPLANATION 1\\
\lipsum[1][7-9]\\
%
\varflushleft{\queen}{1cm}{
START EXPLANATION 2\\
\lipsum[2]\\
END EXPLANATION 2
}
%
\lipsum[1][9-10]\\
END EXPLANATION 1
}
\lipsum[2][1-5]
\end{document}
因此,我发现的解决方案肯定不是最好的,因为我并没有真正定义新的环境,所以为了转到文本中的新行,我总是必须添加两个斜线:因此,我想在这里提出一个问题,以便我能够理解如何实际定义一个具有 \varflushleft 样式的环境,我很难定义它,因为在关闭新环境时不可能使用变量。有人能帮帮我吗?
注意:
我指出我想将除数规则放在 flushleft 之外但我无法做到这一点。
答案1
这符合你的期望吗?
\documentclass[10pt]{report}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{skak}
\usepackage{bbding}
\makeatletter
\newcommand{\paperside}[1]{%
\setlength{\leftskip}{#1}%
\setlength{\rightskip}{\glueexpr #1+\@flushglue\relax}%
}
\makeatother
\newlength{\normalparindent}
\AtBeginDocument{\setlength{\normalparindent}{\parindent}}
\newcommand{\normalindent}{\setlength{\parindent}{\normalparindent}}
\newif\ifnestedexplanation
\newcommand{\divisorule}[1]{%
\noindent\hrulefill~\raisebox{-4pt}[10pt][10pt]{#1}~\hrulefill
}
\NewDocumentEnvironment{explanation}{mO{0cm}}{%
\par
\nestedexplanationtrue
\raggedright
\paperside{#2}%
\normalindent
\divisorule{#1}\par\nopagebreak
}{
\par\nopagebreak
\divisorule{#1}\par
}
\AddToHook{env/explanation/after}{%
\ifnestedexplanation\else\addvspace{\topsep}\fi
}
\AddToHook{env/explanation/before}{%
\par\ifnestedexplanation\else\addvspace{\topsep}\fi
}
\begin{document}
\lipsum[1][1-7]
\begin{explanation}{\king}[0.5cm]
\lipsum[1][7-9]
\begin{explanation}{\queen}[1cm]
\lipsum[2]
\end{explanation}
\lipsum[1][9-10]
\end{explanation}
\lipsum[2][1-5]
\end{document}
在外部说明之前和之后添加了一些垂直空间,但嵌套说明周围没有。这些\nopagebreak
命令确保在起始装饰之后或结束装饰之前不会发生分页。
第一个解释段落和理由无需缩进。此外,装饰也是可选的,但边距量必须以不同的方式指定。
\documentclass[10pt]{report}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{skak}
\usepackage{bbding}
\makeatletter
\newcommand{\paperside}[1]{%
\setlength{\leftskip}{#1}%
\setlength{\rightskip}{#1}%
}
\newlength{\normalparindent}
\AtBeginDocument{\setlength{\normalparindent}{\parindent}}
\newcommand{\normalindent}{\setlength{\parindent}{\normalparindent}}
\newif\ifnestedexplanation
\newcommand{\divisorule}[1]{%
\noindent\hrulefill~\raisebox{-0.7ex}[10pt][10pt]{#1}~\hrulefill
}
\NewDocumentEnvironment{explanation}{O{\maltese}D<>{0cm}}{%
\par
\nestedexplanationtrue
\paperside{#2}%
\divisorule{#1}\par\@afterheading\@afterindentfalse
}{
\par\nopagebreak
\divisorule{#1}\par
}
\AddToHook{env/explanation/after}{%
\ifnestedexplanation\else\addvspace{\topsep}\fi
}
\AddToHook{env/explanation/before}{%
\par\ifnestedexplanation\else\addvspace{\topsep}\fi
}
\makeatother
\begin{document}
\lipsum[1][1-7]
\begin{explanation}[\king]<1cm>
\lipsum[1][7-9]
\begin{explanation}<2cm>
\lipsum[2][1-3]
\lipsum[2][4-6]
\end{explanation}
\lipsum[1][9-10]
\end{explanation}
\lipsum[2][1-5]
\end{document}