Pregunta

Pregunta

Inicialmente resolví este problema de justificación en esta otra pregunta.¿Cómo podría usarse la declaración de justificación `\everypar`?, sin embargo, ahora noto un nuevo problema que también me gustaría que se solucione automáticamente.

Al escribir este código de látex obtuve correctamente el comportamiento deseado:

% 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}

Lo que produce este PDF, con sangría correcta, dado .98el factor utilizado:

ingrese la descripción de la imagen aquí

Sin embargo, si hay una palabra demasiado grande en la línea, el látex arroja el error Overfull \hbox (133.24454pt too wide) in paragraph at lines, dada la entrada:

    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.

Lo que genera la salida:

ingrese la descripción de la imagen aquí


Pregunta

Me gustaría que latex divida automáticamente la palabra raggedrightdddddddddddddddddddddddddddddddddddddddddddddddddddddddddden una nueva línea, en lugar de permitir que vaya más allá de la pantalla/documento.

Sé que puedo usar la siguiente solución deInsertar palabras largas en una nueva línea, por lo que la palabra raggedrightddddddddddddddddddddddddddddddddddddddddddddddddddddddddddse dividirá en una nueva línea:

% 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.

Lo cual genera el siguiente documento:

ingrese la descripción de la imagen aquí

Que ahora también tiene otra palabra que rompe los límites de páginas. Por lo tanto, la solución sería volver a difundir \lword{that}la thatpalabra que se había deshonrado.

Así que este es un trabajo muy molesto para arreglar mis documentos de látex. Espero que la intención del látex sea permitirme preocuparme por el contenido del documento, en lugar de por la estética del documento.

¿Cómo puedo hacer látex correctamente y automáticamente insertar palabras largas en nuevas líneas, en lugar de recorrer el documento poniendo \lword{...}?


Actualización 1

Después@David Carlislerespuesta Tengo un nuevo problema, usando este documento:

% 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}

Tengo un agujero extra, que no debería existir:

ingrese la descripción de la imagen aquí

Se espera el agujero en la segunda línea ya que se empujó la palabra larga. Sin embargo, no se espera el agujero en la primera línea.

La final debería quedar así:

ingrese la descripción de la imagen aquí

Esta imagen anterior se puede crear usando el comando \lword{raggedrightdddddddddddddddddddddddddddddddddddddddddddd}, ejemplo:

% 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}

Actualización 2

El problema es la automatización de la redacción de textos. Generalmente esto sucede en los caminos, sin embargo, es un problema de látex que permite que las palabras vayan más allá de la línea. Por lo tanto, lo que quiero es simplemente solucionarlo. La primera herramienta de látex para este problema largo son los guiones. Sin embargo no me gustan. Además prefiero simplemente colocar la palabra en la siguiente línea, como en este ejemplo:https://i.stack.imgur.com/f6Bes.png, Para mí, es una solución sencilla. Latex nunca debe permitir que una palabra vaya más allá del límite de páginas. Intente hacerlo en Microsoft Word, no lo permitirá. En cambio, pondrá la palabra en la siguiente línea.

Me gustaría una justificación de línea, excepto algunas líneas específicas que contienen palabras largas o son demasiado escasas debido a la justificación. Para la mayoría de las líneas, la justificación funciona bien, excepto en los casos mencionados.

Así es como lo trata Microsoft Word:

ingrese la descripción de la imagen aquí

Si bien la línea anterior a la palabra larga estaba mal justificada, no permitía que la palabra larga fuera más allá del límite de línea.

Respuesta1

Suponiendo que la pregunta específica sea más como "Necesito imprimir rutas de archivo largas de manera sensata", ¿qué tal esto?

ingrese la descripción de la imagen aquí

\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}

información relacionada