diff --git a/doc/src/accelerate_kokkos.txt b/doc/src/accelerate_kokkos.txt
index b2279c5c719b46562c0ecf5593a9600e453f3b74..0c9178d6e4f42863003b0a2848f29cd42189620f 100644
--- a/doc/src/accelerate_kokkos.txt
+++ b/doc/src/accelerate_kokkos.txt
@@ -326,9 +326,9 @@ include both "Cuda" and "OpenMP", as is the case for /src/MAKE/OPTIONS/Makefile.
 
 KOKKOS_DEVICES=Cuda,OpenMP :pre
 
-The suffix “/kk” is equivalent to “/kk/device”, and for Kokkos CUDA,
-using the “-sf kk” in the command line gives the default CUDA version everywhere.
-However, if the “/kk/host” suffix is added to a specific style in the input
+The suffix "/kk" is equivalent to "/kk/device", and for Kokkos CUDA,
+using the "-sf kk" in the command line gives the default CUDA version everywhere.
+However, if the "/kk/host" suffix is added to a specific style in the input
 script, the Kokkos OpenMP (CPU) version of that specific style will be used instead.
 Set the number of OpenMP threads as "t Nt" and the number of GPUs as "g Ng"
 
@@ -338,16 +338,16 @@ For example, the command to run with 1 GPU and 8 OpenMP threads is then:
 
 mpiexec -np 1 lmp_kokkos_cuda_openmpi -in in.lj -k on g 1 t 8 -sf kk :pre
 
-Conversely, if the “-sf kk/host” is used in the command line and then the
-“/kk” or “/kk/device” suffix is added to a specific style in your input script,
+Conversely, if the "-sf kk/host" is used in the command line and then the
+"/kk" or "/kk/device" suffix is added to a specific style in your input script,
 then only that specific style will run on the GPU while everything else will
 run on the CPU in OpenMP mode. Note that the execution of the CPU and GPU
 styles will NOT overlap, except for a special case:
 
 A kspace style and/or molecular topology (bonds, angles, etc.) running on
 the host CPU can overlap with a pair style running on the GPU. First compile
-with “--default-stream per-thread” added to CCFLAGS in the Kokkos CUDA Makefile.
-Then explicitly use the “/kk/host” suffix for kspace and bonds, angles, etc.
+with "--default-stream per-thread" added to CCFLAGS in the Kokkos CUDA Makefile.
+Then explicitly use the "/kk/host" suffix for kspace and bonds, angles, etc.
 in the input file and the "kk" suffix (equal to "kk/device") on the command line.
 Also make sure the environment variable CUDA_LAUNCH_BLOCKING is not set to "1"
 so CPU/GPU overlap can occur.
diff --git a/doc/src/body.txt b/doc/src/body.txt
index d44f82d4cc6703ed41c23dd08b2f1d294d45ceca..54ec157c744b4a18b89e318651b25d385c53c45e 100644
--- a/doc/src/body.txt
+++ b/doc/src/body.txt
@@ -261,7 +261,7 @@ For images created by the "dump image"_dump_image.html command, if the
 polygon consisting of N line segments.  Note that the line segments
 are drawn between the N vertices, which does not correspond exactly to
 the physical extent of the body (because the "pair_style
-rounded/polygon"_pair_body_rounded_polygon.cpp defines finite-size
+rounded/polygon"_pair_body_rounded_polygon.html defines finite-size
 spheres at those point and the line segments between the spheres are
 tangent to the spheres).  The drawn diameter of each line segment is
 determined by the {bflag1} parameter for the {body} keyword.  The
