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 .98
el factor utilizado:
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:
Pregunta
Me gustaría que latex divida automáticamente la palabra raggedrightdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
en 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 raggedrightdddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
se 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:
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 that
palabra 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:
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í:
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:
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?
\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}