Расстановка переносов для слов с локальным подчеркиванием

Расстановка переносов для слов с локальным подчеркиванием

Я пытаюсь расставить дефисы в длинных ключевых словах, как показано в примере:

\documentclass[10pt]{article}
\usepackage{underscore}

\begin{document}

\pagestyle{empty}

\parbox{1pt}{TESTSTRING\_TESTSTRING\_HYPHENATION}
\\\\

%\begin{figure}[here]
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/regular_testname.png}}
%\centerline{\includegraphics*[width=0.8\paperwidth]{/pictures/escaped\_testname.png}}
%\end{figure}

\end{document}

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

Я пыталсяэтотиэтоти больше безуспешно. Если я раскомментирую цифры в примере, -package underscoreсоздаст проблемы, потому что подчеркивание в именах файлов больше не интерпретируется должным образом. Без использования этого пакета картинки можно вставлять, но я не получаю переносы в строках.

Есть ли у вас идеи, как правильно и локально расставлять переносы, например, вот так: TESTSTRING\myUnderTESTSTRING\myUnderHYPHENATION?

И как можно проконтролировать, чтобы при переносе строки не писался дефис? Это было бы даже предпочтительнее.

Побочный вопрос: почему в моем примере первая часть строки не переносится?

решение1

Возможно, что-то вроде этого поможет, без использования пакета underscore, который вы, по-видимому, предпочитаете (не используя его). Он активирует переносимость с помощью \newusonи восстанавливает исходное определение с \_помощью \newusoff. С помощью этого механизма включения/выключения вы можете контролировать область действия изменений.

Кроме того, «перенос» подчеркивания выполняется без тире, что также, как мне кажется, было желательно, если я правильно понял вопрос.

В любом случае, чтобы сделать перенос первого слова абзаца, \hspace{0pt}необходимо, чтобы в начале абзаца стояла буква a.

\documentclass{article}
%\usepackage{underscore}
\textwidth0pt
\let\svus\_
\newcommand\newuson{\def\_{\svus\allowbreak\hspace{0pt}}}
\newcommand\newusoff{\let\_\svus}
\begin{document}
TESTSTRING\_TESTSTRING\_HYPHENATION

\newuson
\hspace{0pt}TESTSTRING\_TESTSTRING\_HYPHENATION

\newusoff
TESTSTRING\_TESTSTRING\_HYPHENATION
\end{document}

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

решение2

Если вы хотите сохранить длинные строки с подчеркиванием в качестве аргумента макроса, это просто:

\documentclass[10pt]{article}

\DeclareRobustCommand\Name[1]{{%
  \let\_\hyphenationunderscore#1%
}}
\newcommand{\hyphenationunderscore}{%
  \textunderscore\nobreak\hspace{0pt}%
}

\begin{document}

\pagestyle{empty}

\parbox{1pt}{
  \hspace{0pt}%
  \Name{TESTSTRING\_TESTSTRING\_HYPHENATION}
}

\end{document}

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

Вы также можете переопределить \_глобально:

\documentclass[10pt]{article}

\renewcommand{\_}{%
  \textunderscore\nobreak\hspace{0pt}%
}

\begin{document}

\pagestyle{empty}

\parbox{1pt}{
  \hspace{0pt}%
  TESTSTRING\_TESTSTRING\_HYPHENATION
}

\end{document}

В качестве альтернативы вы можете сделать _активными:

\documentclass[10pt]{article}

\newcommand{\hyphenationunderscore}{%
  \textunderscore\nobreak\hspace{0pt}%
}
\catcode`_=\active
\protected\def_{\ifmmode\sb\else\hyphenationunderscore\fi}

\begin{document}

\pagestyle{empty}

\parbox{1pt}{
  \hspace{0pt}%
  TESTSTRING_TESTSTRING_HYPHENATION
}

\end{document}

Обратите внимание, что без \hspace{0pt}этого переносы в значке не работают \parbox, поскольку TeX не делает переносы в словах, которым не предшествует склеивающий символ.

Если вы хотите разорвать также после подчеркивания, измените \nobreakна \linebreak[0]across. Например, второе решение становится

\documentclass[10pt]{article}
\usepackage[T1]{fontenc}

\renewcommand{\_}{%
  \textunderscore\linebreak[0]\hspace{0pt}%
}

\begin{document}

\pagestyle{empty}

  TESTSTRING\_TESTSTRING\_HYPHENATION

\parbox{1pt}{
  \hspace{0pt}%
  TESTSTRING\_TESTSTRING\_HYPHENATION
}

\end{document}

Вывод здесь также показывает, что происходит с T1.

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

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