メインテキストと自分の引用の両方で機能するカスタマイズされたリスト環境を作成したいと思います (私の場合、dialogue
( ) と呼ぶ環境は、 ( )list
と呼ぶ環境の内側にあります)。しかし、期待どおりのインデントを取得するのに問題があります。私の動作例:myquotation
trivlist
\documentclass{article}
\usepackage[paperwidth=12cm,paperheight=11cm]{geometry}
\usepackage{ifthen}
% quotes
\newenvironment{myquotation}
{\begin{trivlist}
\ifthenelse{\isodd{1}}
{\setlength\leftskip{6.5mm} \setlength\rightskip{0mm}}
{\setlength\leftskip{0mm} \setlength\rightskip{6.5mm}}
\setlength\itemindent{\parindent}
\item\relax \slshape}
{\end{trivlist}}
% dialogues
\newcommand{\entrylabel}[1]{
\ifthenelse{\equal{}{#1}}{
\hfill\mbox{\small{\textsc{--}}}
}{
\mbox{\small{\textsc{#1:}}}
}
}
\newenvironment{dialogue}{\list{}{\renewcommand{\makelabel}{\entrylabel}
\itemsep=0cm \topsep=0cm \parsep=0cm
\listparindent=0em}
}{\endlist}
\begin{document}
Dialogue inside the quotation (unwanted indentation of the first item):
\begin{myquotation}
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\end{dialogue}
Some text inside the quotation following short customized dialogue.
\end{myquotation}
Dialogue inside the quotation (solution that doesn't work by flexible
vertical distances between list items):
\begin{myquotation}
\mbox{}\vspace{-\baselineskip}
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\end{dialogue}
\end{myquotation}
Dialogue outside the quotation:
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\end{dialogue}
\end{document}
私にとって最も重要なのは、引用文の最初の項目のインデントを削除することです。 当初、\mbox{}\vspace{-\baselineskip}
リスト定義 (ここでは と呼びますdialogue
) に行を組み込むことを検討しましたが、項目間のフロート スペースやリストの周囲のフロート垂直スペースの場合は、適切に機能しません。
次のリスト項目を、インデントされていないテキスト境界の位置(図の緑の矢印で示されている位置)に自動的に移動するにはどうすればよいですか?
答え1
誤ったインデントは、trivlist の誤りによるものです\setlength\itemindent{\parindent}
。また、レベルに応じてダイアログ環境を変更したい場合は、外部環境もリストにすると良いでしょう。
どのような垂直スペースが必要なのか分からないので、すべて削除しました。長期的には、パッケージ enumitem を使用してこのようなリストを定義する方が簡単で優れています。
\documentclass{article}
\usepackage[paperwidth=12cm,paperheight=11cm]{geometry}
\usepackage{ifthen}
% quotes
\newenvironment{myquotation}
{\list{}{%
\ifthenelse{\isodd{1}}
{\setlength\leftmargin{\parindent} \setlength\rightmargin{0mm}}
{\setlength\leftmargin{0mm} \setlength\rightmargin{6.5mm}}%
\topsep=0cm \parsep=0cm \partopsep=0pt \listparindent=0em
}
\item\relax \slshape
}%
{\endlist}
% dialogues
\newcommand{\entrylabel}[1]{%
\ifthenelse{\equal{}{#1}}{%
\hfill\mbox{\small{\textsc{--}}}%
}{%
\hspace\labelsep \mbox{\small{\textsc{#1:}}}%
}
}
\newenvironment{dialogue}{\list{}{\renewcommand{\makelabel}{\entrylabel}%
\labelwidth0cm \itemindent-\leftmargin
\topsep=0cm \parsep=0cm
\partopsep=0pt
\listparindent=0em
}}{\endlist}
\begin{document}
Dialogue inside the quotation (unwanted indentation of the first item):
\begin{myquotation}
blblbl
\end{myquotation}
\begin{myquotation}
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\item blbu
\end{dialogue}
Some text inside the quotation following short customized dialogue.
\end{myquotation}
Dialogue inside the quotation (solution that doesn't work by flexible
vertical distances between list items):
\begin{myquotation}
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\end{dialogue}
\end{myquotation}
Dialogue outside the quotation:
\begin{dialogue}
\item[Cookiemonster] Om, om, om...
\item[Roadrunner] Beep, beep, beep...
\item[Reksio] Hau, hau, hau...
\end{dialogue}
\end{document}