Page 1 of 1
Automatic advance of Left Indent . . .
Posted: 2011-01-11 12:50:23
by goldste4
Hello All,
Is there a way, through a macro, to have the Left Indent (not the First Line Indent) advance one tab stop at a time (using the ruler settings currently active for paragraph at the insertion point)?
This macro would do the same as the Indent button on the toolbar, but without changing the first line of the paragraph.
Thanks in advance for any suggestions.
Josh
Re: Automatic advance of Left Indent . . .
Posted: 2011-01-13 10:12:46
by Kino
Unfortunately no proper command for changing Left Indent is available. We have headIndent as an Attributes Object Property which shows the value of headIndent but does not allow you to change it (i.e. it is not writable as you see in the Macro Reference).
I tried to write a macro changing it by altering the underlying RTF code but could not. Various causes seem to make RTF representation of headIndent different. Handling all those different scenarios is beyond my poor ability, sorry.
Kino
Re: Automatic advance of Left Indent . . .
Posted: 2011-01-13 14:07:28
by martin
Kino is right, there's not a good way to do this in a macro. Parsing the RTF is always ugly and not recommended, and says nothing about Kino's awesome macro wrangling abilities!
Re: Automatic advance of Left Indent . . .
Posted: 2011-01-13 14:16:22
by goldste4
Thanks to you both for the response. It looks like I'll just have to make the change manually when I occasionally need to. I was hoping to be able to recreate Wordperfect's hard left indent feature (ol' F7!) which I always found very handy for formatting things on the fly.
Thanks,
Josh
Re: Automatic advance of Left Indent . . .
Posted: 2011-02-04 07:03:54
by Kino
How about this? Instead of changing the amount of hanging indent staying in the same paragraph style, switching to another paragraph style having a larger hanging indent? In the attached rtf file, 21 paragraph styles from
Indent 0 to
Indent 20 are defined like this.

- IndentStyles.png (18.93 KiB) Viewed 17258 times
To switch, for example, from
Indent 0 to
Indent 1, from
Indent 4 to
Indent 5, etc., you can use
IncreaseNumberedParaStyleLevel macro included in
Outline_dot_Macros .zip posted as attachment to my posting here:
http://www.nisus.com/forum/viewtopic.php?p=19028#p19028
Also, you can switch from
Indent 5 to
Indent 4, from
Indent 1 to
Indent 0, etc. by running
DecreaseNumberedParaStyleLevel macro in the same zip archive.
If this way of editing fits your needs (I’m not very sure), then, you would like to customize those
Indent # styles.
· The macros do not rely on specific paragraph style names. They just switch to a paragraph style of the
same base name having a different number (+1 or -1) at the end. Under this condition, any style names are OK.
· All
Indent # styles in the rtf file are based on
Indent style (without a number). Changes in
Indent style, e.g. amount of first line indent, font size, line spacing, etc., will be reflected in all
Indent # styles.
EDIT: I replaced the attached rtf file with a new one. In the older file, irrelevant styles such as Header, Footer, Footnote, etc. were inappropriately based on Indent style.
Re: Automatic advance of Left Indent . . .
Posted: 2011-02-04 09:51:31
by goldste4
Hello Kino,
Your suggestion works great and is exactly what I need. Much thanks.
However, there is one important exception. On paragraphs with a list style (I tend to apply list styles to already applied para styles), the indent styles do not seem to have any affect. Once I remove the list style from the paragraph the indent style works. I add a list style, the indent style is there, but its ruler seems to be over ridden. Now, it just occurred to me that is probably exactly what the list styles are supposed to do!
I would like the flexibility of being able to apply any 'indent' style to any list style and level rather than having to encode a particular list style and level into each indent.
Do you know any way around this tension between the indent and list styles?
Again, thanks.
Josh
Re: Automatic advance of Left Indent . . .
Posted: 2011-02-04 22:49:12
by Kino
Is this what are you looking for? Tab stops are used to control tabs within the list items.

- NumberListIndent.png (27.58 KiB) Viewed 17234 times
In this rtf file, in addition to
Indent <number> styles,
# Indent 0,
# Indent 1 . . .
# Indent 21 have been defined, for which
IncreaseNumberedParaStyleLevel and
DecreaseNumberedParaStyleLevel macros work. (Oup! ugly macro names. Please rename them as you like.)
You can customize those paragraph styles by modifying
# Indent paragraph style (without number) and
List for # Indent list style on which they are based.
And yet another macro which switches the current paragraph style, for example, from
Indent 2 to
# Indent 2 or from
# Indent 2 to
Indent 2.
Code: Select all
stylePair1 = 'Indent'
$stylePair2 = '# Indent'
$doc = Document.active
if $doc == undefined
exit
end
$sel = $doc.textSelection
$switchParaStyle = Hash.new $stylePair1, $stylePair2, $stylePair2, $stylePair1
$nameToStyle = Hash.new
foreach $style in $doc.paragraphStyles
if $nameToStyle{$style.name} == undefined
$nameToStyle{$style.name} = $style
end
end
$name = $num = ''
$sel.text.attributesAtIndex($sel.location).paragraphStyleName.find '^(?<name>.+\S)(?<num>\s*[0-9]+)$', 'E$'
if $name.length
if $num.length
$newParaStyleName = $switchParaStyle{$name} & $num
if Defined $nameToStyle{$newParaStyleName}
Push Target Selection $sel
$nameToStyle{$newParaStyleName}.apply
Pop Target Selection
end
end
end
Re: Automatic advance of Left Indent . . .
Posted: 2011-02-05 06:16:39
by goldste4
Hello Kino,
Thanks again, this certainly gets me towards what I was looking for. Unfortunately, I need the #indent styles to work on any level of the list style. Here is an example from (yesterdays!) lecture notes to illustrate what I mean:

- NWP Indent Screen Capture 3.jpg (63.24 KiB) Viewed 17227 times
In this example, I am using indents on the second level of the list style (I've manually moved the left indent marker each time I need it), but I also use it on the first and third (or whatever) levels too. (I've gotten into the habit of formatting the lectures this way because WordPerfect, which I used previously, would allow you to insert a hanging indent code anywhere in the line with one keystroke that would give you this effect).
However, I can only get your otherwise very helpful #indent styles to work on level 1 on the list style and not on any others.
Thanks for all your efforts on this.
Josh
Re: Automatic advance of Left Indent . . .
Posted: 2011-02-05 11:26:22
by Kino
Now I
see. I have been wondering how you use hanging indent and why you stick to it. I’d like to have looked at the image — or rather an attached sample document file — in your very first posting. That must have simplified many things.
Anyway, hopefully this one will meet your needs.

- IndentedNumberLists.png (36.1 KiB) Viewed 17219 times
In the attached rtf file,
(?:# )?Indent [A-I] - [0-5], i.e.
Indent A - 0,
Indent A - 1,
Indent A - 2,
Indent A - 3,
Indent A - 4,
Indent A - 5,
Indent B - 0 . . . Indent I - 5 and their counterparts having a list style, i.e.
# Indent A - 0,
# Indent A - 1,
# Indent A - 2,
# Indent A - 3,
# Indent A - 4,
# Indent A - 5,
# Indent B - 0 . . . # Indent I - 5 are defined, for which
Increase Numbered Para Style Level and
Decrease Numbered Para Style Level macros work.
If
‘Indent . . .’ or
‘# indent . . .’ styles already defined in the rtf file are not sufficient, I think it would not be so difficult for you to add new ones. As you see, in those styles,
A-I correspond to List Style’s different
Levels and
0-5 to different
amounts of hanging indent.
And here is a revised version of
Switch Paragraph Style macro posted in my last message on this thread:
Code: Select all
$diff = '# '
$doc = Document.active
if $doc == undefined
exit
end
$sel = $doc.textSelection
$nameToStyle = Hash.new
foreach $style in $doc.paragraphStyles
if $nameToStyle{$style.name} == undefined
$nameToStyle{$style.name} = $style
end
end
$findDiff = '^' & $diff
$paraStyleName = $sel.text.attributesAtIndex($sel.location).paragraphStyleName
$found = $paraStyleName.find($findDiff, 'E-i')
if Defined $found
$range = Range.new 0, $diff.length
$paraStyleName.deleteInRange $range
else
$paraStyleName = $diff & $paraStyleName
end
if Defined $nameToStyle{$paraStyleName}
Push Target Selection $sel
$nameToStyle{$paraStyleName}.apply
Pop Target Selection
end
EDIT: Fixed typos.