Могу ли я заставить MS Word вставлять символы для автоматического переноса строк?

872
Pepijn Schmitz

Я хочу включить схему XML в технический документ, созданный в MS Word. У него есть строки, которые намного длиннее доступной ширины на странице, поэтому Word автоматически разбивает строки. Я хочу ясно дать понять читателям, где это произошло, чтобы они знали, что следующая строка является продолжением предыдущей. Есть ли способ заставить Word автоматически вставлять символ, например ⏎, в конце каждой автоматически разбитой строки?

Конечно, я мог бы сделать это вручную, но это была бы большая работа, которую я должен был бы повторять каждый раз, когда менялась схема, и это было бы подвержено ошибкам. Я знаю о режиме «показывать непечатаемые символы», но хочу, чтобы эти символы были видны только в этом разделе, а также были напечатаны. Кроме того, «показывать непечатные символы» показывает явные разрывы строк вместо автоматических.

Возможно ли это с помощью MS Word, или если нет, может кто-нибудь порекомендовать другой автоматизированный метод для достижения этого?

4
Нажатие Ctrl + Shft + 8 даст вам символы форматирования, которые не будут точно указывать то, что вы ищете, но будут указывать, когда линия разрывается. Raystafarian 10 лет назад 0
Да, это режим «показа непечатных символов», о котором я упоминал. Это не работает для моей цели, к сожалению. Pepijn Schmitz 10 лет назад 0
Это должен быть специальный персонаж? Как насчет использования Отступов -> Зависание ... Это будет автоматически делать отступ для обернутого содержимого (2-я строка далее). Madball73 10 лет назад 1
Я бы действительно предпочел специальный персонаж, так как это было бы однозначно. В файле есть отступ, поэтому вы не всегда можете быть уверены, что строка предназначена для отступа или является продолжением предыдущей строки. Pepijn Schmitz 10 лет назад 0
Особенно с требованием, которое вы показываете во всех режимах, я не уверен, что это возможно, так как местоположение переноса слов не в статическом местоположении (то есть это не разрыв строки, автоматический или нет). Другой вариант - сделать это маркированным списком или таблицей с затенением, чтобы было ясно, что такое дискретная линия. Это будет обозначать каждую строку, а не только обернутые. Madball73 10 лет назад 0
Да, становится ясно, что это просто невозможно. О, хорошо, это было бы хорошо, но это не имеет большого значения. Pepijn Schmitz 10 лет назад 0

2 ответа на вопрос

0
Madball73

I won't put it as a duplicate, because it's not an answered question, but might want to look here:
Is it possible to set a style to show line continuations in Microsoft Word?

which leads you to : Convert HTML to image

Спасибо за указатель! Я искал дубликаты, но не нашел этого. Это не будет работать для меня, хотя; код слишком длинный, чтобы его изображение помещалось на одной странице. Также было бы трудно заставить его вписаться и естественным образом втиснуться в документ Word с теми же шрифтами, размерами шрифтов и т. Д., И разрешение должно быть очень высоким, чтобы при этом можно было хорошо печатать. Это также звучит как _так много больше работы, чем делать это вручную. ;) Pepijn Schmitz 10 лет назад 0
0
phuclv

Well, you could try the following VBA as a starting point, but I think it will need some work. It assumes that your breaks are always going to be after a space (not unreasonable for a schema IMO) so if you have spaceless text longer than a line you might still have to break those by hand.

This replaces final spaces by the return symbol in the current font + a no-width breaking space, so as long as you can adjust the width of the return symbol (there are various possible ways to do that) so that Word still wraps at the same points, it may be enough.

