Вопрос

Вопрос

Первоначально я решил эту проблему обоснования по другому вопросуКак можно использовать оператор оправдания `\everypar`?, однако теперь я замечаю новую проблему, которую я также хотел бы решать автоматически.

Написав этот код Latex, я правильно добился желаемого поведения:

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

Что дает этот PDF-файл с правильным отступом и заданным .98коэффициентом:

введите описание изображения здесь

Однако если в строке есть слишком длинное слово, latex выдает ошибку Overfull \hbox (133.24454pt too wide) in paragraph at lines, учитывая входные данные:

    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.

Что генерирует вывод:

введите описание изображения здесь


Вопрос

Мне бы хотелось, чтобы latex автоматически переносил слово raggedrightddddddddddddddddddddddddddddddddddddddddddddddddddddddddddна новую строку, а не позволял ему выходить за пределы экрана/документа.

Я знаю, что могу использовать следующее решение изПеренесите длинные слова на новую строку, поэтому слово raggedrightddddddddddddddddddddddddddddddddddddddddddddddddddddddddddбудет перенесено на новую строку:

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

Что создает следующий документ:

введите описание изображения здесь

Который теперь, также имеет другое слово, нарушающее ограничения страницы. Поэтому решением было бы снова поставить \lword{that}слово that, которое стало мошенническим.

Так что это очень раздражающая работа, чтобы обойти мой латексный документ, фиксирующий. Я надеюсь, что латексный намерен позволить мне беспокоиться о содержании документа, а не об эстетике документа.

Как правильно сделать Latex и автоматически переносить длинные слова на новые строки, вместо того, чтобы обходить весь документ, расставляя \lword{...}?


Обновление 1

После@Дэвид Карлайлответ У меня возникла новая проблема, использующая этот документ:

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

У меня появилась дополнительная дырка, которой не должно быть:

введите описание изображения здесь

Дыра на второй строке ожидаема, так как длинное слово было вытолкнуто. Однако дыра на первой строке не ожидается.

Финал должен быть таким:

введите описание изображения здесь

Это прежнее изображение можно создать с помощью команды \lword{raggedrightdddddddddddddddddddddddddddddddddddddddddddd}, например:

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

Обновление 2

Проблема в автоматизации написания текста. Обычно это происходит из-за путей, однако это проблема латекса, позволяющая словам выходить за пределы строки. Поэтому то, что я хочу, это просто исправить это. Первый инструмент латекса для этой проблемы с длинными словами — это дефисы. Однако они мне не нравятся. Более того, я предпочитаю просто переносить слово на следующую строку, как в этом примере:https://i.stack.imgur.com/f6Bes.png, Для меня это прямолинейное решение. Latex никогда не должен позволять слову выходить за пределы страницы. Попробуйте сделать это в Microsoft Word, он не позволит. Вместо этого он перенесет слово на следующую строку.

Я бы хотел выравнивание по строке, за исключением некоторых конкретных строк, которые содержат длинные слова или слишком разрежены из-за выравнивания. Для большинства строк выравнивание работает нормально, за исключением упомянутых случаев.

Вот как с этим справляется Microsoft Word:

введите описание изображения здесь

Хотя строка перед длинным словом была плохо выровнена, она не позволяла длинному слову выходить за пределы строки.

решение1

Если предположить, что конкретный вопрос звучит примерно так: «Мне нужно разумно выводить длинные пути к файлам», что вы скажете по этому поводу?

введите описание изображения здесь

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

Связанный контент