Frage

Frage

Zunächst habe ich dieses Rechtfertigungsproblem bei dieser anderen Frage gelöstWie könnte die Begründungsanweisung „\everypar“ verwendet werden?, jedoch fällt mir jetzt ein neues Problem auf, das ich auch gerne automatisch erledigen lassen würde.

Durch das Schreiben dieses Latex-Codes habe ich das gewünschte Verhalten erzielt:

% proposal.tex
% Based on http://www.latextemplates.com/template/simple-sectioned-essay
\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[brazil]{babel}

\usepackage{hyphsubst}
\usepackage{mathptmx}

\begin{document}

\section{Riscos}

\newbox\linebox \newbox\snapbox
\def\eatlines{
  \setbox\linebox\lastbox % check the last line
  \ifvoid\linebox
  \else % if it’s not empty
    \unskip\unpenalty % take whatever is
    {\eatlines} % above it;
    \setbox\snapbox\hbox{\unhcopy\linebox}
    \ifdim\wd\snapbox<.98\wd\linebox
       \box\snapbox % take the one or the other,
    \else \box\linebox \fi
  \fi}

\everypar={\setbox0=\lastbox \par
   \vbox\bgroup \everypar={}\def\par{\endgraf\eatlines\egroup}}


    In typesetting advertisement copy, a way of justifying paragraphs has
    become popular in recent years that is somewhere between flushright
    and raggedrightddddd setting. Lines that would stretch beyond certain limits
    are set with their glue at natural width. This single paragraph is but an
    example of this procedure; the macros are given next.

    \medskip
    Second paragraph.

\end{document}

Dadurch wird dieses PDF mit korrekter Einrückung und dem .98verwendeten Faktor erstellt:

Bildbeschreibung hier eingeben

Wenn die Zeile jedoch ein zu großes Wort enthält, gibt Latex Overfull \hbox (133.24454pt too wide) in paragraph at linesbei folgender Eingabe den Fehler aus:

    In typesetting advertisement copy, a way of justifying paragraphs has
    become popular in recent years that is somewhere between flushright
    and raggedrightdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 
    setting. Lines that would stretch beyond certain limits
    are set with their glue at natural width. This single paragraph is but an
    example of this procedure; the macros are given next.

    \medskip
    Second paragraph.

Das Ergebnis ist folgende Ausgabe:

Bildbeschreibung hier eingeben


Frage

Ich möchte, dass Latex das Wort automatisch raggedrightddddddddddddddddddddddddddddddddddddddddddddddddddddddddddin eine neue Zeile umbricht, anstatt es über den Bildschirm/das Dokument hinausgehen zu lassen.

Ich weiß, dass ich die folgende Lösung verwenden kann vonLange Wörter in eine neue Zeile verschieben, sodass das Wort raggedrightddddddddddddddddddddddddddddddddddddddddddddddddddddddddddin eine neue Zeile umgebrochen wird:

