
Я пытаюсь расставить дефисы в длинных ключевых словах, как показано в примере:
\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.