Ich brauche in der allerersten Zeile des Dokuments und in jeder Zeile, die auf einen explizit angegebenen Umbruch (\\) folgt, einen Abstand von 0 mm (kein Leerzeichen) zwischen ihrem ersten Zeichen und dem linken Seitenrand (was das Standardverhalten ist). Jede Zeile hingegen, die auf einen implizit durch TeX initiierten Umbruch folgt (aufgrund des Erreichens des rechten Seitenrands), beginnt mit einem Abstand (zwischen ihrem ersten Zeichen und dem linken Seitenrand), der 10 mm größer ist als der Abstand in der vorherigen Zeile.
1234567890123456789012345678901234567 <- 37 characters before auto-wrap
This is very first line with no space
while this is second line after
automatic break.\\
This line also doesn't begin with
space but this one does.
Antwort1
Eine leere Zeile ist klarer als \\
.
So geht's \parshape
:
\documentclass[twocolumn]{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentEnvironment{bizarre}{O{\columnwidth}}
{
\par
\setlength{\parindent}{0pt}
\bp_make_parshape:n { #1 }
\everypar{\parshape 50~\l_bp_parshape_tl}
}
{
\par
}
\tl_new:N \l_bp_parshape_tl
\dim_new:N \l_bp_parshape_dim
\cs_new:Nn \bp_make_parshape:n
{
\dim_set:Nn \l_bp_parshape_dim { #1 }
\tl_set:Nx \l_bp_parshape_tl
{
\int_step_function:nN { 50 } \__bp_parshape:n
}
}
\cs_new:Nn \__bp_parshape:n
{
\dim_eval:n { 10mm*(#1-1) } ~
\dim_eval:n { \l_bp_parshape_dim - 10mm*(#1-1) }
}
\ExplSyntaxOff
\begin{document}
\begin{bizarre}
This is very first line with no space
while this is second line after
automatic break.
This line also doesn't begin with
space but this one does.
\end{bizarre}
\begin{bizarre}[0.8\columnwidth]
This is very first line with no space
while this is second line after
automatic break.
This line also doesn't begin with
space but this one does.
\end{bizarre}
\end{document}