wrap things that look like tags but aren't with `{% raw %}`
diff --git a/docs/user_guide.md b/docs/user_guide.md
index e978a7d..d5b10f0 100644
--- a/docs/user_guide.md
+++ b/docs/user_guide.md
@@ -328,14 +328,17 @@
 product of the two specified ranges and will generate a benchmark for each such
 pair.
 
+{% raw %}
 ```c++
 BENCHMARK(BM_SetInsert)->Ranges({{1<<10, 8<<10}, {128, 512}});
 ```
+{% endraw %}
 
 Some benchmarks may require specific argument values that cannot be expressed
 with `Ranges`. In this case, `ArgsProduct` offers the ability to generate a
 benchmark input for each combination in the product of the supplied vectors.
 
+{% raw %}
 ```c++
 BENCHMARK(BM_SetInsert)
     ->ArgsProduct({{1<<10, 3<<10, 8<<10}, {20, 40, 60, 80}})
@@ -354,6 +357,7 @@
     ->Args({3<<10, 80})
     ->Args({8<<10, 80});
 ```
+{% endraw %}
 
 For the most common scenarios, helper methods for creating a list of
 integers for a given sparse or dense range are provided.
@@ -625,6 +629,7 @@
 When you're compiling in C++11 mode or later you can use `insert()` with
 `std::initializer_list`:
 
+{% raw %}
 ```c++
   // With C++11, this can be done:
   state.counters.insert({{"Foo", numFoos}, {"Bar", numBars}, {"Baz", numBazs}});
@@ -633,6 +638,7 @@
   state.counters["Bar"] = numBars;
   state.counters["Baz"] = numBazs;
 ```
+{% endraw %}
 
 ### Counter Reporting
 
@@ -791,6 +797,7 @@
 that loop, every iteration, but without counting that time to the benchmark time.
 That is possible, although it is not recommended, since it has high overhead.
 
+{% raw %}
 ```c++
 static void BM_SetInsert_With_Timer_Control(benchmark::State& state) {
   std::set<int> data;
@@ -805,6 +812,7 @@
 }
 BENCHMARK(BM_SetInsert_With_Timer_Control)->Ranges({{1<<10, 8<<10}, {128, 512}});
 ```
+{% endraw %}
 
 <a name="manual-timing" />