% Allow to push long words on new lines when they do not fit entirely on the current line.
\newcommand\lword[1]{\leavevmode\nobreak\hskip0pt plus\linewidth\penalty50\hskip0pt plus-\linewidth\nobreak{#1}}

    In typesetting advertisement copy, a way of justifying paragraphs has
    become popular in recent years that is somewhere between flushright
    and \lword{raggedrightdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd}
    setting. Lines that would stretch beyond certain limits
    are set with their glue at natural width. This single paragraph is but an
    example of this procedure; the macros are given next.

    \medskip
    Second paragraph.

Dadurch wird das folgende Dokument generiert:

Bildbeschreibung hier eingeben

Jetzt sprengt auch noch ein weiteres Wort die Seitenbegrenzung. Die Lösung wäre also, \lword{that}das thatWort, das sich aufgelöst hat, wieder einzusetzen.

Das ist also eine sehr lästige Arbeit, die ich um die Korrektur meines Latex-Dokuments herum mache. Ich hoffe, dass Latex mir erlaubt, mich um den Inhalt des Dokuments zu kümmern, anstatt um die Ästhetik des Dokuments.

Wie kann ich Latex richtig machen und lange Wörter automatisch in neue Zeilen einfügen, anstatt das Dokument zu umgehen \lword{...}?


Aktualisierung 1

Nach@David CarlisleAntwort: Ich habe ein neues Problem mit diesem Dokument:

% proposal.tex
% Based on http://www.latextemplates.com/template/simple-sectioned-essay
\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[brazil]{babel}

\usepackage{hyphsubst}
\usepackage{mathptmx}

\begin{document}

\section{Riscos}

\newbox\linebox \newbox\snapbox
\def\eatlines{
  \setbox\linebox\lastbox % check the last line
  \ifvoid\linebox
  \else % if it’s not empty
    \unskip\unpenalty % take whatever is
    {\eatlines} % above it;
    \setbox\snapbox\hbox{\unhcopy\linebox}
    \ifdim\wd\snapbox<.98\wd\linebox
       \box\snapbox % take the one or the other,
    \else \box\linebox \fi
  \fi}

\everypar={\setbox0=\lastbox \par
   \vbox\bgroup \everypar={}\def\par{\endgraf\eatlines\egroup}}

\noindent X\dotfill X

\sloppy
\rightskip 0pt plus 1pt
\emergencystretch\textwidth
\hyphenpenalty=10000
\parskip\baselineskip

    In typesetting advertisement copy, a way of justifying paragraphs has
    become popular in recent years that is somewhere between flushright
    and raggedrightdddddddddddddddddddddddddddddddddddddddddddd setting. Lines that would stretch beyond certain limits
    are set with their glue at natural width. This single paragraph is but an
    example of this procedure; the macros are given next.

    \medskip
    Second paragraph.

\end{document}

Ich habe ein zusätzliches Loch, das nicht existieren sollte:

Bildbeschreibung hier eingeben

Das Loch in der zweiten Zeile ist zu erwarten, da das lange Wort gepusht wurde. Das Loch in der ersten Zeile ist jedoch nicht zu erwarten.

Das Endergebnis sollte wie folgt aussehen:

Bildbeschreibung hier eingeben

Dieses ehemalige Image kann mit dem folgenden Befehl erstellt werden \lword{raggedrightdddddddddddddddddddddddddddddddddddddddddddd}, Beispiel:

% proposal.tex
% Based on http://www.latextemplates.com/template/simple-sectioned-essay
\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper, margin=2cm]{geometry}
\usepackage[brazil]{babel}

\usepackage{hyphsubst}
\usepackage{mathptmx}

\begin{document}

\section{Riscos}

\newbox\linebox \newbox\snapbox
\def\eatlines{
  \setbox\linebox\lastbox % check the last line
  \ifvoid\linebox
  \else % if it’s not empty
    \unskip\unpenalty % take whatever is
    {\eatlines} % above it;
    \setbox\snapbox\hbox{\unhcopy\linebox}
    \ifdim\wd\snapbox<.98\wd\linebox
       \box\snapbox % take the one or the other,
    \else \box\linebox \fi
  \fi}

\everypar={\setbox0=\lastbox \par
   \vbox\bgroup \everypar={}\def\par{\endgraf\eatlines\egroup}}

\newcommand\lword[1]{\leavevmode\nobreak\hskip0pt plus\linewidth\penalty50\hskip0pt plus-\linewidth\nobreak{#1}}

    In typesetting advertisement copy, a way of justifying paragraphs has
    become popular in recent years that is somewhere between flushright
    and \lword{raggedrightdddddddddddddddddddddddddddddddddddddddddddd} setting. Lines that would stretch beyond certain limits
    are set with their glue at natural width. This single paragraph is but an
    example of this procedure; the macros are given next.

    \medskip
    Second paragraph.

\end{document}

Aktualisierung 2

Das Problem ist die Automatisierung des Textschreibens. Normalerweise geschieht dies aufgrund von Pfaden, es ist jedoch ein Latex-Problem, bei dem Wörter über die Zeile hinausgehen. Deshalb möchte ich nur eine Lösung dafür finden. Das erste Latex-Tool für dieses Problem mit langen Wörtern sind Bindestriche. Ich mag sie jedoch nicht. Außerdem ziehe ich es vor, das Wort einfach in die nächste Zeile zu setzen, wie in diesem Beispiel:https://i.stack.imgur.com/f6Bes.pngFür mich ist das eine unkomplizierte Lösung. Latex sollte niemals zulassen, dass ein Wort über die Seitenbegrenzung hinausgeht. Versuchen Sie es mal mit Microsoft Word. Das wird nicht zugelassen. Stattdessen wird das Wort in die nächste Zeile gesetzt.

Ich hätte gerne eine Zeilenausrichtung, außer bei bestimmten Zeilen, die lange Wörter enthalten oder aufgrund der Ausrichtung zu spärlich sind. Bei den meisten Zeilen funktioniert die Ausrichtung gut, außer in den genannten Fällen.

So geht Microsoft Word damit um:

Bildbeschreibung hier eingeben

Während die Zeile vor dem langen Wort schlecht ausgerichtet war, durfte das lange Wort nicht über die Zeilenbegrenzung hinausgehen.

Antwort1

Angenommen, die konkrete Frage lautet eher: „Ich muss lange Dateipfade sinnvoll ausdrucken“, wie wäre es hiermit?

Bildbeschreibung hier eingeben

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[a4paper, margin=2cm]{geometry}

% https://tex.stackexchange.com/a/10401
\usepackage[hyphens]{url}
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks%  save the current one
  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
  \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
  \do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
  \do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
  \do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
  \do\Y\do\Z}

\begin{document}

\section{Riscos}

Original bad breaks, Assim após ativar os testes, basta abrir o arquivo
ArtificialIntelligence/AnswersGuessAiGame/players.py, encontrar a classe ...
Tests logo do final do arquivo e escolher quais dos testes se quer executar.

Option 1, rewrite the paragraph to avoid bad breaks.
Assim após ativar os testes, basta abrir o arquivo
ArtificialIntelligence/AnswersGuessAiGame/players.py, encontrar a classe ...
Tests logo do final do arquivo e escolher quais dos testes se quer executar.

Option 2, use the \verb|\path| command from the \verb|url| package, and allow
URLs to break after any character.
Assim após ativar os testes, basta abrir o arquivo
\path{ArtificialIntelligence/AnswersGuessAiGame/players.py}, encontrar a classe ...
Tests logo do final do arquivo e escolher quais dos testes se quer executar.

\end{document}

verwandte Informationen