Sub markAutoLineBreaks() ' Changes line breaks automatically made by Word ' into "return" charaters, but only where the line ' ends in a " " ' This operates on the text in the current selection ' We use a character style Const strStyleName As String = "contchar" Dim r As Word.Range Dim styContchar As Word.Style ' Add the style if it is not present On Error Resume Next Set styContchar = ActiveDocument.Styles.Add(strStyleName, Type:=WdStyleType.wdStyleTypeCharacter) Err.Clear On Error GoTo 0 ' Set the characteristics of the style. What you need to aim for ' is to adjust the character width so that the text breaks at the ' same point (if possible) Set styContchar = ActiveDocument.Styles(strStyleName) With styContchar.Font .Size = 8 End With ' Save the selection Set r = Selection.Range ' remove old line end marks With Selection.Find .ClearFormatting .Style = styContchar .Replacement.ClearFormatting ' Not sure what to use here, but this will have to do .Replacement.Style = ActiveDocument.Styles("Default Paragraph Font") ' 9166 is the return character. 8204 is a No-width breaking space .Text = ChrW(9166) & ChrW(8204) .Replacement.Text = " " .Forward = True .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll ' Moving down lines is not completely straightforward ' but this seems to work Selection.Collapse direction:=wdCollapseStart Do Until Selection.End > r.End Selection.Bookmarks("\line").Select If Right(Selection, 1) = " " Then Selection.SetRange Selection.End - 1, Selection.End Selection.Delete Selection.Text = ChrW(9166) & ChrW(8204) Selection.Style = styContchar Selection.Bookmarks("\line").Select Selection.Collapse direction:=wdCollapseStart End If Selection.MoveDown wdLine, 1, False Loop ' reselect our original selection r.Select Set r = Nothing End Sub 
Интригующий. Я хочу попробовать, но это не компилируется. В цикле do ... есть два "конца if", и мне не совсем понятно, как ты это имел в виду. Pepijn Schmitz 9 лет назад 0
Ты прав. Я отредактировал код и только что сделал быструю проверку. 9 лет назад 0
Спасибо, теперь это работает! Это еще не идеально. Иногда это не добавляет символ к ломаной линии и не понятно почему. И иногда это добавляет символ, но это приводит к тому, что последнее слово больше не помещается в строке, поэтому последнее слово и символ переносятся на следующую строку. Но это хорошее начало и, возможно, как можно ближе к тому, чего я хочу, поэтому я приму ваш ответ. Можете ли вы придумать способ решить проблему с помощью переноса слов на следующую строку, потому что символ возврата делает их слишком длинными? Pepijn Schmitz 9 лет назад 0
Я думаю, что только частичная автоматизация будет возможна без полного знания алгоритма переноса строк в Word и возможности соответственно настроить ширину символа «символа возврата». Можно было бы сделать символ возврата более узким - я посмотрю на это, но не сегодня! Еще одна вещь, которую я не рассмотрел подробно, - это то, что происходит с пробелом без ширины, когда вы нажимаете кнопку «показать / скрыть», и как это влияет на то, что отображается. 9 лет назад 0
ОК, это уже довольно полезно для меня. Это делает это в основном правильно; исправление нескольких ошибок - это гораздо меньше работы, чем выполнение всего вручную. Спасибо! Pepijn Schmitz 9 лет назад 0
У меня был быстрый взгляд, и самый простой вариант для уменьшения размера символов - это изменить строку ".size = 8", например, ".size = 7". Указанный здесь размер является абсолютным, т.е. не относительно окружающего текста. Сделать 6 можно, но 4 становится немного меньше. После этого вы также можете поставить строку с надписью «.Spacing = -1», но без внесения дальнейших изменений, я думаю, это повлияет только на интервал между двумя вставляемыми символами, а не между последним символом и символом повторного запуска, что и является вероятно, нужно. 9 лет назад 0
Я не думаю, что это будет иметь большое значение, хотя. При любом размере будут случаи, когда он будет просто проталкивать длину строки сверх максимума. Я думаю, что лучшая идея - просто переместить правильный отступ вправо для этих строк после применения этого сценария. Это должно привести к тому, что те слова, которые были нежелательно перенесены на следующую строку, вернутся к той строке, к которой они принадлежат. Pepijn Schmitz 9 лет назад 0

Похожие вопросы