diff --git a/doc/src/compute_orientorder_atom.txt b/doc/src/compute_orientorder_atom.txt
index 70c7ef68f71cfe7bf675730caa5819890510bfe2..adf11dcfcfa9822f4c736f1cb7203ca0e02c446c 100644
--- a/doc/src/compute_orientorder_atom.txt
+++ b/doc/src/compute_orientorder_atom.txt
@@ -67,7 +67,7 @@ parameters. This is followed by that number of integers giving the
 degree of each order parameter. Because {Q}2 and all odd-degree order
 parameters are zero for atoms in cubic crystals (see
 "Steinhardt"_#Steinhardt), the default order parameters are {Q}4,
-{Q}6, {Q}8, {Q}10, and {Q}12. For the FCC crystal with {nnn}=12, {Q}4
+{Q}6, {Q}8, {Q}10, and {Q}12. For the FCC crystal with {nnn} =12, {Q}4
 = sqrt(7/3)/8 = 0.19094....  The numerical values of all order
 parameters up to {Q}12 for a range of commonly encountered
 high-symmetry structures are given in Table I of "Mickel et
diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt
index defd98d520d06489d8e93e93369cb33bdfb4b2d5..1c3787e696638191373d0b563f461c37d42dddad 100644
--- a/doc/src/compute_sna_atom.txt
+++ b/doc/src/compute_sna_atom.txt
@@ -224,7 +224,7 @@ block contains six sub-blocks corresponding to the {xx}, {yy}, {zz},
 notation.  Each of these sub-blocks contains one column for each
 bispectrum component, the same as for compute {sna/atom}
 
-For example, if {K}=30 and ntypes=1, the number of columns in the per-atom
+For example, if {K} =30 and ntypes=1, the number of columns in the per-atom
 arrays generated by {sna/atom}, {snad/atom}, and {snav/atom}
 are 30, 90, and 180, respectively. With {quadratic} value=1,
 the numbers of columns are 930, 2790, and 5580, respectively.
diff --git a/doc/src/fix_controller.txt b/doc/src/fix_controller.txt
index cd4d6adfdf03dc2e8332ffb3eec9e338de1b2240..cfb26138fdaa468c3074b1ef6fa1f1dfe6c6eb8c 100644
--- a/doc/src/fix_controller.txt
+++ b/doc/src/fix_controller.txt
@@ -83,7 +83,7 @@ the following dynamic equation:
 :c,image(Eqs/fix_controller1.jpg)
 
 where {c} is the continuous time analog of the control variable,
-{e}={pvar}-{setpoint} is the error in the process variable, and
+{e} ={pvar}-{setpoint} is the error in the process variable, and
 {alpha}, {Kp}, {Ki}, and {Kd} are constants set by the corresponding
 keywords described above. The discretized version of this equation is:
 
@@ -106,10 +106,10 @@ the value of {alpha} to reflect this, while leaving {Kp}, {Ki}, and
 When choosing the values of the four constants, it is best to first
 pick a value and sign for {alpha} that is consistent with the
 magnitudes and signs of {pvar} and {cvar}.  The magnitude of {Kp}
-should then be tested over a large positive range keeping {Ki}={Kd}=0.
+should then be tested over a large positive range keeping {Ki} = {Kd} =0.
 A good value for {Kp} will produce a fast response in {pvar}, without
 overshooting the {setpoint}.  For many applications, proportional
-feedback is sufficient, and so {Ki}={Kd}=0 can be used. In cases where
+feedback is sufficient, and so {Ki} = {Kd} =0 can be used. In cases where
 there is a substantial lag time in the response of {pvar} to a change
 in {cvar}, this can be counteracted by increasing {Kd}. In situations
 where {pvar} plateaus without reaching {setpoint}, this can be
diff --git a/doc/src/fix_shake.txt b/doc/src/fix_shake.txt
index 9f82fc0fb66f5755f08c22c07c8418b148ec5141..46452a1f7e932eaf2531525f7ee6d557fceffb37 100644
--- a/doc/src/fix_shake.txt
+++ b/doc/src/fix_shake.txt
@@ -58,7 +58,7 @@ required in order to eliminate velocity components along the bonds
 In order to formulate individual constraints for SHAKE and RATTLE,
 focus on a single molecule whose bonds are constrained.  Let Ri and Vi
 be the position and velocity of atom {i} at time {n}, for
-{i}=1,...,{N}, where {N} is the number of sites of our reference
+{i} =1,...,{N}, where {N} is the number of sites of our reference
 molecule. The distance vector between sites {i} and {j} is given by
 
 :c,image(Eqs/fix_rattle_rij.jpg)
diff --git a/doc/src/fix_smd_integrate_tlsph.txt b/doc/src/fix_smd_integrate_tlsph.txt
index 24d319bdb9a3db4a33467cbbb785492a5a25b72e..17c9c0f400f4cdf5dfc67966d5b1f51d4d0f4672 100644
--- a/doc/src/fix_smd_integrate_tlsph.txt
+++ b/doc/src/fix_smd_integrate_tlsph.txt
@@ -14,15 +14,12 @@ fix ID group-ID smd/integrate_tlsph keyword values :pre
 
 ID, group-ID are documented in "fix"_fix.html command
 smd/integrate_tlsph = style name of this fix command
-zero or more keyword/value pairs may be appended :ul
-
-keyword = {limit_velocity}  :l
+zero or more keyword/value pairs may be appended
+keyword = {limit_velocity}  :ul
 
   {limit_velocity} value = max_vel
     max_vel = maximum allowed velocity :pre
 
-:ule
-
 [Examples:]
 
 fix 1 all smd/integrate_tlsph
diff --git a/doc/src/fix_smd_integrate_ulsph.txt b/doc/src/fix_smd_integrate_ulsph.txt
index 0dfb9451de3efb4a72cc7f6af5ce59bccef5b91e..28e38c7f970a9d99a07294bd77f4fb66a54ced00 100644
--- a/doc/src/fix_smd_integrate_ulsph.txt
+++ b/doc/src/fix_smd_integrate_ulsph.txt
@@ -14,9 +14,8 @@ fix ID group-ID smd/integrate_ulsph keyword :pre
 
 ID, group-ID are documented in "fix"_fix.html command
 smd/integrate_ulsph = style name of this fix command
-zero or more keyword/value pairs may be appended :ul
-
-keyword = adjust_radius or limit_velocity
+zero or more keyword/value pairs may be appended
+keyword = adjust_radius or limit_velocity :ul
 
 adjust_radius values = adjust_radius_factor min_nn max_nn
       adjust_radius_factor = factor which scale the smooth/kernel radius
@@ -28,7 +27,7 @@ limit_velocity values = max_velocity
 
 [Examples:]
 
-fix 1 all smd/integrate_ulsph adjust_radius 1.02 25 50 :pre
+fix 1 all smd/integrate_ulsph adjust_radius 1.02 25 50
 fix 1 all smd/integrate_ulsph limit_velocity 1000 :pre
 
 [Description:]
@@ -38,7 +37,7 @@ See "this PDF guide"_PDF/SMD_LAMMPS_userguide.pdf to using Smooth Mach Dynamics
 
 The {adjust_radius} keyword activates dynamic adjustment of the per-particle SPH smoothing kernel radius such that the number of neighbors per particles remains
 within the interval {min_nn} to {max_nn}. The parameter {adjust_radius_factor} determines the amount of adjustment per timestep. Typical values are
-{adjust_radius_factor}=1.02, {min_nn}=15, and {max_nn}=20.
+{adjust_radius_factor} =1.02, {min_nn} =15, and {max_nn} =20.
 
 The {limit_velocity} keyword will control the velocity, scaling the norm of
 the velocity vector to max_vel in case it exceeds this velocity limit.
diff --git a/doc/src/fix_surface_global.txt b/doc/src/fix_surface_global.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b470babab72a14f2761805d4719d8bfc92165546
--- /dev/null
+++ b/doc/src/fix_surface_global.txt
@@ -0,0 +1,19 @@
+"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
+
+:link(lws,http://lammps.sandia.gov)
+:link(ld,Manual.html)
+:link(lc,Section_commands.html#comm)
+
+:line
+
+fix wall/surface/globale command :h3
+
+[Description:]
+
+This feature is not yet implemented.
+
+[Related commands:]
+
+"dump image"_dump_image.html
+
+
diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt
index 4bb3feed0a6e4ecadd1ce1c5af47557719e859ed..c3fcc06bf1c53e780b9b7bc3ce9885671fc9f690 100644
--- a/doc/src/fixes.txt
+++ b/doc/src/fixes.txt
@@ -148,6 +148,7 @@ Fixes :h1
    fix_srd
    fix_store_force
    fix_store_state
+   fix_surface_global
    fix_temp_berendsen
    fix_temp_csvr
    fix_temp_rescale
diff --git a/doc/src/lammps.book b/doc/src/lammps.book
index 8c2daa5835575c3cfd9ab56d75427562b1363c7c..54762a885e6743df62ca8979cd92b842ca91783a 100644
--- a/doc/src/lammps.book
+++ b/doc/src/lammps.book
@@ -1,6 +1,5 @@
-#HTMLDOC 1.8.27
--t pdf14 -f "../Manual.pdf" --book --toclevels 4 --no-numbered --toctitle "Table of Contents" --title --textcolor #000000 --linkcolor #0000ff --linkstyle plain --bodycolor #ffffff --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --portrait --color --no-pscommands --no-xrxcomments --compression=1 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont helvetica --bodyfont times --headfootsize 11.0 --headfootfont helvetica --charset iso-8859-1 --links --embedfonts --pagemode document --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all  --owner-password ""  --user-password "" --browserwidth 680 --no-strict --no-overflow
-
+#HTMLDOC 1.8.28
+-t pdf14 -f "../Manual.pdf" --book --toclevels 4 --no-numbered --toctitle "Table of Contents" --title --textcolor #000000 --linkcolor #0000ff --linkstyle plain --bodycolor #ffffff --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Sans --bodyfont Serif --headfootsize 11.0 --headfootfont Sans-Bold --charset iso-8859-15 --links --embedfonts --pagemode document --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all  --owner-password ""  --user-password "" --browserwidth 680 --no-strict --no-overflow
 Manual.html
 Section_intro.html
 Section_start.html
diff --git a/doc/src/pair_body_rounded_polygon.txt b/doc/src/pair_body_rounded_polygon.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b6dc2e37b5a80fce04b7b753ffb7e007c4703ae6
--- /dev/null
+++ b/doc/src/pair_body_rounded_polygon.txt
@@ -0,0 +1,19 @@
+"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
+
+:link(lws,http://lammps.sandia.gov)
+:link(ld,Manual.html)
+:link(lc,Section_commands.html#comm)
+
+:line
+
+pair_style body/rounded/polygon command :h3
+
+[Description:]
+
+Note: This feature is not yet implemented.
+
+[Related commands:]
+
+"pair_style body"_pair_body.html
+
+[Default:] none
diff --git a/doc/src/pair_smd_hertz.txt b/doc/src/pair_smd_hertz.txt
index 2a70c598cef7a0a5d41ab82aac6d706562e53a1e..eeaa3387a44a834cfe4361a75e40d2610d29bdb6 100644
--- a/doc/src/pair_smd_hertz.txt
+++ b/doc/src/pair_smd_hertz.txt
@@ -28,7 +28,7 @@ The parameter <contact_stiffness> has units of pressure and should equal roughly
 of the Young's modulus (or bulk modulus in the case of fluids) of the material model associated with the SPH particles.
 
 The parameter {scale_factor} can be used to scale the particles' contact radii. This can be useful to control how close
-particles can approach each other. Usually, {scale_factor}=1.0.
+particles can approach each other. Usually, {scale_factor} =1.0.
 
 :line
 
diff --git a/doc/src/pair_smd_triangulated_surface.txt b/doc/src/pair_smd_triangulated_surface.txt
index 76d3891a3c995d2778920b0ad55406e90eb63f1d..c32bf3a22ea89c35efd3231b0ffbfdd72590a810 100644
--- a/doc/src/pair_smd_triangulated_surface.txt
+++ b/doc/src/pair_smd_triangulated_surface.txt
@@ -29,7 +29,7 @@ The parameter <contact_stiffness> has units of pressure and should equal roughly
 of the Young's modulus (or bulk modulus in the case of fluids) of the material model associated with the SPH particle
 
 The parameter {scale_factor} can be used to scale the particles' contact radii. This can be useful to control how close
-particles can approach the triangulated surface. Usually, {scale_factor}=1.0.
+particles can approach the triangulated surface. Usually, {scale_factor} =1.0.
 
 :line
 
diff --git a/doc/src/pair_smd_ulsph.txt b/doc/src/pair_smd_ulsph.txt
index 393bbc066525c90db749a8d80acdfedca93ad4a9..268fe78d02294eca17134ff7fcffb276512db2be 100644
--- a/doc/src/pair_smd_ulsph.txt
+++ b/doc/src/pair_smd_ulsph.txt
@@ -12,8 +12,8 @@ pair_style smd/ulsph command :h3
 
 pair_style smd/ulsph args :pre
 
-these keywords must be given :l
-keyword = {*DENSITY_SUMMATION} or {*DENSITY_CONTINUITY} and {*VELOCITY_GRADIENT} or {*NO_VELOCITY_GRADIENT} and {*GRADIENT_CORRECTION} or {*NO_GRADIENT_CORRECTION}
+these keywords must be given :ul
+keyword = {*DENSITY_SUMMATION} or {*DENSITY_CONTINUITY} and {*VELOCITY_GRADIENT} or {*NO_VELOCITY_GRADIENT} and {*GRADIENT_CORRECTION} or {*NO_GRADIENT_CORRECTION} :pre
 
 [Examples:]
 
diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt
index ccd540bf44a6e1f37e374cf4118f7a53655bbbd6..f1c4e77041a720d917efc38bfa0858ce5f50bc92 100644
--- a/doc/src/pairs.txt
+++ b/doc/src/pairs.txt
@@ -11,6 +11,7 @@ Pair Styles :h1
    pair_awpmd
    pair_beck
    pair_body
+   pair_body_rounded_polygon
    pair_bop
    pair_born
    pair_brownian
diff --git a/doc/utils/converters/lammpsdoc/txt2rst.py b/doc/utils/converters/lammpsdoc/txt2rst.py
index e9a25e18930a9b98d80934b8e10f7044360b0867..17d0916157a4f2d9b07ec655522ac6999b6978cb 100755
--- a/doc/utils/converters/lammpsdoc/txt2rst.py
+++ b/doc/utils/converters/lammpsdoc/txt2rst.py
@@ -67,7 +67,8 @@ class RSTMarkup(Markup):
         text = text.replace('*', '\\*')
         text = text.replace('^', '\\^')
         text = text.replace('|', '\\|')
-        text = re.sub(r'([^"])_', r'\1\\_', text)
+        text = re.sub(r'([^"])_([ \t\n\r\f])', r'\1\\\\_\2', text)
+        text = re.sub(r'([^"])_([^ \t\n\r\f])', r'\1\\_\2', text)
         return text
 
     def unescape_rst_chars(self, text):